お、コミュニケーション問題だ。
https://yukicoder.me/problems/no/3562
問題
先手は、14要素以下で、最大値10^9以下の狭義単調増加な正整数列Aを与えられる。
合計377文字以内の複数のバイナリ文字列を後手に送り、後手にAを復元させよ。
解法
Aの階差数列を作り、それぞれ2進数表記を送ろう。
その際、階差数列の各要素は正なので、最上位ビットは1固定である。よって最上位ビットを省略するとよい。
例外ケースとして、1を2進数表記にして最上位ビットを省略すると空文字になるため、値はインクリメントして渡すとよい。
string S; int N; int Q; int A[20]; void solve() { int i,j,k,l,r,x,y; string s; cin>>S>>N>>Q; if(S=="Alice") { FOR(i,N) { cin>>A[i+1]; } cout<<N<<endl; FOR(i,N) { x=A[i+1]-A[i]+1; string V; while(x) { V+='0'+(x%2); x/=2; } reverse(ALL(V)); cout<<V.substr(1)<<endl; } } else { cin>>N; FOR(i,N) { cin>>s; s="1"+s; int v=0; FORR(a,s) v=v*2+(a-'0'); A[i+1]=A[i]+v-1; cout<<A[i+1]<<" "; } cout<<endl; } }
まとめ
これ想定解法の1番目じゃないのね。