码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-22 22:55:02      阅读:463      评论:0      收藏:0      [点我收藏+]

标签:mis   opened   turn   其他   tar   BMI   fst   onclick   content   

从这里开始

瞎扯

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

技术分享图片

  居然还苟且水上紫名

技术分享图片

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

  然后日常瞎扯一下比赛状况。比如奇葩的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^2\log 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$,使得对于每个$1\leqslant i \leqslant n$满足$d \mid a_{i}$或者$d \mid b_{i}$。

  首先讲一个沙雕做法。

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

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

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

  然后找它较小的约数就是答案(因为上面那句话只是必要条件,但不是充分条件,比如可能$d > a_{i}$且$d > b_{i}$,但$d\mid 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

标签:mis   opened   turn   其他   tar   BMI   fst   onclick   content   

原文地址:https://www.cnblogs.com/yyf0309/p/9520773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!