首页 > 其他 > 详细

Codeforces Round #561 (div. 2)

时间:2019-05-18 11:26:02      阅读:326      评论:0      收藏:0      [点我收藏+]

时间太晚就没有打,随便看了一下题,当了嘴巴选手。结果发现题目简单到超出想象。

题目链接: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 }
View Code

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 }
View Code

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 }
View Code

D && E:

还没看题,等今天做完实验回来再补。

 

Codeforces Round #561 (div. 2)

原文:https://www.cnblogs.com/JHSeng/p/10885007.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!