제출 #1257701

#제출 시각아이디문제언어결과실행 시간메모리
1257701tolbiSuper Dango Maker (JOI22_dango3)C++20
7 / 100
505 ms916 KiB
#include "dango3.h" #include <bits/stdc++.h> using namespace std; #define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl; const int X = 32; //Query Count: N * N * M / X + N * M * X 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; vector<int> fail; for (int i = 0; i < h.size(); i++){ fail.push_back(h[i]); if (Query(concat(cur, fail))){ decided[h[i]] = true; fail.pop_back(); } } return; }; for (int j = 0; j < N * M; j++){ if (decided[j]) continue; h.push_back(j); if (h.size() == X){ 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); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...