Submission #1233744

#TimeUsernameProblemLanguageResultExecution timeMemory
1233744santi3223Soccer Stadium (IOI23_soccer)C++20
14 / 100
192 ms31768 KiB
#include <bits/stdc++.h>
#include "soccer.h"
using namespace std;
#define ll long long
#define vb vector<bool>
#define pb push_back
#define ff(aa, bb, cc) for(ll aa = bb; aa < cc; aa++)
#define vl vector<ll>
#define pll pair<ll, ll>
#define fi first
#define se second
#define ed "\n"
#define all(aaa) aaa.begin(), aaa.end()
#define rall(aaa) aaa.rbegin(), aaa.rend()
ll MOD = 1e9+7;
ll x = 0;
set<vl> st;

vl resp = {9, 8, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 5, 5, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 3, 3, 3, 3, 3, 3, 6, 6, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 3, 3, 4, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 5, 4, 3, 1, 1, 1, 3, 2, 1, 1, 1, 0};
map<vl, ll> mp;

void todos(ll curid, ll n, vl& cur){
	if(curid == n){
		ll sz = st.size();
		st.insert(cur);
		if(st.size() == sz){
			return;
		}
		//cout << x+1 << ed;
		/*ff(i, 1, n+1){
			cout << cur[i-1] << " ";
			if(i % 3 == 0){
				cout << ed;
			}
		}*/
		//cout << "===================" << ed;
		vl ncur(n);
		vl rf(n);
		
		ncur = cur;
		st.insert(ncur);
		
		rf[0] = ncur[2];
		rf[1] = ncur[1];
		rf[2] = ncur[0];
		rf[3] = ncur[5];
		rf[4] = ncur[4];
		rf[5] = ncur[3];
		rf[6] = ncur[8];
		rf[7] = ncur[7];
		rf[8] = ncur[6];	
		st.insert(rf);
		mp[ncur] = resp[x];
		mp[rf] = resp[x];
		
		/*cout << ncur[0] << " " << ncur[1] << " " << ncur[2] << "    " << rf[0] << " " << rf[1] << " " << rf[2] << ed;
		cout << ncur[3] << " " << ncur[4] << " " << ncur[5] << "    " << rf[3] << " " << rf[4] << " " << rf[5] << ed;
		cout << ncur[6] << " " << ncur[7] << " " << ncur[8] << "    " << rf[6] << " " << rf[7] << " " << rf[8] << ed;
		cout << ed;*/
		
		ncur[0] = cur[6];
		ncur[1] = cur[3];
		ncur[2] = cur[0];
		ncur[3] = cur[7];
		ncur[4] = cur[4];
		ncur[5] = cur[1];
		ncur[6] = cur[8];
		ncur[7] = cur[5];
		ncur[8] = cur[2];
		st.insert(ncur);
		
		rf[0] = ncur[2];
		rf[1] = ncur[1];
		rf[2] = ncur[0];
		rf[3] = ncur[5];
		rf[4] = ncur[4];
		rf[5] = ncur[3];
		rf[6] = ncur[8];
		rf[7] = ncur[7];
		rf[8] = ncur[6];	
		st.insert(rf);
		mp[ncur] = resp[x];
		mp[rf] = resp[x];
		
		/*cout << ncur[0] << " " << ncur[1] << " " << ncur[2] << "    " << rf[0] << " " << rf[1] << " " << rf[2] << ed;
		cout << ncur[3] << " " << ncur[4] << " " << ncur[5] << "    " << rf[3] << " " << rf[4] << " " << rf[5] << ed;
		cout << ncur[6] << " " << ncur[7] << " " << ncur[8] << "    " << rf[6] << " " << rf[7] << " " << rf[8] << ed;
		cout << ed;*/
		
		ncur[0] = cur[8];
		ncur[1] = cur[7];
		ncur[2] = cur[6];
		ncur[3] = cur[5];
		ncur[4] = cur[4];
		ncur[5] = cur[3];
		ncur[6] = cur[2];
		ncur[7] = cur[1];
		ncur[8] = cur[0];
		st.insert(ncur);
		
		rf[0] = ncur[2];
		rf[1] = ncur[1];
		rf[2] = ncur[0];
		rf[3] = ncur[5];
		rf[4] = ncur[4];
		rf[5] = ncur[3];
		rf[6] = ncur[8];
		rf[7] = ncur[7];
		rf[8] = ncur[6];	
		st.insert(rf);
		mp[ncur] = resp[x];
		mp[rf] = resp[x];
		
		/*cout << ncur[0] << " " << ncur[1] << " " << ncur[2] << "    " << rf[0] << " " << rf[1] << " " << rf[2] << ed;
		cout << ncur[3] << " " << ncur[4] << " " << ncur[5] << "    " << rf[3] << " " << rf[4] << " " << rf[5] << ed;
		cout << ncur[6] << " " << ncur[7] << " " << ncur[8] << "    " << rf[6] << " " << rf[7] << " " << rf[8] << ed;
		cout << ed;*/
		
		ncur[0] = cur[2];
		ncur[1] = cur[5];
		ncur[2] = cur[8];
		ncur[3] = cur[1];
		ncur[4] = cur[4];
		ncur[5] = cur[7];
		ncur[6] = cur[0];
		ncur[7] = cur[3];
		ncur[8] = cur[6];
		st.insert(ncur);
		
		rf[0] = ncur[2];
		rf[1] = ncur[1];
		rf[2] = ncur[0];
		rf[3] = ncur[5];
		rf[4] = ncur[4];
		rf[5] = ncur[3];
		rf[6] = ncur[8];
		rf[7] = ncur[7];
		rf[8] = ncur[6];	
		st.insert(rf);
		mp[ncur] = resp[x];
		mp[rf] = resp[x];
		
		/*cout << ncur[0] << " " << ncur[1] << " " << ncur[2] << "    " << rf[0] << " " << rf[1] << " " << rf[2] << ed;
		cout << ncur[3] << " " << ncur[4] << " " << ncur[5] << "    " << rf[3] << " " << rf[4] << " " << rf[5] << ed;
		cout << ncur[6] << " " << ncur[7] << " " << ncur[8] << "    " << rf[6] << " " << rf[7] << " " << rf[8] << ed;
		cout << ed;
		
		cout << "=====================" << ed;*/
		//cout << ed << ed;
		x++;
		return;
	}
	vl ac = cur;
	todos(curid+1, n, ac); 
	ac[curid] = 1;
	todos(curid+1, n, ac);
}

