题目
input
6
5
15
10
output
? 1 2
? 5 6
? 3 4
! 1 4 4 6 7 8
题意:第一道交互题,首先给你一个数n说明有n个笼子,你最多能问n次,对于你的询问,机器会给出答案,问:每个笼子里各有几只火烈鸟
思路:每次询问我们至少得出一个笼子中有几只,例如我们先问1-2,1~3,这样我们就会知道第三个笼子有几只,这样问到1-n,问了n-1次,我们最后问一次2-3就可以得到第二个笼子有几只,我们有1-2,进而得出第一个笼子中的数量,这样就可以了,注意:每个输出语句后面加上. fflush(stdout);
AC code
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
ll n,t,a[1200];
void solve()
{
ll p,q,x,y;
int flag=1;
for(int i=2;i<=n;i++)
{
printf("? 1 %d\n",i);
fflush(stdout);
if(flag)
{cin>>p;
x=p;
flag=0;}
else
{
cin>>q;
a[i]=q-p;//从第三只开始
p=q;
}
}
printf("? 2 3\n");//询问2-3
fflush(stdout);
cin>>y;
a[2]=y-a[3];
a[1]=x-a[2];
printf("!");
for(int i=1;i<=n;i++)
printf(" %d",a[i]);
printf("\n");
fflush(stdout);
}
int main()
{
ios::sync_with_stdio(0);
cin>>n;
solve();
}