Submission #1348919

#TimeUsernameProblemLanguageResultExecution timeMemory
1348919thelegendary08Mars (APIO22_mars)C++17
36 / 100
138 ms4288 KiB
#include "mars.h"
#include<bits/stdc++.h>
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define vi vector<int>
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
using namespace std; 
vi dx = {0,0,1,-1}, dy = {1,-1,0,0}; 
std::string process(std::vector <std::vector<std::string>> a, int x, int y, int h, int m)
{
	int n = 2 * m + 1; 
	if(h == m-1){
		vector<vector<vi>>c(n, vector<vi>(n)), b(n, vector<vi>(n));
		f0r(i,n)f0r(j,n)c[i][j].pb(i*n+j); 
		for(int i = n-2; i >= 3; i-=2){
			f0r(j,i)f0r(k,i){
				for(auto u : c[j+2][k+2])b[j][k].pb(u);
			}
			f0r(j,i){
				for(auto u : c[0][j])b[0][j].pb(u); for(auto u : c[1][j])b[1][j].pb(u);
			}
			FOR(j,2,i){
				for(auto u : c[j][0])b[j][0].pb(u); for(auto u : c[j][1])b[j][1].pb(u); 
			}
			FOR(j,i-2,i)f0r(k,2){
				for(auto u : c[j+2][k])b[j][k].pb(u); for(auto u : c[k][j+2])b[k][j].pb(u);
			}
			c = b; f0r(j,n)f0r(k,n)b[j][k].clear(); 
		}
		// f0r(i,n)f0r(j,n){
			// vout(c[i][j]); 
		// }
		vi ans(n*n); f0r(i,3)f0r(j,3){
			f0r(k,c[i][j].size())ans[c[i][j][k]] = a[i][j][k] - '0'; 
		}
		vector<vi> grid(n, vi(n)); int ptr = 0; f0r(i,n)f0r(j,n)grid[i][j] = ans[ptr], ptr++; 
		vector<vector<bool>>vis(n, vector<bool>(n)); int cc = 0; f0r(i,n)f0r(j,n)if(!vis[i][j] && grid[i][j] == 1){
			cc++; vis[i][j] = 1; queue<pii>q; q.push(mp(i,j)); while(!q.empty()){
				auto [c, d] = q.front(); q.pop(); f0r(t,4){
					int c_ = c + dx[t], d_ = d + dy[t]; if(c_ >= 0 && c_ < n && d_ >= 0 && d_ < n && !vis[c_][d_] && grid[c_][d_] == 1){
						vis[c_][d_] = 1, q.push(mp(c_,d_));
					}
				}
			}
		}
		string as(100, '0'); f0r(i,20)if((cc>>i)&1)as[i] = '1'; else as[i] = '0'; return as;
	}
	vector<vi>v(n,vi(n)),w(n,vi(n)); 
	f0r(i,n)f0r(j,n)v[i][j]=1; int phase = 0;
	string nums; 
	for(int i = n-2; i >= 3; i-=2){
		f0r(j,i)f0r(k,i){
			w[j][k] = v[j+2][k+2];
			if(x==j&&y==k&&phase==h){
				f0r(l, v[j+2][k+2])nums += a[2][2][l]; 
			}
		} 
		f0r(j,i){
			w[0][j] += v[0][j]; if(x==0&&y==j&&phase==h)f0r(l, v[0][j])nums += a[0][0][l]; 
			w[1][j] += v[1][j]; if(x==1&&y==j&&phase==h)f0r(l, v[1][j])nums += a[0][0][l]; 
		}
		FOR(j,2,i){
			w[j][0] += v[j][0]; if(x==j&&y==0&&phase==h)f0r(l, v[j][0])nums += a[0][0][l]; 
			w[j][1] += v[j][1]; if(x==j&&y==1&&phase==h)f0r(l, v[j][1])nums += a[0][0][l]; 
			
		}
		FOR(j,i-2,i)f0r(k,2){
			w[j][k] += v[j+2][k]; if(x==j&&y==k&&phase==h)f0r(l, v[j+2][k])nums += a[2][0][l]; 
			w[k][j] += v[k][j+2]; if(x==k&&y==j&&phase==h)f0r(l, v[k][j+2])nums += a[0][2][l]; 
		}
		v = w; f0r(j,n)f0r(k,n)w[j][k]=0; 
		// f0r(k,i){f0r(j,i)cout<<v[k][j]<<' '; cout<<'\n';} cout<<'\n';
		phase++;
	}
	while(nums.size() < 100)nums += '0'; 
	return nums;
}
#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...