Advertisement
a53

SpiralMatrix

a53
Mar 11th, 2020
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <fstream>
  2. #include <cmath>
  3. using namespace std;
  4. ifstream in("spiralmatrix.in");
  5. ofstream out("spiralmatrix.out");
  6. int l0=1,l1=1,l2=1,c0=1,c1=1,c2=1;
  7. int main(){
  8. long long n,nc=0;
  9. int l=1,c=0,dl=0,dc=1;
  10. in>>n;
  11. long long p2=n/sqrt(2);
  12. if(p2*p2==n*n/2)p2--;
  13. nc=n*n/2-p2*p2;
  14. if(n%2==0){
  15. if(p2%2==0){
  16. dl=1;dc=0;
  17. l=c=n/2-p2/2+1;c--;
  18. if(nc<=p2+1){l+=nc-1;}
  19. else{l+=p2;c+=nc-p2-1;}
  20. }
  21. else{l=c=n/2+1+p2/2;
  22. dl=-1;dc=0;
  23. if(nc<=p2+1){l-=nc-1;}
  24. else{ l=n-l+1;
  25. c-=nc-p2-1;
  26. dl=0;dc=-1;}}}
  27. else{
  28. if(p2%2==0){
  29. dl=-1;dc=0;
  30. l=c=n/2+1+p2/2;
  31. if(nc<=p2+1){l+=dl*(nc-1);}
  32. else{ dl=0;dc=-1;
  33. l-=p2;c-=nc-p2-1;}
  34. }
  35. else{l=c=n/2-p2/2+1;c--;
  36. dl=1;dc=0;
  37. if(nc<=p2+1){l+=nc-1;}
  38. else{ l+=p2;
  39. c+=nc-p2-1;
  40. dl=0;dc=1;}}}
  41. if(n%2==0){l1=l;c1=c;}
  42. else{l2=l;c2=c;
  43. if(l2+dl<=(n-p2)/2 || n-(n-p2)/2+1<l2+dl || c2+dc<(n-p2)/2 || n-(n-p2)/2+1<c2+dc){
  44. if(dl==-1 && dc==0){dl=0;dc=-1;}
  45. else{if(dl==0 && dc==-1){dl=1;dc=0;}
  46. else{ if(dl==1 && dc==0){dl=0;dc=1;}
  47. else{if(dl==0 && dc==1){dl=-1;dc=0;}}}}}
  48. l1=l2+dl;c1=c2+dc;}
  49. if(l1+dl<=(n-p2)/2 || n-(n-p2)/2+1<l1+dl || c1+dc<(n-p2)/2 || n-(n-p2)/2+1<c1+dc){
  50. if(dl==-1 && dc==0){dl=0;dc=-1;}
  51. else{if(dl==0 && dc==-1){dl=1;dc=0;}
  52. else{ if(dl==1 && dc==0){dl=0;dc=1;}
  53. else{if(dl==0 && dc==1){dl=-1;dc=0;}}}}}
  54. l0=l1+dl;c0=c1+dc;
  55. out << l0 << ' ' << c0 << endl;
  56. if(n%2==0)out << l1 << ' ' << c1 << endl;
  57. else out << l2 << ' ' << c2 << endl;
  58. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement