Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
57495 | xujindong | J4 | C++ | 运行超时 | 0 | 1000 MS | 18944 KB | 1979 | 2022-10-04 11:29:48 |
#include<bits/stdc++.h> using namespace std; int n,m; long long v[1005][1005],ans[1005][1005],step[1005][1005]; bool vis[1005][1005][2],st[1005][1005],f; string dis[1005]; unsigned long long qpow(unsigned long long a,unsigned long long b,unsigned long long ans=1){ for(;b;b>>=1)(b&1)&&(ans*=a),a*=a; return ans; } void solve(int x,int y,long long c=0){ memset(vis,0,sizeof(vis)),memset(st,0,sizeof(st)),memset(step,0,sizeof(step)),f=1; int nx=x,ny=y; while(1){ if(vis[nx][ny][f^st[nx][ny]]){ if(nx!=x||ny!=y){ int lx,ly; if(nx>1&&dis[nx-1][ny]=='v')lx=nx-1,ly=ny; if(nx<n&&dis[nx+1][ny]=='^')lx=nx+1,ly=ny; if(ny>1&&dis[nx][ny-1]=='>')lx=nx,ly=ny-1; if(ny<m&&dis[nx][ny+1]=='<')lx=nx,ly=ny+1; if(c-step[x][y]>0)ans[x][y]=1000000000000000; return; } else{ if(c>0)ans[x][y]=1000000000000000; return; } } if(f^st[nx][ny])c+=v[nx][ny],vis[nx][ny][1]=1; else c-=v[nx][ny],vis[nx][ny][0]=1; ans[x][y]=max(ans[x][y],c),st[nx][ny]=!st[nx][ny],f=!f,step[nx][ny]=c; if(dis[nx][ny]=='^'){ if(nx>1)nx--; else break; } else if(dis[nx][ny]=='v'){ if(nx<n)nx++; else break; } else if(dis[nx][ny]=='<'){ if(ny>1)ny--; else break; } else if(dis[nx][ny]=='>'){ if(ny<m)ny++; else break; } } } unsigned long long cal(){ unsigned long long r=0; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)r+=((unsigned long long)(ans[i][j]+1000000000000000)*qpow(2000000000000021,(i-1)*m+j-1)); return r; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>dis[i],dis[i]='$'+dis[i]; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>v[i][j]; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ solve(i,j); } } for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cout<<ans[i][j]<<(j==m?'\n':' '); return cout<<cal()<<'\n',0; }