Codeforces Round #505 (Div 1 + Div 2 Combined) Partial Solution

Posted yyf0309

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #505 (Div 1 + Div 2 Combined) Partial Solution相关的知识,希望对你有一定的参考价值。

从这里开始

瞎扯

  打比赛,发现自己特别菜。

技术分享图片

  居然还苟且水上紫名

技术分享图片

  这个号不敢玩了。要努力学习才能对得起紫名啊,不然再玩两场就灰了。

  然后日常瞎扯一下比赛状况。比如奇葩的AC顺序:A->D->B->C。

  为啥B题分辣么低?Wrong Answer -(发现自己犯傻)-> Pretests Passed -(发现严重bug)-> Resubmission

  C居然数组开小1倍RE了一次,白白丢50分。

  由于做出B的时间有点晚,Hack的机会被Room里一个1小时做不动题的Master全抢走了(好吧,其实是有些人代码看不懂)

技术分享图片

  最开始看完B没有一眼切,后来AC的时候还想复杂了qwq。

  只能切完D稳定情绪再回来做。

  然后吐槽一下比赛吧。

  System Test 前 rk 300+,System Test 后 rk 200+。

  为啥?看一下Room里的情况:

技术分享图片

  fst + hack专场?

技术分享图片

  (mcfx差点rk 1)。

  F好像是bzoj某道合宿题的简化版(看完题解觉得好水。。怪不得OwenOwl一直说这次F好水,好后悔没来打。dream_maker同学说他会$O(n^3)$,不会$O(n^2log n)$,我很想喷一句。。),E可以用神奇的构造过掉。G?修说是神仙题。

  (最近可能有点忙,坑填得会很慢)

Problem A Doggo Recoloring

题目大意

  给定一个只包含小写字母的字符串,每次可以将一种至少出现了2次的字符都变成另一个字符。问是否可能使所有字符一样。

   特判$n = 1$的时候。其他时候看有没有一个字符出现了两次。

Code

技术分享图片
 1 /**
 2  * Codeforces
 3  * Problem#1025D
 4  * Accepted
 5  * Time: 31ms
 6  * Memory: 100k
 7  */ 
 8 #include <bits/stdc++.h>
 9 using namespace std;
10 typedef bool boolean;
11 
12 const int N = 1e5 + 5;
13 
14 int n;
15 char str[N];
16 boolean aflag = false;
17 boolean vis[30];
18 
19 int main() {
20     scanf("%d", &n);
21     scanf("%s", str);
22     if (n == 1) {
23         puts("YES");
24         return 0;
25     }
26     for (int i = 0; i < n; i++)
27         if (vis[str[i] - a]) {
28             puts("YES");
29             return 0;
30         } else 
31             vis[str[i] - a] = true;
32     puts("NO");
33     return 0;
34 }
Problem A

Problem B Weakened Common Divisor

题目大意

  给定$n$个二元组$(a_{i}, b_{i})$,问是否存在一个$d > 1$,使得对于每个$1leqslant i leqslant n$满足$d mid a_{i}$或者$d mid b_{i}$。

  首先讲一个沙雕做法。

  暴力枚举$a_{1} imes b_{1}$的质因子。然后$O(n)$检查。时间复杂度$O(sqrt{V} + nlog{V})$。

  然后讲考场上我的zz做法。

  如果$d$满足条件,那么$d$能够整除$lcm(a_{i}, b_{i})$。就是说$d$能整除每一对的最小公倍数的最大公约数。

  然后找它较小的约数就是答案(因为上面那句话只是必要条件,但不是充分条件,比如可能$d > a_{i}$且$d > b_{i}$,但$dmid a_{i}b_{i}$)。(少了这一步 WA * 1)

  找这个合法的约数不能暴力找(然后暴力找能过pretest,后来发现resubmission * 1)

  取能成为答案的那部分约数的最小值就好了。这样就可以保证它既是答案,又不会超过任意一个被选中的$a_{i}$或$b_{i}$。

Code

技术分享图片
 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 
 5 const int N = 150005;
 6 
 7 int n;
 8 int a[N], b[N];
 9 ll ls[N];
10 
11 ll gcd(ll a, ll b) {
12     return (!b) ? (a) : (gcd(b, a % b));
13 }
14 
15 int main(){
16     scanf("%d", &n);
17 
18     for (int i = 1; i <= n; i++)
19         scanf("%d%d", a + i, b + i);
20 
21     for (int i = 1; i <= n; i++)
22         ls[i] = a[i] / gcd(a[i], b[i]) * b[i];
23     ll res = ls[1];
24     
25     for (int i = 2; i <= n; i++)
26         res = gcd(res, ls[i]);
27     for (int i = 1; i <= n; i++) {
28         ll x = gcd(res, a[i]);
29         if (x > 1)
30             res = min(res, x);
31         ll y = gcd(res, b[i]);
32         if (y > 1)
33             res = min(res, y);
34     } 
35 
36     if (res == 1)
37         cout << -1;
38     else
39         cout << res;
40     return 0;
41 }
Problem B

 

以上是关于Codeforces Round #505 (Div 1 + Div 2 Combined) Partial Solution的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)

codeforces cf round#505(based on vk cup 2018 final) C. Plasticine zebra

Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) -B C(GCD,最长连续交替序列)

Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) 题解

Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) BWeakened Common Diviso(代

Educational Codeforces Round 75 (Rated for Div. 2)