2020.10.23个人赛
题目:Fair Game
思路:
该题给出了n个数,两个人各自拿走一个数(相同的数一起拿走),问拿完能否保证两人手里的数字个数相同而且 n 个数全部拿完。其实就用一个set即可,能把 n 个数拿完,证明放入set后 它的大小只能为2,而且这两个键对应的值也相等。
解题代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <cstring> #include <map> #include <set> using namespace std; const long long N = 1e10 + 7; const int maxn = 1e5 + 4; const long long INF = 8e18; typedef long long ll; #define for0(i,n) for(int i = 0;i < n;i++) #define for1(i,n) for(int i = 1;i <= n;i++) map<int,int> ma; int main(){ int n; cin >> n ; while(n--){ int x; cin >> x; ma[x]++; } if(ma.size() == 2){ auto it = ma.begin(); auto itt = ++ma.begin(); if(it -> second == itt -> second){ cout << "YES" << endl; cout << it->first << " " << itt->first; } else cout << "NO" << endl; } else{ cout << "NO" << endl; } return 0; }
题目:Polycarp and Letters
思路:
这题就是寻找一下没连续的不同小写字母的最大长度,遍历一遍,我用了map标记筛选重复的小写字母,维护最大值即可。
解题代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <cstring> #include <map> #include <set> using namespace std; const long long N = 1e10 + 7; const int maxn = 1e5 + 4; const long long INF = 8e18; typedef long long ll; #define for0(i,n) for(int i = 0;i < n;i++) #define for1(i,n) for(int i = 1;i <= n;i++) map<char,int>ma; int main(){ int n; cin >> n; string s; cin >> s; int maxl = 0,num = 0; for(int i = 0;i < s.length();i++){ if(s[i] >= 'a' && s[i] <= 'z' && !ma[s[i]] ){ ma[s[i]]++; num++; } if(s[i] >= 'A' && s[i] <= 'Z' || i == s.length()-1){ maxl = max(maxl,num); num = 0; ma.clear(); } } cout << maxl << endl; return 0; }
题目:Blown Garland
思路:
这题问4种灯灭的个数情况,由题意可知,这四种灯,每4个灯的顺序肯定都是一样的,我们便可用一个大小4的数组,记录每个位置灯灭的数量,遍历完便可得到答案。
解题代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <cstring> #include <map> #include <set> using namespace std; const long long N = 1e10 + 7; const int maxn = 1e5 + 4; const long long INF = 8e18; typedef long long ll; #define for0(i,n) for(int i = 0;i < n;i++) #define for1(i,n) for(int i = 1;i <= n;i++) int num[4]; int main(){ string s; int r,y,b,g; cin >> s; for(int i = 0;i < s.length();i++){ if(s[i] == 'R') r = i%4; if(s[i] == 'Y') y = i%4; if(s[i] == 'B') b = i%4; if(s[i] == 'G') g = i%4; if(s[i] == '!') num[i%4]++; } cout << num[r] << " "<< num[b] << " " <<num[y] << " "<< num[g] << endl; return 0; }