Submission #580285

#TimeUsernameProblemLanguageResultExecution timeMemory
580285Cross_RatioMars (APIO22_mars)C++17
44 / 100
457 ms3432 KiB
#include "mars.h" #include <bits/stdc++.h> using namespace std; string sor(string s1, string s2) { string s3; s3.resize(100); for(int i = 0; i < 100; i ++) { if(s1[i]=='1'||s2[i]=='1') s3[i] = '1'; else s3[i] = '0'; } return s3; } string shift(string s, int k) { string s2; s2.resize(100); for(int i = 0; i+k<100;i++) { s2[i+k] = s[i]; } for(int i = 0; i < k; i++) s2[i] = '0'; return s2; } int A[50][50][50]; string process(vector<vector<string>> A, int a, int b, int k, int N) { int i, j; if(N<=4) { if(k==0) { for(i=0;i<3;i++) { for(j=0;j<3;j++) { A[i][j] = shift(A[i][j],(2*N+1)*(i+a)+(j+b)); //for(int m = 0; m < 9; m++) cout << A[i][j][m]; //cout << '\n'; } } } string s3; s3.resize(100); for(int i = 0; i < 100; i++) s3[i] = '0'; for(i=0;i<3;i++) { for(j=0;j<3;j++) s3 = sor(s3,A[i][j]); } /*cout <<a << ' ' << b << '\n'; for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) cout << s3[(2*N+1)*i+j] << ' '; cout << '\n'; }*/ if(k!=N-1) return s3; int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; vector<vector<bool>> vis; vis.resize(2*N+1); for(i=0;i<2*N+1;i++) vis[i].resize(2*N+1); for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) vis[i][j] = false; } int ans = 0; for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) { if(vis[i][j]) continue; if(s3[(2*N+1)*i+j]=='1') { ans++; queue<int> Q; Q.push((2*N+1)*i+j); while(!Q.empty()) { int c = Q.front(); Q.pop(); if(vis[c/(2*N+1)][c%(2*N+1)]) continue; vis[c/(2*N+1)][c%(2*N+1)] = true; for(int m = 0; m < 4; m++) { int x = c/(2*N+1)+dx[m]; int y = c%(2*N+1)+dy[m]; if(0<=x&&x<2*N+1&&0<=y&&y<2*N+1) { if(!vis[x][y]&&s3[(2*N+1)*x+y]=='1') { Q.push((2*N+1)*x+y); } } } } } } } string ans_string; ans_string.resize(100); for(i=0;i<100;i++) ans_string[i] = '0'; int id = 0; while(ans) { ans_string[id] = (char)('0'+ans%2); ans /= 2; id++; } return ans_string; } else { if(k==N-1) { int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; string s3; s3.resize((2*N+1)*(2*N+1)); for(i=0;i<3;i++) { for(j=0;j<3;j++) { for(int m = 0; m < 81; m++) { s3[(2*N+1)*((N-4)*i+m/9)+((N-4)*j+m%9)] = A[i][j][m]; } } } /*for(i=0;i<3;i++) { for(j=0;j<3;j++) { for(int m = 0; m < 9; m++) { for(int m2 = 0; m2 < 9; m2++) cout << A[i][j][9*m+m2] << ' '; cout << '\n'; } cout << "\n\n\n"; } }*/ /*cout << N << '\n'; for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) cout << s3[(2*N+1)*i+j] << ' '; cout << '\n'; }*/ vector<vector<bool>> vis; vis.resize(2*N+1); for(i=0;i<2*N+1;i++) vis[i].resize(2*N+1); for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) vis[i][j] = false; } int ans = 0; for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) { if(vis[i][j]) continue; if(s3[(2*N+1)*i+j]=='1') { ans++; queue<int> Q; Q.push((2*N+1)*i+j); while(!Q.empty()) { int c = Q.front(); Q.pop(); if(vis[c/(2*N+1)][c%(2*N+1)]) continue; vis[c/(2*N+1)][c%(2*N+1)] = true; for(int m = 0; m < 4; m++) { int x = c/(2*N+1)+dx[m]; int y = c%(2*N+1)+dy[m]; if(0<=x&&x<2*N+1&&0<=y&&y<2*N+1) { if(!vis[x][y]&&s3[(2*N+1)*x+y]=='1') { Q.push((2*N+1)*x+y); } } } } } } } string ans_string; ans_string.resize(100); for(i=0;i<100;i++) ans_string[i] = '0'; int id = 0; while(ans) { ans_string[id] = (char)('0'+ans%2); ans /= 2; id++; } return ans_string; } if(k < 4) { string s3; s3.resize(100); for(int i = 0; i < 100; i++) s3[i] = '0'; for(i=0;i<3;i++) { for(j=0;j<3;j++) { for(int m = 0; m < (2*k+1)*(2*k+1);m++) { s3[(2*k+3)*(i+m/(2*k+1))+j+m%(2*k+1)] = A[i][j][m]; } } } /*cout << a << ' ' << b << ' ' << k << '\n'; for(i=0;i<(2*k+3)*(2*k+3);i++) { cout << s3[i] << ' '; if(i%(2*k+3)==2*k+2) cout << '\n'; } cout << '\n';*/ return s3; } else { return A[a/(N-k-1)][b/(N-k-1)]; } /*cout <<a << ' ' << b << '\n'; for(i=0;i<2*N+1;i++) { for(j=0;j<2*N+1;j++) cout << s3[(2*N+1)*i+j] << ' '; cout << '\n'; }*/ } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...