# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
709224 | hmm789 | Password (RMI18_password) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
int query(string s);
string guess(int n, int s) {
int cnt = 1;
string ans = "";
pair<int, int> occ[s];
for(int i = 0; i < s; i++) {
int l = 1, r = n+1;
while(l < r) {
int m = (l+r)/2;
string s;
for(int j = 0; j < m; j++) s += (char)('a'+i);
//~ cout << "q" << cnt << ": " << s << endl;
if(query(s) == m) l = m+1;
else r = m;
}
occ[i].first = l-1;
occ[i].second = i;
//~ cout << "a " << i << " " << l-1 << endl;
}
sort(occ, occ+s);
for(int i = 0; i < occ[0].first; i++) ans += (char)('a'+occ[0].second);
for(int i = 1; i < s; i++) {
//~ cout << "s" << i << ": " << ans << endl;
int tmpcnt[ans.size()+1], sm = 0;
memset(tmpcnt, 0, sizeof(tmpcnt));
for(int j = ans.size(); j >= 0; j--) {
int l = sm+1, r = occ[i].first+1;
while(l < r) {
int m = (l+r)/2;
string tmp = "";
for(int k = 0; k < j; k++) tmp += ans[k];
for(int k = 0; k < m; k++) tmp += (char)('a'+occ[i].second);
if(query(tmp) == tmp.size()) l = m+1;
else r = m;
}
tmpcnt[j] = l-1-sm;
sm += l-1-sm;
}
string tmp = "";
for(int j = 0; j < ans.size(); j++) tmp += ans[j];
//~ cout << "s" << i << ": " << tmp << endl;
ans = "";
for(int j = 0; j < tmpcnt[0]; j++) ans += (char)('a'+occ[i].second);
for(int j = 1; j <= tmp.size(); j++) {
//~ cout << "s" << i << "(" << j << "): " << ans << endl;
ans += tmp[j-1];
for(int k = 0; k < tmpcnt[j]; k++) ans += (char)('a'+occ[i].second);
}
//~ cout << "s" << i << ": " << ans << endl;
}
return ans;
}