Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using pi=pair<int,int>;
- using pii=pair<int,pi>;
- char ar[1000][1000];
- int f[16];
- bool visited[16];
- int n,m;
- void p_ar(){
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- printf("%c",ar[i][j]);
- }
- printf("\n");
- }
- }
- int find_start(int i){
- if(i%4==0) return i;
- else if(i<=3) return 1;
- else if(i<=7) return 5;
- else if(i<=11) return 9;
- else return 13;
- }
- void fill_ar(int ui,int uj,int num){
- n=max(n,f[num]+ui-1);
- m=max(m,f[num]+uj-1);
- for(int i=ui;i<=f[num]+ui-1;i++){
- for(int j=uj;j<=f[num]+uj-1;j++){
- ar[i][j]=64+num;
- }
- }
- }
- int main(){
- int N;
- scanf("%d",&N);
- for(int i=1;i<=N;i++){
- if(i==1 or i==2) f[i]=1;
- else f[i]=f[i-1]+f[i-2];
- }
- int start;
- start=find_start(N);
- queue <pii> q;
- q.push({ start , {1,1} });
- while(q.size()>0){
- int ui,uj,num;
- num=q.front().first;
- ui=q.front().second.first;
- uj=q.front().second.second;
- q.pop();
- visited[num] = true;
- fill_ar(ui,uj,num);
- int vi,vj,v_num;
- if(num+1<=N and !visited[num+1]){
- v_num=num+1;
- if(num%4==1)
- q.push({v_num,{ui,uj+f[num]}});
- else if(num%4==3)
- q.push({v_num,{ui-f[num-1],uj-f[num+1]}});
- else if(num%4==2)
- q.push({v_num,{ui+f[num],uj-f[num-1]}});
- }
- if(num-1>=1 and !visited[num-1]){
- v_num=num-1;
- if(num%4==1)
- q.push({v_num,{ui+f[num],uj}});
- else if(num%4==0)
- q.push({v_num,{ui+f[num-2],uj+f[num]}});
- else if(num%4==3)
- q.push({v_num,{ui-f[num-1],uj+f[num-2]}});
- else if(num%4==2)
- q.push({v_num,{ui,uj-f[num-1]}});
- }
- }
- p_ar();
- return 0;
- }
- /*
- EEEEE FFFFFFFF
- EEEEE FFFFFFFF
- EEEEE FFFFFFFF
- EEEEE FFFFFFFF
- EEEEE FFFFFFFF
- DDD AB FFFFFFFF
- DDD CC FFFFFFFF
- DDD CC FFFFFFFF
- */
Add Comment
Please, Sign In to add comment