Codeforces Round #505 Div. 1 + Div. 2

传送门:>Here<

从来没打过\(CF\)(由于太晚了)…… 不知道开学了以后有没有机会能够熬夜打几场,毕竟到现在为止都是\(unrated\)好尴尬啊~

今天早上打了几题前几天的比赛题……

A. \(Doggo \ Recoloring\)

此题应当是签到题,但我还是傻了很久。很容易发现只要有任意一种狗的颜色超过\(1\),那么这种狗就是可以变色的。那么它永远只需要变为任意一个与他相邻的狗的颜色,数量不会减少反而增多。因此可以不停变下去。于是我们只需要统计一下是否有一种颜色是大于等于两个的

代码就不贴了

B. \(Weakened \ Common \ Divisor\)

题意为给出\(N\)个整数对,要求找出任意一个数,能够被任意一对中的其中一个数整除。称为\(WCD\)

我的想法是先预处理出第一对的两个数的所有因子,然后遍历所有处理出来的因子,遍历后面的每一对——如果当前因子合法就输出。最后留下来的因子里随便取一个即可。\(T\)了第\(45\)个点……

事实上慢就慢在我们不能够处理因子,而是应当处理素因子。因为如果一个非素数\(x\)能够作为\(WCD\),那么\(x\)的所有素因子肯定都可以满足。

