Div. 2 Codeforces Round #832 A~C题解

目录

  • A
  • B
  • C
A思路:这个题的话我们把负数和整数分别求出来,比较绝对值的大小 , 用较大的那个减去较小的那个就可以了 。
#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题解】

    推荐阅读