codeforces727C(交互)
程序员文章站
2022-03-30 18:24:46
题意 $n$个数,初始时不知道他们的值。 每次可以询问两个数的和,在$n$次询问内确定他们的值 $n \leqslant 5000$ Sol 首先询问出$1, 2$,$1, 3$,$2, 3$ 解个方程确定他们的下标 对之后的依次询问$1, i$,解出$i$的值 ......
题意
$n$个数,初始时不知道他们的值。
每次可以询问两个数的和,在$n$次询问内确定他们的值
$n \leqslant 5000$
Sol
首先询问出$1, 2$,$1, 3$,$2, 3$
解个方程确定他们的下标
对之后的依次询问$1, i$,解出$i$的值
#include<cstdio> using namespace std; int N, aaa[3], ans[5001], a, b, c; int main() { scanf("%d", &N); puts("? 1 2"); fflush(stdout); scanf("%d", &aaa[0]); puts("? 2 3"); fflush(stdout); scanf("%d", &aaa[1]); puts("? 1 3"); fflush(stdout); scanf("%d", &aaa[2]); int aa = a, bb = b, cc = c, p; b = (aaa[0] + aaa[1] - aaa[2]) / 2; a = aaa[0] - b; c = aaa[1] - b; ans[1] = a; ans[2] = b; ans[3] = c; for(int i = 4; i <= N; i++) { printf("? 1 %d\n", i); fflush(stdout); scanf("%d", &p); ans[i] = p - a; } printf("! "); for(int i = 1; i <= N; i++) printf("%d ", ans[i]); return 0; } /* 5 10 7 5 9 9 4 6 1 5 5 */