windows of ccpc

.Katherine௰發表於2020-11-20
#include <stdio.h>
#include <math.h>
void f(int n, int s, int t)
{
	if(n==2)
	{
		if(t==1) {
			if(s==1)
				printf("CC");
			else printf("PC");
		} 
		else {
			if(s==1)
				printf("PP");
			else printf("CP");
		}
		return ;
	}
	int x=s%(n/2);
	if(x==0)
		x=n/2;
	if(t==1)
	{
		if(s>n*1.0/2)
			f(n/2, x, 0);
		else f(n/2, x, 1);
		f(n/2, x, 1);
	}
	else if(t==0){
		if(s>n*1.0/2)
			f(n/2, x, 1);
		else f(n/2, x, 0);
		f(n/2, x, 0);
	}	
}
int main()
{
	int t, n;
	scanf("%d", &t);
	while(t--)
	{
		scanf("%d", &n);
		n=pow(2, n);
		for(int i=1; i<=n; i++) {
			f(n, i, 1);
			printf("\n"); 
		} 
	}
	return 0;
}
#include<iostream>
#include<math.h>
using namespace std;
char map[1050][1050];
void init(){
	map[1][1]='C';
	map[1][2]='C';
	map[2][1]='P';
	map[2][2]='C';
	int i,j,k;
	for(i=2;i<=10;i++){
		int left = pow(2,i-1);
		int right = pow(2,i);
		for(j=1;j<=left;j++){
			for(k=left+1;k<=right;k++){
				map[j][k]=map[j][k-left];
				map[j+left][k]=map[j][k-left];
			}
			for(j=left+1;j<=right;j++){
				for(k=1;k<=left;k++){
					map[j][k]=(map[j-left][k]=='C')?'P':'C';
				}
			}
		}
	}
	return;
}

int main(){
	int T;
	cin>>T;
	init();
	while(T--){
		int s,i,j;
		cin>>s;
		int len=pow(2,s);
		for(i=1;i<=len;i++){
			for(j=1;j<=len;j++){
				cout<<map[i][j];
			}
			cout<<endl;
		}
	}
	return 0;
}

相關文章