Submission #1257676

#TimeUsernameProblemLanguageResultExecution timeMemory
1257676tolbiSuper Dango Maker (JOI22_dango3)C++20
0 / 100
232 ms10620 KiB
#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
#define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl;

vector<int> concat(vector<int> a, vector<int> b){
	vector<int> ret = a;
	for (auto it : b) ret.push_back(it);
	for (auto &it : ret) it++;
	return ret;
}
void Solve(int N, int M) {
	swap(N,M);
	vector<bool> decided(N * M, false);
	vector<vector<int>> dango(M);
	for (int i = 0; i < M; i++){
		vector<int> cur;
		for (int j = 0; j < N * M; j++){
			if (decided[j]) cur.push_back(j);
		}
		vector<int> h;
		function<void(int,int,int)> solve = [&](int l, int r, int c)->void{
			if (c == 0) return;
			if (r - l + 1 == c){
				for (int i = l; i <= r; i++){
					decided[h[i]] = true;
				}
				return;
			}
			int m = l + r >> 1;
			int left = Query(concat(cur,vector<int>(h.begin()+l,h.begin()+m+1)));
			solve(l,m,left);
			solve(m+1,r,c-left);
		};
		for (int j = 0; j < N * M; j++){
			if (decided[j]) continue;
			h.push_back(j);
			if (h.size() == M){
				solve(0,h.size()-1,Query(concat(cur,h)));
				for (auto it : h){
					if (decided[it]) dango[i].push_back(it);
					else cur.push_back(it);
				}
				h.clear();
			}
		}
		if (h.size() > 0){
			solve(0,h.size()-1,Query(concat(cur,h)));
			for (auto it : h){
				if (decided[it]) dango[i].push_back(it);
				else cur.push_back(it);
			}
			h.clear();
		}
	}
	for (int i = 0; i < N; i++){
		vector<int> a;
		for (int j = 0; j < M; j++){
			a.push_back(dango[j][i]+1);
		}
		Answer(a);
	}
}


//3 3 1 2 1 2 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...