結果
問題 | No.2577 Simple Permutation Guess |
ユーザー |
|
提出日時 | 2023-12-05 02:30:34 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,397 bytes |
コンパイル時間 | 2,291 ms |
コンパイル使用メモリ | 201,244 KB |
最終ジャッジ日時 | 2025-02-18 07:43:30 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | TLE * 1 |
other | -- * 111 |
ソースコード
#include <bits/stdc++.h>using namespace std;template<class T> ostream& operator << (ostream& os, const vector<T>& vec) {if(vec.empty()) return os;os << vec[0];for(auto it = vec.begin(); ++it != vec.end(); ) os << ' ' << *it;return os;}struct factint {int n;std::vector<int> dat;factint() : n(0), dat(0) {}factint(int _n) : n(_n), dat(n) {}void safe(int st){for(int i = st; i + 1 < n; i++){if(dat[i] >= i + 1){dat[i + 1] += dat[i] / (i + 1);dat[i] %= i + 1;}}}factint& operator+=(const factint& rhs) {for(int i = 0; i < n; i++){dat[i] += rhs.dat[i];}safe(0);return *this;}factint& operator/=(const int v) {for(int i = n - 1; i >= 0; i--){int to = i, tmp = dat[i];while(to - 1 >= 0 && tmp % v != 0) tmp *= to--;dat[i] = 0;dat[to] += tmp / v;safe(to);}return *this;}factint operator+() const { return *this; }friend factint operator+(const factint& lhs, const factint& rhs) { return factint(lhs) += rhs; }friend factint operator/(const factint& lhs, const int& rhs) { return factint(lhs) /= rhs; }friend bool operator < (const factint& lhs, const factint& rhs) {for(int i = lhs.n - 1; i >= 0; i--){if(lhs.dat[i] < rhs.dat[i]) return true;}return false;}friend std::ostream& operator << (std::ostream &os, const factint& rhs) noexcept {int n = rhs.n;std::vector<bool> used(n);for(int i = n - 1; i >= 0; i--){int c = rhs.dat[i];for(int j = 0; j < n; j++){if(used[j]) continue;if(c == 0){if(i != n - 1) os << ' ';os << j + 1;used[j] = true;}c--;}}return os;}};int main(){ios::sync_with_stdio(false);cin.tie(0);int n, v;cin >> n;factint ok(n), ng(n), mid(n), one(n);ng.dat[n - 1] = n;one.dat[0] = 1;while(ok + one < ng){mid = (ok + ng) / 2;cout << "? " << mid << endl;cin >> v;(v ? ok : ng) = mid;}cout << "! " << ok << endl;}