結果
問題 | No.2768 Password Crack |
ユーザー |
|
提出日時 | 2024-05-31 22:25:54 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 56 ms / 2,000 ms |
コード長 | 2,541 bytes |
コンパイル時間 | 3,697 ms |
コンパイル使用メモリ | 258,368 KB |
実行使用メモリ | 25,476 KB |
平均クエリ数 | 495.20 |
最終ジャッジ日時 | 2024-12-21 00:03:18 |
合計ジャッジ時間 | 6,663 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 29 |
ソースコード
#include<bits/stdc++.h>using namespace std;#include<atcoder/modint>using namespace atcoder;#ifdef DEFINED_ONLY_IN_LOCAL#include <dump.hpp>#define dump(...) cpp_dump(__VA_ARGS__)#else#undef dump#define dump(...)#endiftemplate<class T>inline bool chmax(T &a,T b){if(a<b){a=b;return true;}return false;}template<class T>inline bool chmin(T &a,T b){if(a>b){a=b;return true;}return false;}#define rep1(i,a) for(int i=0;i<(int)(a);i++)#define rep2(i,a,b) for(int i =(int)(a);i<(int)(b);i++)#define rep3(i,a,b,c) for(int i=(int)(a);i<(int)(b);i+=(int)(c))#define overloadRep(a,b,c,d,e,...)e#define rep(...) overloadRep(__VA_ARGS__,rep3,rep2,rep1)(__VA_ARGS__)#define rrep(i,a,b) for(int i=(int)(a);i<=(int)(b);i++)#define drep(i,a,b) for(int i=(int)(a);i>=(int)(b);i--)#define all(a) a.begin(),a.end()#define rall(a) a.rbegin(),a.rend()using P=pair<long,long>;using T=tuple<long,long,long>;const int inf=1e9;const long INF=1e18;const int dx[4]={0,1,0,-1};const int dy[4]={1,0,-1,0};bool bit(long x, int p){return (x>>p)&1;}bool out(int ni, int nj, int h, int w){return (ni<0 or ni>=h or nj<0 or nj>=w);}int pc(long x){return __builtin_popcountl(x);}using mint=modint998244353;int main(){int n;cin>>n;auto get=[&](string t){cout<<"? "<<t<<endl;int res;cin>>res;return res;};vector<int>now(26);rep(i,26){string s(n,'a'+i);int x=get(s);now[i]=x;}string ans(n,'.');rep(i,n){string s(n,0+'a');// int mx=0,id=0;// vector<bool>used(26);// rep(j,26)if(chmax(mx,now[j]))id=j;set<pair<int,int>>st;rep(j,26)st.emplace(now[j],j);int id=st.rbegin()->second;st.erase(*st.rbegin());s[i]=char(id+'a');// used[id]=true;int pre=get(s);while(true){// int nmx=0,nid=0;// rep(j,26)if(!used[j]){// if(chmax(nmx,now[j]))nid=j;// }// used[nid]=true;int nid=st.rbegin()->second;st.erase(*st.rbegin());s[i]=char(nid+'a');int nex=get(s);if(pre==nex){pre=nex;id=nid;}else if(nex==pre-1){ans[i]=char(id+'a');now[id]--;break;}else{ans[i]=char(nid+'a');now[nid]--;break;}}}cout<<"! "<<ans<<endl;return 0;}