时间太晚就没有打,随便看了一下题,当了嘴巴选手。结果发现题目简单到超出想象。
题目链接:https://codeforces.com/contest/1166
A:
上来就卡题意,其实用map维护一下直接秒杀。
1 #include <bits/stdc++.h> 2 #define ll long long 3 #define pb push_back 4 #define mp make_pair 5 #define sot(a,b) sort(a+1,a+1+b) 6 #define rep(i,a,b) for (int i=a;i<=b;i++) 7 #define eps 1e-8 8 #define int_inf (1<<30)-1 9 #define ll_inf (1LL<<62)-1 10 #define lson curPos<<1 11 #define rson curPos<<1|1 12 13 using namespace std; 14 15 map<char, int>m; 16 int n; 17 string s; 18 19 int main() 20 { 21 m.clear(); 22 cin >> n; 23 while (n--) 24 { 25 cin >> s; 26 m[s[0]]++; 27 } 28 int ans = 0; 29 for (auto i : m) 30 { 31 if (i.second <= 2) continue; 32 int tmp = i.second / 2; 33 ans += (tmp - 1) * tmp / 2; 34 if (i.second & 1) tmp++; 35 ans += (tmp - 1) * tmp / 2; 36 } 37 cout << ans << endl; 38 return 0; 39 }
B:
只要能把k分解为两个大于等于5的数相乘,暴力填上aeiou就完事了。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson curPos<<1 15 #define rson curPos<<1|1 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 int k, n, m, flag = 0; 21 string s = "aeiou"; 22 23 int main() 24 { 25 scanf("%d", &k); 26 rep1(i, 1, k) 27 if (k % i == 0 && i >= 5 && k / i >= 5) 28 { 29 n = i, m = k / i, flag = 1; break; 30 } 31 if (!flag) return puts("-1"), 0; 32 rep0(i, 0, n) rep0(j, 0, m) printf("%c", s[(i + j) % 5]); 33 puts(""); 34 return 0; 35 }
C:
给定一维坐标系上的n个数(点),问有多少对数x,y满足线段 [abs(x-y),abs(x+y)]能覆盖线段[abs(x),abs(y)]。
看似麻烦。但是留意到被覆盖的线段是[abs(x),abs(y)]而不是[x,y],所以这道题跟正负没有任何关系,直接取绝对值即可。判断大的线段能不能覆盖小的线段,就要看max(x,y)/min(x,y)是否大于2,如果大于2则不能覆盖。显然二分查找。
于是时间复杂度O(nlogn),是这段时间cf contest出过最傻逼的C题了。(赛后看了一眼队友代码,怎么你们还分类大讨论啊???)
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson curPos<<1 15 #define rson curPos<<1|1 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 const int maxn = 2e5 + 10; 21 int a[maxn], n; 22 ll ans = 0; 23 24 int main() 25 { 26 scanf("%d", &n); 27 rep1(i, 1, n) scanf("%d", &a[i]), a[i] = abs(a[i]); 28 sot(a, n); 29 rep0(i, 1, n) ans += upper_bound(a + i, a + 1 + n, 2 * a[i]) - a - i - 1; 30 printf("%lld\n", ans); 31 return 0; 32 }
D && E:
还没看题,等今天做完实验回来再补。
Codeforces Round #561 (div. 2)
原文:https://www.cnblogs.com/JHSeng/p/10885007.html