提交时间:2021-05-18 17:10:29

运行 ID: 19626

#include <bits/stdc++.h> using namespace std; struct code { //一个响亮的名字! int num; int x,y; } m2[10005]; int m[105][105],sum[105][105]; //地图m,总和sum int n,n2,s; int ans; //答案ans void init() { for(int i=1; i<=n; i++) { for(int j=1; j<=n2; j++) { s=(s*345)%19997; m[i][j]=sum[i][j]=s%10+1; m2[(i-1)*n2+j]= {m[i][j],i,j}; //将信息保存入结构体code } } } int cmp(code a,code b) { return a.num<b.num; } int main() { cin>>n>>n2>>s; init(); sort(m2+1,m2+n*n2+1,cmp); //从小到大排序 for(int i=1; i<=n*n2; i++) { //从小到大搜索 int x=m2[i].x,y=m2[i].y; //读取m2[i]中存储的坐标 int maxn=0; if(m[x-1][y]<m[x][y])maxn=max(sum[x-1][y],maxn); if(m[x+1][y]<m[x][y])maxn=max(sum[x+1][y],maxn); if(m[x][y-1]<m[x][y])maxn=max(sum[x][y-1],maxn); if(m[x][y+1]<m[x][y])maxn=max(sum[x][y+1],maxn);//打擂台 sum[x][y]+=maxn; ans=max(sum[x][y],ans); } cout<<ans<<endl; }