目录
- A
- B
- C
#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define int long longsigned main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--){int n;cin >> n;int zheng = 0, fu = 0;for (int i = 1; i <= n; i++){int x;cin >> x;if (x > 0)zheng += x;elsefu += x;}fu = abs(fu);if (fu > zheng)cout << fu - zheng << endl;elsecout << zheng - fu << endl;}return 0;}
B思路:这个题一开始的时候想的是把全部的N放到前面,结果第二个测试点就WA了 。其实这个题的正解是把全N和B换位置,但是有的N是不用动的,我们需要判断有几个N是不需要动的,要动的N的下标是从几开始 。具体细节放在代码里 。#include <cstring>#include <iostream>#include <algorithm>using namespace std;void solve(){int n;cin >> n;if (n == 1){cout << 1 << endl;cout << 1 << ' ' << 3 << endl;return ;}int k = n - n / 2;cout << k << endl;int j = 1;for (int i = (n / 2 + 1) * 3; i <= 3 * n; i += 3){cout << j << ' ' << i << endl;j += 3;}}int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--){solve();}return 0;}
C思路:这个是个博弈的题,通过观察样例的话我们可以发现,我们想要让对手输的话,我们只需要一直把那个最小的数换给他,他只能把最小的那个数-1然后换出去,所以一直反复的话最小的那个数变成0的时候,那么那个人就输了 。Alice是先手没所以只要第一个不是最小的那一个那么Alice就会赢反之Bob就会赢 。如果第一个和后面的最小值相等的话还是Bob赢#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 1e6 + 10;int a[N];void solve(){int Min = 0x3f3f3f3f;int n;cin >> n;int sum = 0;for (int i = 1; i <= n; i++){cin >> a[i];if (i >= 2)Min = min(a[i], Min);}if (a[1] > Min){cout << "Alice" << endl;}else{cout << "Bob" << endl;}}int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--){solve();}return 0;}
【Div. 2 Codeforces Round #832A~C题解】
经验总结扩展阅读
- Div. 1 + Div. 2, Rated, Prizes! CodeTON Round 3 A-D
- C.差分维护,D.容斥原理 CodeTON Round 3
- Div. 2 Codeforces Round #832 A-D
- Div. 3 Codeforces Round #820 A-G
- Codeforces 1670 E. Hemose on the Tree
- Div. 1 + Div. 2 Codeforces Round #831 A-E
- Codeforces Global Round 23 A-D
- Div. 4 Codeforces Round #827 A-G
- Div. 3 Codeforces Round #826 A-E
- Div. 3 Codeforces Round #828 A-F