Submission #135603

#TimeUsernameProblemLanguageResultExecution timeMemory
135603KLPPVirus Experiment (JOI19_virus)C++14
6 / 100
2056 ms5948 KiB
#include<bits/stdc++.h> using namespace std; typedef long long int lld; #define rep(i,a,b) for(int i=a;i<b;i++) #define trav(a,v) for(auto a:v) int m,r,c; string s; int best[(1<<4)]; bool visited[1000][1000]; int u[1000][1000]; int dir(char c){ if(c=='N')return 0; if(c=='S')return 1; if(c=='E')return 2; if(c=='W')return 3; } int resp(int x, int y){ int msk=0; if(x>0 && visited[x-1][y]){ msk+=1; } if(x<r-1 && visited[x+1][y]){ msk+=2; } if(y<c-1 && visited[x][y+1]){ msk+=4; } if(y>0 && visited[x][y-1]){ msk+=8; } return msk; } void DFS(int x,int y){ //cout<<x<<" "<<y<<endl; visited[x][y]=true; if(x>0 && !visited[x-1][y]){ int msk=resp(x-1,y); if(best[msk]>=u[x-1][y] && u[x-1][y]!=0){ DFS(x-1,y); } } if(x<r-1 && !visited[x+1][y]){ int msk=resp(x+1,y); if(best[msk]>=u[x+1][y] && u[x+1][y]!=0){ DFS(x+1,y); } } if(y>0 && !visited[x][y-1]){ int msk=resp(x,y-1); if(best[msk]>=u[x][y-1] && u[x][y-1]!=0){ DFS(x,y-1); } } if(y<c-1 && !visited[x][y+1]){ int msk=resp(x,y+1); if(best[msk]>=u[x][y+1] && u[x][y+1]!=0){ DFS(x,y+1); } } } int main(){ cin>>m>>r>>c; cin>>s; while(s.size()<100000){ s=s+s; } //cout<<s<<endl; rep(i,0,4){ best[i]=0; } rep(msk,0,16){ int sz=0; best[msk]=0; rep(i,0,s.size()){ if(((1<<(dir(s[i])))&msk)>0){ sz++; }else sz=0; best[msk]=max(best[msk],sz); } } /*rep(i,0,16)cout<<best[i]<<" "; cout<<endl;*/ /*rep(i,0,10)cout<<chain[i]<<","<<s[i]<<" "; cout<<endl; rep(i,0,4)cout<<best[i]<<" "; cout<<endl;*/ int U[r*c]; rep(i,0,r){ rep(j,0,c){ cin>>u[i][j]; } } lld ans1,ans2; ans1=1000000000; ans2=0; rep(i,0,r){ rep(j,0,c){ rep(k,0,r){ rep(l,0,c){ visited[k][l]=false; } } if(u[i][j]>0){ DFS(i,j); lld can=0; rep(k,0,r){ rep(l,0,c){ can+=visited[k][l]; } } if(can<ans1){ ans1=can; ans2=0; } if(can==ans1)ans2++; //cout<<can<<" "<<i<<" "<<j<<endl; } } }//cout<<endl; cout<<ans1<<endl<<ans2<<endl; //DFS(2,0); return 0; }

Compilation message (stderr)

virus.cpp: In function 'int main()':
virus.cpp:5:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,a,b) for(int i=a;i<b;i++)
virus.cpp:77:9:
     rep(i,0,s.size()){
         ~~~~~~~~~~~~             
virus.cpp:77:5: note: in expansion of macro 'rep'
     rep(i,0,s.size()){
     ^~~
virus.cpp:90:7: warning: unused variable 'U' [-Wunused-variable]
   int U[r*c];
       ^
virus.cpp: In function 'int dir(char)':
virus.cpp:17:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...