2019 CCPC 네트워크 항주 전기 6708 Windows Of CCPC (문제 풀이 + 코드)

12741 단어 해제
제목 전송 문:http://acm.hdu.edu.cn/showproblem.php?pid=6708 제목:
Windows Of CCPC
Problem Description
In recent years, CCPC has developed rapidly and gained a large number of competitors .One contestant designed a design called CCPC Windows .The 1-st order CCPC window is shown in the figure: 2019CCPC网络赛 杭电 6708 Windows Of CCPC(题解+代码)_第1张图片 And the 2-nd order CCPC window is shown in the figure: 2019CCPC网络赛 杭电 6708 Windows Of CCPC(题解+代码)_第2张图片 We can easily find that the window of CCPC of order k is generated by taking the window of CCPC of order k−1 as C of order k, and the result of inverting C/P in the window of CCPC of order k−1 as P of order k. And now I have an order k ,please output k-order CCPC Windows , The CCPC window of order k is a 2k*2k matrix. Input The input file contains T test samples.(1<=T<=10)
The first line of input file is an integer T.
Then the T lines contains a positive integers k , (1≤k≤10) Output For each test case,you should output the answer . Sample Input
3
1
2
3

Sample Output
CC
PC
CCCC
PCPC
PPCC
CPPC
CCCCCCCC
PCPCPCPC
PPCCPPCC
CPPCCPPC
PPPPCCCC
CPCPPCPC
CCPPPPCC
PCCPCPPC

제목: 사실 제목 의 뜻 은 그림 에서 직접 볼 수 있 습 니 다. 다음 과 같은 그림 입 니 다. 2019CCPC网络赛 杭电 6708 Windows Of CCPC(题解+代码)_第3张图片 우리 가 1 단계 창 을 4 개의 구역 으로 바 꾸 면 1, 2, 4 구역 의 기호 가 똑 같 고 세 번 째 구역 은 다른 구역 의 기호 와 '반대' 인 것 을 알 수 있 습 니 다. (C 는 P 로 바 꾸 고 P 는 C 로 바 꿉 니 다)2 단계 와 이상 의 상황 에서 우 리 는 그것 이 상기 1 단계 창 이라는 것 을 알 수 있 고 이전 1 단계 창 을 1 구역 으로 생각 하 며 각 지역 간 의 관 계 는 1 단계 와 비슷 하 다.세 번 째 구역 의 모든 기 호 는 다른 구역 의 기호 와 '반대' 되 어야 합 니 다.2019CCPC网络赛 杭电 6708 Windows Of CCPC(题解+代码)_第4张图片 3 단계 및 이상 단계 창 은 위의 유도 과정 과 비슷 하 다.문제 풀이: 문제 의 데이터 가 비교적 작 기 때문에 우 리 는 직접 배열 로 미리 처리 할 수 있 고 그때 직접 출력 하면 된다.주의해 야 할 것 은 모든 단계 창의 크기 가 2k (k 는 단계 수) 라 는 것 을 발견 할 수 있다 는 것 이다.그래서 2 구역 의 가로 좌표 범 위 는 2k - 1 + 1 ~ 2k 이 고 세로 좌표 범 위 는 1 ~ 2k - 1 (블 로 거들 은 초기 화 기점 을 1 로 정 했다).다른 지역 은 이와 유사 하 다.코드 와 설명 은 다음 과 같 습 니 다.
#include
#include 
using namespace std;
char map[1050][1050];//最大为1024
void init() {
	map[1][1] = map[1][2] = map[2][2] = 'C';
	map[2][1] = 'P'; 
	for(int i=2;i<=10;i++) {
		int left=pow(2,i-1);//1区的大小 
		int right=pow(2,i);//窗口的总大小 
		for(int j=1;j<=left;j++)
			for(int k=left+1;k<=right;k++)
				map[j+left][k]=map[j][k]=map[j][k-left];//2、4区同时赋值 
		for(int j=left+1;j<=right;j++)
			for(int k=1;k<=left;k++)
				map[j][k]=(map[j-left][k]=='P')?'C':'P';//3区赋值 
	}
}
int main() {
	int T;
	init();
	cin>>T;
	while(T--) {
		int k,len;
		cin>>k;
		len=pow(2,k);//len为k阶的大小范围 
		for(int i=1;i<=len;i++) {
			for(int j=1;j<=len;j++)
				cout<<map[i][j];
			cout<<endl;
		}
	} 
	return 0;
}

ac图片

좋은 웹페이지 즐겨찾기