// #include #include #include #include #include #include #include #include #include #include #include #define lli long long #define mp make_pair using namespace std; struct Party { int x,y,Begin, End; }; string Answer; pair P1; queue< pair > q; vector< pair >Cake; char dp1[202][202]; int a[220][220],dp[201][201],n,p,m,r,Fx,Fy; bool b[220][220],used[201][201]; Party P[200000]; bool Cmp(Party A, Party B) { if(A.x==B.x && A.y==B.y)return A.BeginB.End-B.Begin; else return A.Begin>B.Begin; } int FindMin(int X,int Y,int X1,int Y1) { memset(dp,0,sizeof(dp)); memset(dp1,0,sizeof(dp1)); bool l=0; if(X>X1){swap(X,X1); swap(Y,Y1);l=1;} for(int i=X;i<=X1;i++) { for(int j=Y;j<=Y1;j++) { if(i==X && j==Y)continue; if(i!=X) { dp[i][j]=dp[i-1][j]+(abs(a[i][j]-a[i-1][j])*abs(a[i][j]-a[i-1][j])); //if(l)dp1[i][j]='U'; dp1[i][j]='U'; } else dp[i][j]=INT_MAX; if(j!=Y && dp[i][j]>dp[i][j-1]+abs(a[i][j]-a[i][j-1])*abs(a[i][j]-a[i][j-1])) { dp[i][j]=dp[i][j-1]+abs(a[i][j]-a[i][j-1])*abs(a[i][j]-a[i][j-1]); //if(l)dp1[i][j]='L'; dp1[i][j]='L'; } dp[i][j]++; } for(int j=Y;j>=Y1;j--) { if(i!=X) { dp[i][j]=dp[i-1][j]+abs(a[i][j]-a[i-1][j])*abs(a[i][j]-a[i-1][j]); //if(l)dp1[i][j]='U'; dp1[i][j]='U'; } else dp[i][j]=INT_MAX; if(j!=Y && dp[i][j]>dp[i][j+1]+abs(a[i][j]-a[i][j+1])*abs(a[i][j]-a[i][j+1])) { dp[i][j]=dp[i][j+1]+abs(a[i][j]-a[i][j+1])*abs(a[i][j]-a[i][j+1]); dp1[i][j]='R'; //if(l)dp1[i][j]='R'; } dp[i][j]++; } } return dp[X1][Y1]; } string Ans; int PrintIt(int X,int Y,int X1,int Y1) { Ans.clear(); bool l=0; if(X>X1){swap(X,X1); swap(Y,Y1);l=1;} int k=X1,k1=Y1; while(k!=X || k1!=Y) { //cout<P[t1].End)continue; T=P[t1].End; T1=FindMin(X,Y,P[t1].x,P[t1].y); if(T1+TimeNow>T)continue; L=T1+TimeNow; if(T1+TimeNow>n>>p>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } cin>>Fx>>Fy; for(int i=1;i<=p;i++) { cin>>P[i].x>>P[i].y>>P[i].Begin>>P[i].End; P[i].End+=P[i].Begin; } for(int i=1;i<=m;i++) { cin>>Help>>Help1; b[Help][Help1]=1; Cake.push_back(mp(Help,Help1)); } sort(P+1,P+p+1,Cmp); solve(); cout<