int biggest_stadium(int n, std::vector<std::vector<int>> F){
	ll q = 0, xx = 0, y = 0;
	ff(i, 0, n){
		ff(j, 0, n){
			if(F[i][j] == 1){
				q++;
				y = i;
				xx = j;
			}
		}
	}
	if(q == 1){
		//cout << (xx+1)*(y+1) << ed;
		ll minn = (xx+1)*(y+1);
		//cout << (xx+1)*(n-y) << ed;
		minn = min(minn, (xx+1)*(n-y));
		//cout << (n-xx)*(y+1) << ed;
		minn = min(minn, (n-xx)*(y+1));
		//cout << (n-xx)*(n-y) << ed;
		minn = min(minn, (n-xx)*(n-y));
		return (n*n)-minn;
	}
	if(n == 3){
		vl trash(9, 0);
		todos(0, 9, trash);
		vl xxx;
		ff(i, 0, n){
			ff(j, 0, n){
				xxx.pb(F[i][j]);
			}
		}
		return mp[xxx];
	}
	return n*n;
}
/*
void other(){
	cout << "{";
	vl nw;
	ff(i, 0, 102){
		ll xx;
		cin >> xx;
		nw.pb(xx);
		cout << xx << ", ";
	}
	cout << "}" << ed << nw.size();
}*/
 /*
int main(){
	vl cur(9, 0);
	todos(0, 9, cur);
	other();
}*/
/*
int main(){
	ll t;
	cin >> t;
	while(t--){
    int N;
    cin >> N;
    std::vector<std::vector<int>> F(N, std::vector<int>(N));
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
           cin >> F[i][j];
        }
    }

    int res = biggest_stadium(N, F);
	cout << res << ed;
}
    return 0;
}

*/
#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...