제출 #1216782

#제출 시각아이디문제언어결과실행 시간메모리
1216782cowwycowSuper Dango Maker (JOI22_dango3)C++20
22 / 100
1587 ms940 KiB
#include <bits/stdc++.h>
#include "dango3.h"
using namespace std;
#define name "aaaaaa"
#define fi first
#define se second
using ll = long long;
using db = double;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using ppii = pair<int, pii>;

const int N = 405, M = 30, K = N * M;

int n, m;
int a[K];

int pos[K];


int ask(vector<int> v){
	cout << v.size() << ' ';
	for(int i : v){
		cout << i << ' ';
	}
	cout << endl;
	int res; cin >> res; return res;
}


bool b[K];

bool ck(int mid, int id){
	vector<int> v;
	for(int i = 1; i <= n * m; i++){
		b[i] = false;
	}

	b[id] = true;
	for(int i = 1; i <= mid; i++){
		b[pos[i]] = true;
	}
	for(int i = 1; i <= n * m; i++){
		if(b[i] == false) v.push_back(i);
	}

	if(Query(v) == m - 2){
		return true;
	}else{
		return false;
	}
}

vector<int> gay[K];

void Solve(int n2, int m2){
	n = n2, m = m2;
	a[1] = 1;
	pos[1] = 1;
	int dif = 1;
	for(int i = 2; i <= n * m; i++){
		int l = 1, r = min(n, dif + 1), mid;
		while(l < r){
			mid = (l + r) / 2;
			if(ck(mid, i)){
				r = mid;
			}else{
				l = mid + 1;
			}
		}
		a[i] = l;
		pos[l] = i;
		if(a[i] > dif){
			dif = a[i];
		}
	}

	for(int i = 1; i <= n * m; i++){
		gay[a[i]].push_back(i);
	}
	for(int i = 0; i < m; i++){
		vector<int> cur;
		for(int j = 1; j <= n; j++){
			cur.push_back(gay[j][i]);
		}
		Answer(cur);
		cur.clear();
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...