Submission #660490

#TimeUsernameProblemLanguageResultExecution timeMemory
660490angelo_torresPassword (RMI18_password)C++17
30 / 100
69 ms208 KiB
#include <bits/stdc++.h> #define sz(v) (int) v.size() #define ff first #define ss second using namespace std; typedef pair<int,int> ii; int cn[26]; vector<int> a[26]; vector<ii> rn = {{0,7},{8,16},{17,25}}; deque<pair<int,char>> gr[3]; char ans[5005]; int query(string q); // int query(string s){ // cout << s << endl; // int tr; cin >> tr; // return tr; // } string guess(int n,int s){ // [0,7] // [8,16] // [17,25] for(auto [l,r] : rn){ for(int i = l; i <= r; ++i){ for(int j = l; j <= r; ++j){ if(i == j or i >= s or j >= s) continue; char x = (char) ('a'+i), y = (char) ('a'+j); string tr = ""; for(int k = 1; k <= n; ++k) tr.push_back(y); for(int k = 1; k <= n; ++k){ tr[k-1] = x; int vl = query(tr); if(vl < k) break; if(sz(a[i]) < k) a[i].push_back(vl-k); else a[i][k-1] += (vl-k); } } } } for(int i = 0; i < 26; ++i) cn[i] = sz(a[i]); for(int i = 0; i < 26; ++i){ for(int j = 0; j < sz(a[i]); ++j) a[i][j] += (sz(a[i])-j-1); } for(int i = 0; i < 3; ++i){ int l = rn[i].ff, r = rn[i].ss; for(int j = l; j <= r; ++j){ for(auto it : a[j]) gr[i].push_back({it,((char) ('a'+j))}); } sort(gr[i].rbegin(),gr[i].rend()); // for(auto it : gr[i]) cout << it.ff << " " << it.ss << " "; // cout << endl; } for(int i = n; i >= 1; --i){ vector<int> po; for(int j = 0; j < 3; ++j){ if(sz(gr[j]) > 0 && gr[j].back().ff == n-i) po.push_back(j); } int rp = -1; if(sz(po) == 1) rp = po[0]; if(sz(po) == 2){ int i1 = po[0], i2 = po[1]; string ft = ""; for(auto it : gr[i1]) ft.push_back(it.ss); ft.push_back(gr[i2].back().ss); int vl = query(ft); if(vl == sz(ft)) rp = i2; else rp = i1; } if(sz(po) == 3){ int i1 = po[0], i2 = po[1], i3 = po[2]; string ft = ""; for(auto it : gr[i1]) ft.push_back(it.ss); ft.push_back(gr[i2].back().ss); int vl = query(ft); if(vl == sz(ft)) rp = i2; else rp = i1; ft = ""; for(auto it : gr[rp]) ft.push_back(it.ss); ft.push_back(gr[i3].back().ss); vl = query(ft); if(vl == sz(ft)) rp = i3; } ans[i] = gr[rp].back().ss; gr[rp].pop_back(); for(int i = 0; i < 3; ++i){ if(i == rp) continue; for(auto &it : gr[i]) it.ff++; } } string tt = ""; for(int i = 1; i <= n; ++i) tt.push_back(ans[i]); return tt; } // int main(){ // int n,s; cin >> n >> s; // cout << guess(n,s) << endl; // return 0; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...