⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3257685_ce.cpp

📁 部分PKU上的源码
💻 CPP
字号:
#include <iostream.h>
#include<string>
using namespace std;
int num[21][21][2],work[21][21][2],out[21];
int i,j,k,count,t;
int K,N,C;
void display(int number);
int get (int x,int y,int z);
void output(int x,int number);
void output2(int x,int number,int z,int chu);

	int main ()
{cin>>K;
memset(num,0,21*21*2);
 memset(work,0,21*21*2);
num[2][1][0]=0;num[2][1][1]=1;	num[2][2][0]=1;num[2][2][1]=0;
for(i=3;i<=20;i++)
  for(j=1;j<=i;j++)
  {get(i,j,1);get(i,j,0);}
for(i=0;i<K;i++)
{for(j=1;j<=20;j++) out[j]=j;
	cin>>N>>C; 
output(N,C);
cout<<endl;
}
	return 0;
}
	int get (int x,int y,int z)
{if(work[x][y][z]==1) return num[x][y][z];
else{if(z==0) {for(i=1;i<y;i++) num[x][y][z]+=get(x-1,i,1);}
	   else {for(i=y;i<=x-1;i++) num[x][y][z]+=get(x-1,i,0);}
	    work[x][y][z]=1;
		return num[x][y][z];}
}

void output(int x,int number)
{if(x==2){if(number==2) display(2),display(1);
           else display(1),display(1);
            }
	else{count=0;
	for(i=1;i<=x;i++)
	{count+=num[x][i][0]; if(count>=number) {count-=num[x][i][0];display(i);output2(x-1,number-count,1,i);return;}
	count+=num[x][i][1]; if(count>=number) {count-=num[x][i][1];display(i);output2(x-1,number-count,0,i);return;}
	}
}
}
void output2(int x,int number,int z,int chu)
{if(x==2){if(z==0) display(2),display(1);
           else display(1),display(1);
            }
else{count=0;
	if(z==1) {
	for(i=1;i<=x;i++) 
	{
		count+=num[x][i][1]; 
		if(count>=number) {count-=num[x][i][1];display(i);output2(x-1,number-count,0,i);return;}
	}
}
else {
	for(i=chu;i<=x;i++) 
	{
		count+=num[x][i][0]; 
		if(count>=number) {count-=num[x][i][0];display(i);output2(x-1,number-count,1,i);return;}
	}
}
}
}
	
	
	void display(int number)
{t=0;
	for(k=1;k<=20;k++) 
	{if(out[k]!=0) t++;
	 if(t==number) cout<<k<<" ",out[k]=0,k=20;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -