Submission #1365529

#TimeUsernameProblemLanguageResultExecution timeMemory
1365529weedywelonMonster-Go (EGOI25_monstergo)C++20
62 / 100
0 ms344 KiB
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <deque>
#include <map>
#include <chrono>
#include <random>
#include <bitset>
#include <tuple>
#define SZ(x) int(x.size())
#define FR(i,a,b) for(int i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
#define mp(a,b) make_pair(a,b)
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef unsigned __int128 U128;
typedef __int128 I128;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
using namespace std;

vector<vector<LL> > chunk;
vector<vector<LL> > chunk2;
vector<vector<LL> > chunk3;
vector<vector<LL> > ans;
signed main(){
	FAST;
	LL n; cin>>n;
	
	if (n<=4){
		FOR(i,n){
			FOR(j,12) cout<<i*12+j<<" ";
			cout<<"\n";
		}
		return 0;
	}
	
	if (n==28 || n==21 || n==15 || n==10 || n==6 || n==7 || n==8 || n==11 || n==16 || n==5){
		LL k=0;
		if (n==28) k=8;
		else if (n==21) k=7;
		else if (n==15 || n==16) k=6;
		else if (n==10 || n==11) k=5;
		else if (n==6 || n==7 || n==8) k=4;
		else if (n==5) k=3;
		
		vector<LL> cur;
		FOR(i,50){
			cur.push_back(i);
			if (SZ(cur)==6){
				chunk.push_back(cur);
				cur.clear();
			}
		}
		
		 FOR(i,k) FR(j,i+1,k){
			 vector<LL> tmp;
			 for (LL x:chunk[i]) tmp.push_back(x);
			 for (LL x:chunk[j]) tmp.push_back(x);
			 ans.push_back(tmp);
		 }
		 
		 if (n==7 || n==8 || n==11 || n==16 || n==5){
			 vector<LL> tmp;
			 for (int i=49; i>=38; i--) tmp.push_back(i);
			 ans.push_back(tmp);
		 }
		 
		 if (n==8 || n==5){
			  vector<LL> tmp;
			  for (int i=37; i>=26; i--) tmp.push_back(i);
			  ans.push_back(tmp);
		 }
		 
		 //cout<<SZ(ans);
		 FOR(i,n){
			 FOR(j,12) cout<<ans[i][j]<<" ";
			 cout<<"\n";
		 }
		 return 0;
	}
	
	else if (n==9 || n==13 || n==12){
		LL k1=0, k2=0;
		if (n==9){
			k1=4;
			k2=3;
		}
		else if (n==13){
			k1=5;
			k2=3;
		}
		else if (n==12){
			k1=4;
			k2=4;
		}
		
		vector<LL> cur;
		FOR(i,50){
			cur.push_back(i);
			if (SZ(cur)==6){
				chunk.push_back(cur);
				cur.clear();
			}
		}
		
		FOR(i,k1) FR(j,i+1,k1){
			 vector<LL> tmp;
			 for (LL x:chunk[i]) tmp.push_back(x);
			 for (LL x:chunk[j]) tmp.push_back(x);
			 ans.push_back(tmp);
		 }
		 
		 FR(i,k1,k1+k2) FR(j,i+1,k1+k2){
			 vector<LL> tmp;
			 for (LL x:chunk[i]) tmp.push_back(x);
			 for (LL x:chunk[j]) tmp.push_back(x);
			 ans.push_back(tmp);
		 }
		 
		 //cout<<SZ(ans)<<"\n";
		 FOR(i,n){
			 FOR(j,12) cout<<ans[i][j]<<" ";
			 cout<<"\n";
		 }
		 return 0;		
	}
	
	else if (n==20 || n==35 || n==36 || n==23 || n==38){
		LL k=0;
		if (n==20 || n==23) k=6;
		else if (n==35 || n==36 || n==38) k=7;
		
		vector<LL> cur;
		FOR(i,50){
			cur.push_back(i);
			if (SZ(cur)==4){
				chunk.push_back(cur);
				cur.clear();
			}
		}
		
		 FOR(i,k) FR(j,i+1,k) FR(h,j+1,k) {
			 vector<LL> tmp;
			 for (LL x:chunk[i]) tmp.push_back(x);
			 for (LL x:chunk[j]) tmp.push_back(x);
			 for (LL x:chunk[h]) tmp.push_back(x);
			 ans.push_back(tmp);
		 }
		 
		 if (n==36){
			 vector<LL> tmp;
			 for (int i=49; i>=38; i--) tmp.push_back(i);
			 ans.push_back(tmp);
		 }
		 
		 if (n==23 || n==38){
			vector<LL> cur;
			FOR(i,50){
				cur.push_back(i);
				if (SZ(cur)==6){
					chunk2.push_back(cur);
					cur.clear();
				}
			}
			
			FR(i,5,8) FR(j,i+1,8){
				vector<LL> tmp;
				for (LL x:chunk2[i]) tmp.push_back(x);
				for (LL x:chunk2[j]) tmp.push_back(x);
				ans.push_back(tmp);
			}
		 }
		 
		 //cout<<SZ(ans);
		 FOR(i,n){
			 FOR(j,12) cout<<ans[i][j]<<" ";
			 cout<<"\n";
		 }
		 return 0;
	}
	
	else if (n==37 || n==41 || n==25){
		LL k=0;
		if (n==25) k=6;
		if (n==37 || n==45 || n==41) k=7;
		
		vector<LL> cur;
		FOR(i,50){
			cur.push_back(i);
			if (SZ(cur)==3){
				chunk3.push_back(cur);
				cur.clear();
			}
		}
		
		FOR(i,k) FR(j,i+1,k) FR(h,j+1,k) FR(z,h+1,k) {
			vector<LL> tmp;
			for (LL x:chunk3[i]) tmp.push_back(x);
			for (LL x:chunk3[j]) tmp.push_back(x);
			for (LL x:chunk3[h]) tmp.push_back(x);
			for (LL x:chunk3[z]) tmp.push_back(x);
			ans.push_back(tmp);
		}
		
		if (n==37){
			vector<LL> tmp;
			for (int i=49; i>=38; i--) tmp.push_back(i);
			ans.push_back(tmp);
		}
		 
		if (n==37){
			 vector<LL> tmp;
			 for (int i=37; i>=26; i--) tmp.push_back(i);
			 ans.push_back(tmp);
		}
		
		if (n==25 || n==41){
			vector<LL> cur;
			FOR(i,50){
				cur.push_back(i);
				if (SZ(cur)==6){
					chunk.push_back(cur);
					cur.clear();
				}
			}
			
			LL k1=0;
			if (n==25) k1=3;
			else k1=4;
			
			FR(i,k1,8) FR(j,i+1,8){
				vector<LL> tmp;
				for (LL x:chunk[i]) tmp.push_back(x+2);
				for (LL x:chunk[j]) tmp.push_back(x+2);
				ans.push_back(tmp);
			}
		}
		
		//cout<<SZ(ans);
		FOR(i,n){
			FOR(j,12) cout<<ans[i][j]<<" ";
			cout<<"\n";
		}
		return 0;
	}
	
	else if (n==30 || n==50 || n==31 || n==35 || n==40){
		LL k1=0, k2=0;
		if (n==30 || n==31){
			k1=6;
			k2=6;
		}
		if (n==50){
			k1=6;
			k2=7;
		}
		if (n==40){
			k1=7;
			k2=5;
		}
		
		vector<LL> cur;
		FOR(i,50){
			cur.push_back(i);
			if (SZ(cur)==3){
				chunk3.push_back(cur);
				cur.clear();
			}
		}
		
		FOR(i,k1) FR(j,i+1,k1) FR(h,j+1,k1) FR(z,h+1,k1) {
			vector<LL> tmp;
			for (LL x:chunk3[i]) tmp.push_back(x);
			for (LL x:chunk3[j]) tmp.push_back(x);
			for (LL x:chunk3[h]) tmp.push_back(x);
			for (LL x:chunk3[z]) tmp.push_back(x);
			ans.push_back(tmp);
		}
		 
		 FR(i,k1,k1+k2) FR(j,i+1,k1+k2) FR(h,j+1,k1+k2) FR(z,h+1,k1+k2) {
			vector<LL> tmp;
			for (LL x:chunk3[i]) tmp.push_back(x);
			for (LL x:chunk3[j]) tmp.push_back(x);
			for (LL x:chunk3[h]) tmp.push_back(x);
			for (LL x:chunk3[z]) tmp.push_back(x);
			ans.push_back(tmp);
		}
		
		if (n==31){
			vector<LL> tmp;
			for (int i=49; i>=38; i--) tmp.push_back(i);
			ans.push_back(tmp);
		}
		 
		 FOR(i,n){
			 FOR(j,12) cout<<ans[i][j]<<" ";
			 cout<<"\n";
		 }
		 return 0;
	}
	
	else if (n==18 || n==19){
		LL k=0;
		if (n==18 || n==19) k=6;
		
		vector<LL> cur;
		FOR(i,50){
			cur.push_back(i);
			if (SZ(cur)==3){
				chunk3.push_back(cur);
				cur.clear();
			}
		}
		
		FOR(i,k) FR(j,i+1,k) FR(h,j+1,k) FR(z,h+1,k) {
			vector<LL> tmp;
			for (LL x:chunk3[i]) tmp.push_back(x);
			for (LL x:chunk3[j]) tmp.push_back(x);
			for (LL x:chunk3[h]) tmp.push_back(x);
			for (LL x:chunk3[z]) tmp.push_back(x);
			ans.push_back(tmp);
		}
		
		if (n==18 || n==19){
			vector<LL> cur;
			FOR(i,50){
				cur.push_back(i);
				if (SZ(cur)==6){
					chunk2.push_back(cur);
					cur.clear();
				}
			}
			
			FR(i,3,6) FR(j,i+1,6){
				vector<LL> tmp;
				for (LL x:chunk2[i]) tmp.push_back(x);
				for (LL x:chunk2[j]) tmp.push_back(x);
				ans.push_back(tmp);
			}
		}
		
		if (n==19){
			vector<LL> tmp;
			for (int i=49; i>=38; i--) tmp.push_back(i);
			ans.push_back(tmp);
		}
		
		//cout<<SZ(ans);
		FOR(i,n){
			 FOR(j,12) cout<<ans[i][j]<<" ";
			 cout<<"\n";
		 }
		return 0;
	}
}
#Result Execution timeMemoryGrader output
Fetching results...