Submission #498538

#TimeUsernameProblemLanguageResultExecution timeMemory
498538uncriptedT-Covering (eJOI19_covering)C++11
0 / 100
37 ms26964 KiB
#include<bits/stdc++.h> #define f first #define se second #define pb push_back using namespace std; int size=0; set<pair<int, pair<int,int> > > t; int nsize=0; int n,m; int fix[10000][10000]; vector<int> adj[1002*1002]; int a[10000][10000]; void dfs(int p){ int x=p/n,y=p%n; fix[x][y]=1; nsize++; if(fix[x-1][y]!=1){ size++; } if(fix[x+1][y]!=1){ size++; } if(fix[x][y-1]!=1){ size++; } if(fix[x][y+1]!=1){ size++; } t.insert({a[x+1][y],{x+1,y}}); t.insert({a[x][y-1],{x,y-1}}); t.insert({a[x][y+1],{x,y+1}}); t.insert({a[x-1][y], {x-1,y}}); fix[x-1][y]=1; fix[x+1][y]=1; fix[x][y-1]=1; fix[x][y+1]=1; for(int i=0; i<adj[p].size(); i++){ if(fix[adj[p][i]/n][adj[p][i]%n]==1){ continue; } dfs(adj[p][i]); } } int main(){ cin>>n>>m; int r[n][m]; for(int i=0; i<n; i++){ for (int j=0; j<m; j++){ cin>>a[i][j]; r[i][j]=0; fix[i][j]=0; } } int k; cin>>k; pair<int,int> c[k]; for(int i=0; i<k; i++){ cin>>c[i].f>>c[i].se; r[c[i].f][c[i].se]=1; } int pas=0; pair<int,int> d[8]={{1,1}, {1,0}, {1,-1}, {0,1}, {0, -1}, {-1,1}, {-1, 0}, {-1,-1}}; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ int p=0; for(int ii=0; ii<8; ii++){ int x=i+d[ii].f; int y=j+d[ii].se; if(r[i][j]==1 && r[x][y]==1){ p++; if(i+1>=n || i-1<0 || j-1<0 || j+1>=m || x+1>=n || x-1<0 || y-1<0 || y+1>=m){ cout<<"No"<<endl; return 0; } fix[i][j]=1; fix[i+1][j]=1; fix [i-1][j]=1; fix[i][j-1]=1; fix[i][j+1]=1; fix[x][y]=1; fix[x+1][y]=1; fix[x-1][y]=1; fix[x][y-1]=1; fix[x][y+1]=1; } } if(p>1){ cout<<"No"<<endl; return 0; } } } for(int asd=0; asd<k; asd++){ for(int i=0; i<k; i++){ int x=c[i].f,y=c[i].se; if(fix[x][y]==1){ continue; } int bruh=4; bool left=true,right=true,up=true,down=true; if(x+1>=n){ bruh--; up=false; }else if(fix[x+1][y]==1 || r[x+1][y]==1){ bruh--; up=false; } if(x-1<0){ bruh--; down=false; }else if(fix[x-1][y]==1 || r[x-1][y]==1){ bruh--; down=false; } if(y-1<0){ bruh--; left=false; }else if(fix[x][y-1]==1 || r[x][y-1]==1){ bruh--; left=false; } if( y+1>=m){ bruh--; right=false; }else if(fix[x][y+1]==1 || r[x][y+1]==1){ bruh--; right=false; } if(bruh==3){ fix[x][y]=1; if(up==true){ fix[x+1][y]=1; } if(down==true){ fix[x-1][y]=1; } if(left==true){ fix[x][y-1]=1; } if(right==true){ fix[x][y+1]=1; } } if(bruh<3){ cout<<"No"; return 0; } if(bruh==4){ r[x][y]=2; } } } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ if(r[i][j]!=2){ continue; } if(i+2<n){ if(r[i+2][j]==2){ adj[i*n+j].pb((i+2)*n+j); } } if(i-2>=0){ if(r[i-2][j]==2){ adj[i*n+j].pb((i-2)*n+j); } } if(j+2<m){ if(r[i][j+2]==2){ adj[i*n+j].pb((i)*n+j+2); } } if(j-2>=0){ if(r[i][j-2]==2){ adj[i*n+j].pb((i)*n+j-2); } } } } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ if(fix[i][j]==0 && r[i][j]==2 ){ dfs({i*n+j}); if(size==3*nsize+1 && t.size()>0){ pair<int,pair<int,int> > d=*t.begin(); fix[d.se.f][d.se.se]=0; } if(size<3*nsize){ cout<<"No"<<endl; return 0; } t.clear(); nsize=0; size=0; } } } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ if(fix[i][j]==1 ){ pas+=a[i][j]; } } } cout<<pas; }

Compilation message (stderr)

covering.cpp: In function 'void dfs(int)':
covering.cpp:44:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |  for(int i=0; i<adj[p].size(); i++){
      |               ~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...