一、题目描述:
这是一道交互题,你需要猜出一个
有
假设一开始有一个只有
第一种:
第二种:
你有两次猜测序列的机会,只要有一个对了就算过关。请保证你输入的
二、解题思路:
乍一看这一题还真没什么思路。但是我们的目的是构造一条链,这样能简化问题,方便猜测。
经过多次尝试后不难发现只需要
然后我们还剩下
怎么求端点?感觉就跟求树的直径一样,随便找一个点,距离最远的一定就是端点。这里花掉
最后再挨个询问其他各个点与端点的距离,最后输出即可。注意最后输出了答案还要读入一个
但我的代码用的是别人的思路,一开始没想出来:
任意挑选两个点对另外
设这两个点的位置为
而这个题显然是有解的,所以有唯一解。
在计算的时候注意是否两个点求出的端点是同一个端点,要分类讨论。
三、完整代码:
1 #include<iostream> 2 #define N 1010 3 using namespace std; 4 int T,n,rans,a[N],vis[N]; 5 int ma[3],dis[3][N],ans[N]; 6 void add(int x) 7 { 8 cout<<"+ "<<x<<endl; 9 cin>>rans; 10 } 11 int query(int u,int v) 12 { 13 cout<<"? "<<u<<" "<<v<<endl; 14 cin>>rans; return rans; 15 } 16 void build_array() 17 { 18 for(int i=1;i<=n;i++) 19 vis[i]=0; 20 a[1]=(n+1)/2;vis[a[1]]=1; 21 for(int i=1;i<n;i++) 22 { 23 int t=n-a[i]; 24 if(vis[t]) t++; 25 vis[t]=1,a[i+1]=t; 26 } 27 } 28 void print(int d1,int d2) 29 { 30 ans[1]=a[d1];ans[2]=a[d2]; 31 for(int i=3;i<=n;i++) 32 { 33 int t11=d1+dis[1][i],t12=d1-dis[1][i]; 34 int t21=d2+dis[2][i],t22=d2-dis[2][i]; 35 if(t11==t21||t11==t22) ans[i]=a[t11]; 36 if(t12==t21||t12==t22) ans[i]=a[t12]; 37 } 38 for(int i=1;i<=n;i++) 39 cout<<ans[i]<<" "; 40 } 41 void solve() 42 { 43 cin>>n; 44 build_array(); 45 ma[1]=ma[2]=0; 46 add(n);add(n+1); 47 48 for(int i=1;i<=2;i++) 49 for(int j=1;j<=n;j++) 50 dis[i][j]=0; 51 52 for(int i=1;i<=2;i++) 53 for(int j=1;j<=n;j++) 54 if(i!=j) 55 { 56 dis[i][j]=query(i,j); 57 if(dis[i][j]>dis[i][ma[i]]) 58 ma[i]=j; 59 } 60 61 cout<<"! "; 62 if(ma[1]==ma[2]) 63 { 64 print(1+dis[1][ma[1]],1+dis[2][ma[2]]); 65 print(n-dis[1][ma[1]],n-dis[2][ma[2]]); 66 } 67 if(ma[1]!=ma[2]) 68 { 69 print(1+dis[1][ma[1]],n-dis[2][ma[2]]); 70 print(n-dis[1][ma[1]],1+dis[2][ma[2]]); 71 } 72 cout<<endl;cin>>rans; 73 } 74 int main() 75 { 76 cin>>T; 77 for(int i=1;i<=T;i++) 78 solve(); 79 return 0; 80 }
四、写题心得:
标签:
Codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】