/*By DennyQi 2018*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cmath>
#define  r  read()
using namespace std;
typedef long long ll;
const int MAXN = 10010;
const int MAXM = 20010;
const int INF = 1061109567;
inline int Max(const int a, const int b){ return (a > b) ? a : b; }
inline int Min(const int a, const int b){ return (a < b) ? a : b; }
inline int read(){
    int x = 0; int w = 1; register char c = getchar();
    for(; c ^ '-' && (c < '0' || c > '9'); c = getchar());
    if(c == '-') w = -1, c = getchar();
    for(; c >= '0' && c <= '9'; c = getchar()) x = (x<<3) + (x<<1) + c - '0'; return x * w;
}
int N,lim,t1;
ll f[200010],a[200010],b[200010];
inline void Fenjie(ll a){
    for(ll i = 2; i * i <= a; ++i){
        if(a % i == 0){
            f[++t1] = i;
            while(a % i == 0){
                a /= i;
            }
        }
    }
    if(a > 1){
        f[++t1] = a;
    }
}
int main(){
    N = r;
    for(int i = 1; i <= N; ++i){
        a[i] = r, b[i] =r ;
    }
    Fenjie(a[1]);
    Fenjie(b[1]);
    bool flg = 0;
    for(int i = 1; i <= t1; ++i){
        flg = 0;
        for(int j = 2; j <= N; ++j){
            if((a[j]%f[i] != 0) && (b[j]%f[i] != 0)){
                flg = 1;
                break;
            }
        }
        if(!flg){
            printf("%lld", f[i]);
            return 0;
        }
    }
    printf("-1");
    return 0;
}

C. \(Plasticine \ zebra\)

给出一个字符串,每个字符不是\(b\)就是\(w\)。每一次操作可以选择一个断点,然后让断点两边的全部翻转。无论操作几次。定义一个斑马串,其相邻元素不重复、问最大的斑马串是多长?也就是要通过若干次操作找到最长的\(bwbwbw..\)或\(wbwbwb...\)

找到一个断点然后两边都翻转实际上是可以等价的。例如一个字符串\(abcdefgh\),在\(c\)后面断了,那么就变为\(abc \ | \ defgh\),翻转后得到\(cbahgfed\)。我们发现其等价于\(abc\)放到\(defgh\)后面,然后整个翻转。而如果我们找到了一个斑马串,其翻过来依然是斑马串。因此我们只需要把字符串本身复制一遍接在后面,然后在这个两倍的字符串中找到最长的斑马串。(长度不能超过\(N\))。

为什么这样就好了呢?依然距离,将\(abcdefg\)复制一遍得到\(abcdefgabcdefg\)。任取一段长度为\(N\)的连续的子序列,其头尾相当于断点。因此这就相当于枚举了断点了

/*By DennyQi 2018*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#define  r  read()
using namespace std;
typedef long long ll;
const int MAXN = 10010;
const int MAXM = 20010;
const int INF = 1061109567;
inline int Max(const int a, const int b){ return (a > b) ? a : b; }
inline int Min(const int a, const int b){ return (a < b) ? a : b; }
inline int read(){
    int x = 0; int w = 1; register char c = getchar();
    for(; c ^ '-' && (c < '0' || c > '9'); c = getchar());
    if(c == '-') w = -1, c = getchar();
    for(; c >= '0' && c <= '9'; c = getchar()) x = (x<<3) + (x<<1) + c - '0'; return x * w;
}
int N,ans;
char s[200010];
int f[200010];
int main(){
    scanf("%s", s);
    N = strlen(s);
    for(int i = N; i < 2 * N; ++i) s[i] = s[i-N];
    for(int i = 0; i < 2 * N; ++i){
        if(i - 1 >= 0){
            if(s[i] != s[i-1]){
                f[i] = f[i-1] + 1;
            }
            else{
                f[i] = 1;
            }
        }
        else{
            f[i] = 1;
        }
        if(f[i] <= N){
            ans = Max(ans, f[i]);
        }
    }
    printf("%d", ans);
    return 0;
}

另外的几道题暂时还没做,有时间再更吧……

原文地址:https://www.cnblogs.com/qixingzhi/p/9534695.html

时间: 2024-10-24 03:23:39

Codeforces Round #505 Div. 1 + Div. 2的相关文章

Educational Codeforces Round 36 (Rated for Div. 2)

Educational Codeforces Round 36 (Rated for Div. 2) F. Imbalance Value of a Tree You are given a tree T consisting of n vertices. A number is written on each vertex; the number written on vertex i is ai. Let's denote the function I(x,?y) as the differ

Educational Codeforces Round 36 (Rated for Div. 2) 题解

Educational Codeforces Round 36 (Rated for Div. 2) 题目的质量很不错(不看题解做不出来,笑 Codeforces 920C 题意 给定一个\(1\)到\(n\)组成的数组,只可以交换某些相邻的位置,问是否可以将数组调整为升序的 解题思路 首先如果每个数都能通过交换到它应该到的位置,那么就可以调整为升序的. 但实际上交换是对称的,如果应该在的位置在当前位置前方的数都交换完成,那么整体就是排好序的,因为不可能所有不在相应位置的数都在相应位置的后方.

Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://codeforces.com/contest/985/problem/E Description Mishka received a gift of multicolored pencils for his birthday! Unfortunately he lives in a monochrome w

Educational Codeforces Round 55 (Rated for Div. 2)

Educational Codeforces Round 55 (Rated for Div. 2) 链接 A Vasya and Book 傻逼题..注意判边界. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<set> #include<map> #include<vector> #include<cm

Educational Codeforces Round 57 (Rated for Div. 2)

get人生第二场CF! 成绩:(exACM) rank858 AC3/7 Penalty57 rating1648(+52) 题目:Educational Codeforces Round 57 (Rated for Div. 2) 错题题解: D. Easy Problem E. The Top Scorer F. Inversion Expectation G. Lucky Tickets 原文地址:https://www.cnblogs.com/xht37/p/10198321.html

Educational Codeforces Round 58 (Rated for Div. 2)(待更新)

get人生第七场CF! 成绩:(exACM) rank AC3/7 Penalty104 rating() 题目:Educational Codeforces Round 58 (Rated for Div. 2) 错题题解: C. Division and Union 原文地址:https://www.cnblogs.com/xht37/p/10260260.html

Educational Codeforces Round 59 (Rated for Div. 2) DE题解

Educational Codeforces Round 59 (Rated for Div. 2) D. Compression 题目链接:https://codeforces.com/contest/1107/problem/D 题意: 给出一个n*(n/4)的矩阵,这个矩阵原本是一些01矩阵,但是现在四个四个储存进二进制里面,现在给出的矩阵为0~9以及A~F,表示0~15. 然后问这个矩阵能否压缩为一个(n/x)*(n/x)的矩阵,满足原矩阵中大小为x*x的子矩阵所有数都相等(所有子矩阵构

Codeforces Round #503 (by SIS, Div. 2)

Codeforces Round #503 (by SIS, Div. 2) https://codeforces.com/contest/1020 A 1 #include <iostream> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cstdlib> 7 #include <s

Educational Codeforces Round 62 (Rated for Div. 2)

layout: post title: Educational Codeforces Round 62 (Rated for Div. 2) author: "luowentaoaa" catalog: true tags: mathjax: true - codeforces - dp --- " target="_blank" style="font-size:24px;">传送门 D - Minimum Triangulat

Educational Codeforces Round 69 (Rated for Div. 2) B - Pillars

Educational Codeforces Round 69 (Rated for Div. 2) B - Pillars There are n pillars aligned in a row and numbered from 1 to n. Initially each pillar contains exactly one disk. The i-th pillar contains a disk having radius ai. You can move these disks