Submission #1057305

#TimeUsernameProblemLanguageResultExecution timeMemory
1057305NickpapadakGame (eJOI20_game)C++14
20 / 100
1 ms600 KiB
#include<bits/stdc++.h> using namespace std; #define X first #define Y second const unsigned int MAXN = (int)2e+1 + 5; const unsigned int MAXMN = 410; int grid[MAXN][MAXN]; int N, M; int cnt; int p[MAXMN]; int sz[MAXMN]; int CI(int x, int y) {return (y-1)*M + x;} pair<int,int> IC(int id) {return {(id-1)%M +1, ((id-1)/M)+1};} int findp(int u){ if(p[u] == u) return u; return p[u] = findp(p[u]); } int looping = 0; void Union(int u, int v){ if(findp(v) == findp(u)) {looping = 1;return;} if(sz[findp(v)] > sz[findp(u)]) swap(u,v); sz[findp(u)] += sz[findp(v)]; // int x = findp(u), y = findp(v); // printf("%d\n", findp(v)); // p[2]= 1; p[findp(v)] = findp(u); } void Join(int x, int y, int dx, int dy){ // printf("\n\n%d %d\n\n", x, y); if(x < 1 || x > M || y < 0 || y > N) return; if(dx < 1 || dx > M || dy < 0 || dy > N) return; Union(CI(x,y), CI(dx,dy)); } int main(){ scanf("%d%d", &N, &M); for(int i = 1; i<= N*M; ++i){ p[i] = i; sz[i] = 1; } char ps[M]; scanf("%s", ps); for(int i = 1; i<=N; ++i){ char s[M]; scanf("%s", s); for(int j = 1; j <=M;++j){ grid[i][j] = (ps[j-1]-'0') + (s[j-1]-'0'); if(s[j-1]-'0' == 0) Join(j, i, j, i+1); } for(int j = 0; j<M;++j){ ps[j] = s[j]; } } for(int i = 1; i<=N; ++i){ char s[M+1]; scanf("%s", s); for(int j = 1; j<=M; ++j){ grid[i][j] += (s[j] -'0') + (s[j-1] - '0'); if(s[j-1] == '0') Join(j, i, j-1, i); if(grid[i][j] == 4) cnt++; } } int f = 0, s = 0; bool onlytwo = true; for(int i = 1; i<=M*N;++i){ if(grid[IC(i).Y][IC(i).X] == 4) continue; if(f==0)f = findp(i); else if(s==0 && f != findp(i)) s= findp(i); else if(findp(i) != s && findp(i) != f) onlytwo = false; } if(onlytwo && s == 0){ printf("%d", -sz[f]); } else if(onlytwo){ if(sz[findp(f)] > 1 && sz[findp(s)] > 1) printf("%d", 2 - (sz[findp(f)]+sz[findp(s)]-2) +4*looping); else if(sz[findp(f)] ==1 && sz[findp(s)] > 1) printf("%d", (sz[findp(s)]) - 1); else if(sz[findp(s)] ==1 && sz[findp(f)] > 1) printf("%d", (sz[findp(f)]) - 1); else printf("0"); } else // for(int i = 1; i<=N;++i){ // for(int j = 1; j <=M;++j){ // printf("%d ", grid[i][j]); // } // printf("\n"); // } return 0; }

Compilation message (stderr)

game.cpp: In function 'int main()':
game.cpp:39:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |     scanf("%d%d", &N, &M);
      |     ~~~~~^~~~~~~~~~~~~~~~
game.cpp:45:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |     scanf("%s", ps);
      |     ~~~~~^~~~~~~~~~
game.cpp:48:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |         scanf("%s", s);
      |         ~~~~~^~~~~~~~~
game.cpp:60:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   60 |         scanf("%s", s);
      |         ~~~~~^~~~~~~~~
#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...