QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#664785 | #9484. Colored Complete Graph | Zvezdy# | RE | 0ms | 0kb | C++14 | 1.7kb | 2024-10-21 22:19:56 | 2024-10-21 22:19:56 |
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 5;
int cnt = 0;
map<pair<int, int>, int> mp;
int ask(int l, int r) {
cout << "?" << l << " " << r << endl;
char c;
cin >> c;
return c == 'R';
}
int flag[N];
int vis[N][2];
void solve() {
int n;
std::cin >> n;
for (int i = 2; i <= n; ++i) {
mp[{i - 1, i}] = ask(i - 1, i);
mp[{i, i - 1}] = mp[{i - 1, i}];
}
vector<pair<int, int>> ans[2];
flag[n] = mp[{n, n - 1}];
set<int> st[2];
for (int i = n - 1; i >= 1; --i) {
if (mp[{i, i + 1}] == flag[i + 1]) {
flag[i] = flag[i + 1];
ans[flag[i]].push_back({i, i + 1});
vis[i][flag[i]] = 1;
st[flag[i] ^ 1].insert(i);
} else {
bool flag = 0;
int &now = mp[{i, i + 1}];
st[now].erase(i + 1);
for (set<int>::iterator it = st[now].begin(); it != st[now].end();) {
if (ask(i, *it) == now) {
ans[now].push_back({i, *it});
it = st[now].erase(it);
} else {
ans[now ^ 1].push_back({*it, i});
flag = 1;
break;
}
}
if (!flag) {
st[now ^ 1].insert(i);
}
}
}
for (int i = 0; i < 2; i++) {
if (ans[i].size() == n - 1) {
cout << "!\n";
for (auto &[u, v] : ans[i]) {
cout << u << ' ' << v << '\n';
}
}
}
assert(0);
}
int main() {
solve();
return 0;
}
詳細信息
Test #1:
score: 0
Runtime Error
input:
3
output:
?1 2