#include<bits/stdc++.h> #define int long long #define endl '\n' usingnamespace std; string s; int t; signedmain(){ scanf("%lld", &t); getchar(); while (t -- ) { getline(cin, s); int ans = (s[0] - 97) * 25 + s[1] - 97; if (s[0] > s[1]) ans ++; cout << ans << endl; } }
#include<bits/stdc++.h> #define int long long #define endl '\n' usingnamespace std; int n; signedmain(){ scanf("%lld", &n); int _1 = 0, _2 = 0; for (int i = 0, x; i < n; i ++ ) { scanf("%lld", &x); if (x == 1) _1 ++; else _2 ++; } int ans = min(_1, _2); if (_1 > _2) { _1 -= _2; ans += _1 / 3; } cout << ans << endl; return0; }
#include<bits/stdc++.h> #define int long long #define endl '\n' usingnamespace std; constint N = 1e5 + 10; int a[N]; int t, n, k; string s; map<char, int> mp; voidsolve(){ mp.clear(); int len = s.length(); for (int i = 0; i < len; i ++ ) { mp[s[i]] ++; } int ans = 0; for (int i = 0; i < 26; i ++ ) { char _1 = 97 + i; char _2 = 65 + i; if (mp[_1] == 0 && mp[_2] == 0) continue; int temp = min(mp[_1], mp[_2]); ans += temp; int maxNumber = max(mp[_1], mp[_2]) - temp; if (maxNumber >= 2 && k > 0) { int __ = maxNumber / 2; if (__ >= k) { ans += k; k = 0; } else { k -= __; ans += __; } } } cout << ans << endl; } signedmain(){ scanf("%lld", &t); while (t -- ) { scanf("%lld%lld", &n, &k); getchar(); getline(cin, s); solve(); } return0; }
#include<bits/stdc++.h> #define int long long #define endl '\n' usingnamespace std;
int t, n, ans; string s; signedmain(){ scanf("%lld", &t); while (t -- ) { ans = 0; scanf("%lld", &n); getchar(); getline(cin, s); int ans = n - 1; for (int i = 0; i < n - 2; i ++ ) { if (s[i + 2] == s[i]) ans --; } cout << ans << endl; } return0; }
当有0的情况下,数组中也不能有两个正数,因为x+y+0 = x + y,而x+y会比x或y更大。同理负数也一样;当数组中全是0,则一定满足条件。当数组中只有一个正数,其他全为0,也一定满足条件(0+0+x = x),同理,负数也一样。当数组中只有一对正负数的时候,即:x < 0, y > 0, sum = x + y + 0, sum必须为0才能满足条件。
没有0的情况下,且都小于3个数,则只有一种情况:数组长度为4;
长度为4最后只需要直接三个for循环搞定就行了,也就循环96次。
代码:
#include<bits/stdc++.h> usingnamespace std; constint N = 2e5 + 10; int a[N], n, t, idx;
//
boolcheck(){ int _l = 0, _mid = 0, _r = 0, sum = 0; for (int i = 0; i < n; i ++ ) { if (a[i] < 0) _l ++; elseif (a[i] == 0) _mid ++; else _r ++; sum += a[i]; } if (n == 3) { return a[0] == sum || a[1] == sum || a[2] == sum; } // 肯定不能有三个负数 // 同理;肯定不能有三个正数 if (_l >= 3 || _r >= 3) returnfalse; // 有零的情况 if (_mid > 0) { // 两个正数或两个负数 // 2 3 0 => 5 if (_l == 2 || _r == 2) returnfalse; // 只有1个正数和1个负数 if (_l == 1 && _r == 1) return sum == 0; // 只有1个正数或负数 // 001 002 003 001 0+0+0 0+0+x => x if (_r + _l == 1) returntrue; // 一个正数和负数都没有 => 0+0+0 returntrue; } // 长度为4且没有0的 i < j < k for (int i = 0; i < n; i ++ ) { for (int j = i + 1; j < n; j ++ ) { for (int k = j + 1; k < n; k ++ ) { bool f = false; for (int w = 0; w < n; w ++ ) { if (a[i] + a[j] + a[k] == a[w]) { f = true; break; } } if (!f) returnfalse; } } } returntrue; }
intmain() { scanf("%d", &t); while (t -- ) { scanf("%d", &n); for (int i = 0; i < n; i ++ ) scanf("%d", a + i); if (check()) puts("YES"); elseputs("NO"); } return0; }