#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
//namespace {
// int variable_example = 1;
//} // namespace
map<vector<int>, int> mp;
void Solve(int n, int m) {
int len = n*m;
vector<int> v;
for(int x=0;x<len;x++){
v.push_back(x+1);
}
auto ask = [&](vector<int> &v) -> int {
if(mp.count(v)) return mp[v];
return mp[v] = Query(v);
};
vector<int> comp[n];
vector<int> w = v;
vector<int> ans;
int pos = 0;
while(pos < w.size() && ans.size()+1 < n){
int bound = 0;
int left = pos, right = w.size()-1;
while(left <= right){
int mid = (left+right) >> 1;
vector<int> z = ans;
for(int x=mid;x<w.size();x++){
z.push_back(w[x]);
}
if(ask(z) > 0){
bound = mid;
left = mid+1;
} else {
right = mid-1;
}
}
ans.push_back(w[bound]);
pos = bound+1;
}
ans.push_back(w.back());
v.clear();
pos = 0;
for(int x=0;x<w.size();x++){
while(pos < ans.size() && ans[pos] < w[x]){
pos++;
}
if(pos < ans.size() && ans[pos] == w[x]) continue;
v.push_back(w[x]);
}
int c[len];
fill(c, c+len, -1);
for(int x=0;x<ans.size();x++){
c[ans[x]-1] = x;
}
for(int x=0;x<ans.size();x++){
for(int y=0;y<v.size();y+=m){
queue<pair<int, int>> q;
q.push({y, min(y+m, (int) v.size())-1});
while(!q.empty()){
pair<int, int> p = q.front();
q.pop();
if(p.first > p.second) continue;
//
// cout << ans[x] << " " << p.first << " " << p.second << "\n";
//
vector<int> w;
for(int z=0;z<ans.size();z++){
if(z == x) continue;
w.push_back(ans[z]);
}
for(int z=p.first;z<=p.second;z++){
if(c[v[z]-1] == -1) w.push_back(v[z]);
}
if(ask(w) > 0){
if(p.first == p.second){
c[v[p.first]-1] = c[ans[x]-1];
continue;
}
q.push({p.first, (p.first+p.second)/2});
q.push({(p.first+p.second)/2 + 1, p.second});
}
}
}
}
Answer(ans);
for(int x=0;x<v.size();x++){
comp[c[v[x]-1]].push_back(v[x]);
}
for(int x=0;x<m-1;x++){
vector<int> w;
for(int y=0;y<n;y++){
w.push_back(comp[y][x]);
}
Answer(w);
}
}
Compilation message
dango3.cpp: In function 'void Solve(int, int)':
dango3.cpp:29:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | while(pos < w.size() && ans.size()+1 < n){
| ~~~~^~~~~~~~~~
dango3.cpp:29:39: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
29 | while(pos < w.size() && ans.size()+1 < n){
| ~~~~~~~~~~~~~^~~
dango3.cpp:36:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
36 | for(int x=mid;x<w.size();x++){
| ~^~~~~~~~~
dango3.cpp:55:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
55 | for(int x=0;x<w.size();x++){
| ~^~~~~~~~~
dango3.cpp:56:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
56 | while(pos < ans.size() && ans[pos] < w[x]){
| ~~~~^~~~~~~~~~~~
dango3.cpp:59:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
59 | if(pos < ans.size() && ans[pos] == w[x]) continue;
| ~~~~^~~~~~~~~~~~
dango3.cpp:67:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
67 | for(int x=0;x<ans.size();x++){
| ~^~~~~~~~~~~
dango3.cpp:71:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
71 | for(int x=0;x<ans.size();x++){
| ~^~~~~~~~~~~
dango3.cpp:72:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
72 | for(int y=0;y<v.size();y+=m){
| ~^~~~~~~~~
dango3.cpp:85:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
85 | for(int z=0;z<ans.size();z++){
| ~^~~~~~~~~~~
dango3.cpp:107:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
107 | for(int x=0;x<v.size();x++){
| ~^~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
67 ms |
6684 KB |
Output is correct |
2 |
Correct |
67 ms |
6700 KB |
Output is correct |
3 |
Correct |
46 ms |
5488 KB |
Output is correct |
4 |
Correct |
48 ms |
5544 KB |
Output is correct |
5 |
Correct |
57 ms |
4896 KB |
Output is correct |
6 |
Correct |
58 ms |
4888 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
447 ms |
46540 KB |
Wrong Answer [3] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
771 ms |
88760 KB |
Wrong Answer [3] |
2 |
Halted |
0 ms |
0 KB |
- |