2851036_wa.cc
来自「做的POJ的一些题目」· CC 代码 · 共 116 行
CC
116 行
#include<iostream>
#include<stdio.h>
using namespace std;
int sign[13]={0,2,4,8,16,32,64,128,256,512,1024,2048,4096};
typedef struct
{
int count;
int index;
}nodes;
nodes node[1000000];
void out(int i,int a)
{
int p=a,x=0;
char m[13];
while(sign[p]<=node[i].index)
p++;
p--;
int v=p-1;
int k=node[i].index-sign[p];
while(k>0)
{
m[x]=char(k%2+'0');
k=k/2;
x++;
}
for(int i=x;i<=v;i++)
m[i]='0';
for(int j=v;j>=0;j--)
printf("%c",m[j]);
printf(" ");
}
int cmp( const void *a , const void *b )
{
nodes *c = (nodes *)a;
nodes *d = (nodes *)b;
if(c->count != d->count) return d->count - c->count;
else return d->index - c->index;
}
int main()
{
int a,b,k=1,l,l1,n,w=0,i,j;
scanf("%d %d %d",&a,&b,&n);
l=sign[b];
l1=sign[a];
char mg[13];
for(int i=a+1;i<=b;i++)
sign[i]=sign[i]-sign[a];
sign[a]=0;
l=sign[b]+l;
for(int i=0;i<l;i++)
{
node[i].count=0;
node[i].index=sign[a]+i;
}
getchar();
for(i=1;i<=b;i++)
{
mg[i]=getchar();
if(mg[i]=='2')
{
b=i;
break;
}
}
while(mg[b]!='2')
{
for(i=1;i<=a;i++)
w=int(mg[i]-'0')+w*2;
node[w].count++;
for(j=a+1;j<=b;j++)
{
w=int(mg[j]-'0')+w*2;
node[sign[j]+w].count++;
}
for(i=2;i<=b;i++)
mg[i-1]=mg[i];
w=0;
mg[b]=getchar();
}
int t=1;
while(a+t<=b)
{
for(i=t;i<=a+t-1;i++)
w=int(mg[i]-'0')+w*2;
node[w].count++;
for(j=a+1;j<=b-t;j++)
{
w=int(mg[j]-'0')+w*2;
node[sign[j]+w].count++;
}
w=0;
t++;
}
qsort(node,l,sizeof(node[0]),cmp);
int s=0;
i=0;
while(i<l && s<n)
{
if(node[i].count==0)
break;
printf("%d ",node[i].count);
out(i,a);
s++;
i++;
while(i<l && node[i].count==node[i-1].count)
{
out(i,a);
i++;
}
printf("\n");
}
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?