voidsolve(){ int n; scanf("%d", &n); int m = (n + 1) / 2; printf("%d\n", m); for (int i = 0; i < m; i++) { printf("%d %d\n", 3 * i + 1, 3 * (n - i)); } }
由于是减法运算,可以从最小值入手考虑。如果 a1 即为最小值,则 Alice 只能将它减一后换出去,此时 Bob 可以再将它换进来。于是每轮操作 a1 都会减少 1,而其他数中选一个减少 1。由于 a1 为最小值,必然先变成 0,所以 Bob 可以胜出。如果 a1 不为最小值,则 Alice 可以将最小值换进来,此时 Bob 面临的局面同上,Alice 必胜。
usingnamespace std; #define int long long int32_tmain() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int t;cin>>t; while(t--) { int n;cin>>n; int a[n];for(int i=0;i<n;++i) cin>>a[i]; puts((a[0]==(*min_element(a,a+n))) ? "Bob" : "Alice"); } return0; }
D. Yet Another Problem
题意:给你一个数组 a,每次询问给出一个 l,r,询问将这部分子段全部变成 0 的最小操作次数。每次操作可以选择一个 l′,r′(l≤l′≤r′≤r,(l′−r′+1) is odd),使用这段区间的异或和来替换其中每个数。