# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
755907 | 2023-06-10T17:36:13 Z | vjudge1 | Password (RMI18_password) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; /* string hidden; int nn; int ss; int cnt = 0; int query(string str) { ++cnt; assert((int) str.size() <= nn); for (auto c : str) { assert(c - 'a' <= ss); } // cout << str << endl; int ptr = 0; for (int i = 0; i < (int) str.length(); i++) { while (ptr < (int) hidden.length() && hidden[ptr] != str[i]) { ++ptr; } if (ptr == (int) hidden.length()) { return i; } ptr++; } } */ int query(string str); string guess(int n, int s) { nn = n; ss = s; string endChars; vector<int> freq(s); for (int i = 0; i < s; i++) { string str; for (int it = 0; it < n; it++) { str += (i + 'a'); } freq[i] = query(str); if (freq[i] == n) { return str; } } for (int pos = n - 1; pos >= 0; pos--) { for (int i = 0; i < s; i++) { if (freq[i] > 0) { string build; for (int it = 0; it < freq[i]; it++) { build += (i + 'a'); } bool work = true; if ((int) build.size() + 1 + (int) endChars.size() <= n) { for (int j = 0; j < s; j++) { string tmp; tmp += build; tmp += (j + 'a'); tmp += endChars; if (query(tmp) == (int) tmp.length()) { work = false; break; } } } if (work) { freq[i] -= 1; endChars.insert(endChars.begin(), i + 'a'); break; } } } } return endChars; } /* int main() { ios::sync_with_stdio(false); cin.tie(0); int times = 100; while (times--) { mt19937 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count()); hidden.clear(); int n = rng() % 100 + 1; for (int i = 0; i < n; i++) { hidden += ((rng() % 4) + 'a'); } string str = guess(n, 4); debug(str, hidden); debug(cnt); assert(str == hidden); cnt = 0; } return 0; } */