题意
$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 ", 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 */