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. test[y][x]=1;
  33. }
  34. if(fen>max_score) max_score=fen;
  35. for(int k=0;k<step;k++) score[way[k][0]][way[k][1]]=fen-k;
  36. if(again==1)
  37. {
  38. y=cir[0];x=cir[1];
  39. for(;;)
  40. {
  41. if(map[y][x]==1) x--;
  42. else if(map[y][x]==2) x++;
  43. else if(map[y][x]==3) y--;
  44. else if(map[y][x]==4) y++;
  45. if(y==cir[0]&&x==cir[1]) break;
  46. score[y][x]=score[cir[0]][cir[1]];
  47. }
  48. }
  49. }
  50. }
  51. for(int i=0;i<m;i++)
  52. {
  53. for(int j=0;j<n;j++)
  54. {
  55. if(score[j][i]==max_score) cout<<i<<" "<<j<<endl;
  56. }
  57. }
  58. return 0;
  59. }
Success #stdin #stdout 0.01s 7580KB
stdin
4 4
2 2 2 4
4 1 1 4
2 4 2 2
2 4 2 2
stdout
0 0
2 1