fork(1) download
  1. #include<iostream>
  2. using namespace std;
  3. int map[2000][2000],score[2000][2000]={0},test[2000][2000]={0},way[4000000][2];
  4. int main()
  5. {
  6. int m,n;
  7. cin>>m>>n;
  8. int x,y,step,again,fen,max_score=0,cir[2];
  9. for(int i=0;i<n;i++)
  10. {
  11. for(int j=0;j<m;j++) cin>>map[i][j];
  12. }//a[y][x]
  13. for(int i=0;i<n;i++)
  14. {
  15. for(int j=0;j<m;j++)
  16. {
  17. if(test[i][j]!=0) continue;
  18. y=i;x=j;
  19. test[i][j]=1;
  20. step=0;again=0;fen=0;
  21. for(;;)
  22. {
  23. way[step][0]=y;way[step][1]=x;
  24. step++;fen++;
  25. if(map[y][x]==1) x--;
  26. else if(map[y][x]==2) x++;
  27. else if(map[y][x]==3) y--;
  28. else if(map[y][x]==4) y++;
  29. if(x<0||x>=m||y<0||y>=n) break;
  30. if(test[y][x]==1&&score[y][x]!=0) {fen+=score[y][x];break;}
  31. if(test[y][x]==1&&score[y][x]==0) {cir[0]=y;cir[1]=x;again=1;break;}
  32. }
  33. if(fen>max_score) max_score=fen;
  34. for(int k=0;k<step;k++) score[way[k][0]][way[k][1]]=fen-k;
  35. if(again==1)
  36. {
  37. y=cir[0];x=cir[1];
  38. for(;;)
  39. {
  40. if(map[y][x]==1) x--;
  41. else if(map[y][x]==2) x++;
  42. else if(map[y][x]==3) y--;
  43. else if(map[y][x]==4) y++;
  44. if(y==cir[0]&&x==cir[1]) break;
  45. score[y][x]=score[cir[0]][cir[1]];
  46. }
  47. }
  48. }
  49. }
  50. for(int i=0;i<m;i++)
  51. {
  52. for(int j=0;j<n;j++)
  53. {
  54. if(score[j][i]==max_score) cout<<i<<" "<<j<<endl;
  55. }
  56. }
  57. return 0;
  58. }
Success #stdin #stdout 0.01s 7552KB
stdin
4 4
2 2 2 4
4 1 1 4
2 4 2 2
2 4 2 2
stdout
0 0
2 1