YEZAELP

CUBE-112: Golden Rectangle

Jul 11th, 2020
70
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using pi=pair<int,int>;
  4. using pii=pair<int,pi>;
  5. char ar[1000][1000];
  6. int f[16];
  7. bool visited[16];
  8. int n,m;
  9. void p_ar(){
  10.     for(int i=1;i<=n;i++){
  11.         for(int j=1;j<=m;j++){
  12.             printf("%c",ar[i][j]);
  13.         }
  14.         printf("\n");
  15.     }
  16. }
  17. int find_start(int i){
  18.     if(i%4==0) return i;
  19.     else if(i<=3) return 1;
  20.     else if(i<=7) return 5;
  21.     else if(i<=11) return 9;
  22.     else return 13;
  23. }
  24. void fill_ar(int ui,int uj,int num){
  25.     n=max(n,f[num]+ui-1);
  26.     m=max(m,f[num]+uj-1);
  27.     for(int i=ui;i<=f[num]+ui-1;i++){
  28.         for(int j=uj;j<=f[num]+uj-1;j++){
  29.             ar[i][j]=64+num;
  30.         }
  31.     }
  32. }
  33. int main(){
  34.  
  35.     int N;
  36.     scanf("%d",&N);
  37.  
  38.     for(int i=1;i<=N;i++){
  39.         if(i==1 or i==2) f[i]=1;
  40.         else f[i]=f[i-1]+f[i-2];
  41.     }
  42.  
  43.     int start;
  44.     start=find_start(N);
  45.  
  46.     queue <pii> q;
  47.     q.push({ start , {1,1} });
  48.     while(q.size()>0){
  49.         int ui,uj,num;
  50.         num=q.front().first;
  51.         ui=q.front().second.first;
  52.         uj=q.front().second.second;
  53.         q.pop();
  54.         visited[num] = true;
  55.         fill_ar(ui,uj,num);
  56.  
  57.         int vi,vj,v_num;
  58.         if(num+1<=N and !visited[num+1]){
  59.             v_num=num+1;
  60.  
  61.             if(num%4==1)
  62.                 q.push({v_num,{ui,uj+f[num]}});
  63.            
  64.             else if(num%4==3)
  65.                 q.push({v_num,{ui-f[num-1],uj-f[num+1]}});
  66.            
  67.             else if(num%4==2)
  68.                 q.push({v_num,{ui+f[num],uj-f[num-1]}});
  69.            
  70.         }
  71.         if(num-1>=1 and !visited[num-1]){
  72.             v_num=num-1;
  73.  
  74.             if(num%4==1)
  75.                 q.push({v_num,{ui+f[num],uj}});
  76.            
  77.             else if(num%4==0)
  78.                 q.push({v_num,{ui+f[num-2],uj+f[num]}});
  79.            
  80.             else if(num%4==3)
  81.                 q.push({v_num,{ui-f[num-1],uj+f[num-2]}});
  82.      
  83.             else if(num%4==2)
  84.                 q.push({v_num,{ui,uj-f[num-1]}});
  85.            
  86.         }
  87.     }
  88.  
  89.     p_ar();
  90.  
  91.     return 0;
  92. }
  93. /*
  94. EEEEE  FFFFFFFF
  95. EEEEE  FFFFFFFF
  96. EEEEE  FFFFFFFF
  97. EEEEE  FFFFFFFF
  98. EEEEE  FFFFFFFF
  99. DDD AB FFFFFFFF
  100. DDD CC FFFFFFFF
  101. DDD CC FFFFFFFF
  102. */
RAW Paste Data Copied