CF1425F Flamingoes of Mystery 题解
前置知识
解法
令 \(sum_k=\sum\limits_{i=1}^{k} a_k\)。考虑分别输入 \(sum_2 \sim sum_n\),故可以由于差分知识得到 \(a_i=sum_i-sum_{i-1}(3 \le i \le n)\),接着输入 \(a_2+a_3\) 的值从而求出 \(a_2=sum_3-a_3,a_1=sum_2-a_2\)。
同时因为是交互题,记得清空缓冲区。 C++ 可以使用 fflush(stdout);
进行清空缓冲区。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sort stable_sort
#define endl '\n'
int sum[2001],a[2001];
int main()
{
int n,i,num;
cin>>n;
cout<<"? 1 2"<<endl;
fflush(stdout);
cin>>sum[2];
for(i=3;i<=n;i++)
{
cout<<"? 1 "<<i<<endl;
fflush(stdout);
cin>>sum[i];
a[i]=sum[i]-sum[i-1];
}
cout<<"? 2 3"<<endl;
fflush(stdout);
cin>>num;
a[2]=num-a[3];
a[1]=sum[2]-a[2];
cout<<"! ";
for(i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/17737105.html,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。