标签:namespace col char alt lse int ESS space har
先用两次猜出第一个字符,后面就不会出现这个字符了 (我们假设这个字符是c0,其余三种字符分别是c1、c2和c3) ,然后考虑已知s的前i个字符(不妨就s),来推出后面的字符
询问:s+c1和s+c2,如果不是就是c3了,期望是5/3n次的
询问:s+c1+s+c2+c1+s+c2+c2+s+c2+c3(很神奇)
如果长度是i+2,那么就是c2;如果长度是i+1,那么就是c1;否则就是c3
然而s的长度是4i+7的,当|s|=n-1,是4n+3,需要第一种做法,最多2次
那么最坏的次数是2+n-2+2=n+2次,即题中的上限
1 #include<bits/stdc++.h> 2 #include "combo.h" 3 using namespace std; 4 string guess_sequence(int n){ 5 char c[4]={‘A‘,‘B‘,‘X‘,‘Y‘}; 6 if (press("XY")) 7 if (press("X"))swap(c[0],c[2]); 8 else swap(c[0],c[3]); 9 else 10 if (press("B"))swap(c[0],c[1]); 11 string s; 12 s+=c[0]; 13 if (n==1)return s; 14 for(int i=2;i<n;i++){ 15 int k=press(s+c[2]+s+c[3]+c[1]+s+c[3]+c[2]+s+c[3]+c[3]); 16 s+=c[1+(k>=i)+(k>i)]; 17 } 18 if (press(s+c[1]+s+c[2])<n)s+=c[3]; 19 else s+=c[(press(s+c[2])==n)+1]; 20 return s; 21 }
标签:namespace col char alt lse int ESS space har
原文地址:https://www.cnblogs.com/PYWBKTDA/p/11523506.html