結果
| 問題 |
No.282 おもりと天秤(2)
|
| コンテスト | |
| ユーザー |
satashun
|
| 提出日時 | 2015-09-18 23:37:37 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2,116 ms / 5,000 ms |
| コード長 | 1,700 bytes |
| コンパイル時間 | 1,546 ms |
| コンパイル使用メモリ | 164,588 KB |
| 実行使用メモリ | 25,220 KB |
| 平均クエリ数 | 220.33 |
| 最終ジャッジ日時 | 2024-07-16 21:22:22 |
| 合計ジャッジ時間 | 21,113 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 24 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<(n);i++)
#define ALL(c) (c).begin(),(c).end()
vector<int> g[510];
bool vis[510];
int tbl[510][510];
vi ask[510];
int n;
void gen(int N)
{
rep(i, N-1) {
int j = 0, cur = i;
while (j < i) {
tbl[i+1][j+1] = cur;
++cur;
if (cur >= N) cur = 1;
++j;
}
}
tbl[N][1] = N-1;
int cur = 2;
int i = 2;
for (; cur < N; ++i, cur += 2) {
tbl[N][i] = cur;
}
cur = 1;
for (; cur < N-1; cur += 2, ++i) {
tbl[N][i] = cur;
}
rep(i, N) rep(j, i) tbl[j+1][i+1] = tbl[i+1][j+1];
for (int i = 1; i <= N; ++i) {
for (int j = 1; j < i; ++j) {
if (i <= n) {
ask[tbl[i][j]].pb(i);
ask[tbl[i][j]].pb(j);
}
}
}
}
vi vs;
void dfs(int v)
{
vis[v] = 1;
for (int to : g[v]) if (!vis[to]) dfs(to);
vs.pb(v);
}
int main() {
cin >> n;
int N = n;
N += N & 1;
gen(N);
for (int i = 1; i < N; ++i) {
while (ask[i].size() < n * 2) ask[i].pb(0);
cout << "?";
rep(j, n) {
cout << " " << ask[i][j*2] << " " << ask[i][j*2+1];
}
cout << endl << flush;
rep(j, n) {
int l = ask[i][j*2], r = ask[i][j*2+1];
string s;
cin >> s;
if (r) {
if (s[0] == '>') {
g[l].pb(r);
} else if (s[0] == '<') {
g[r].pb(l);
}
}
}
}
rep(i, n) if (!vis[i+1]) {
dfs(i+1);
}
cout << "!";
rep(i, n) cout << " " << vs[i];
cout << endl;
cout << flush;
return 0;
}
satashun