Codeforces Round #609 (Div. 2)

Posted emcikem

tags:

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

A

简单题,输出 8n 和9n即可
因为8n是8的倍数,9n是9的倍数
而9n-8n=n成立

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    int n;
    cin >> n;
    printf("%d %d
",9 * n, 8 * n);
    return 0;
}

B

给出两个n长的序列和一个m
((a_{i}+x) %m = b_{p})

这题我失误了,竟然在for i里面加了个for i,太傻了
还有就是我的操作是用b的每个值比较a[0]进行求解,然后我特么又傻了,竟然写成了a[i]

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#define ll long long
using namespace std;
const int maxn = 2e3+5;
const int inf = 1e9 + 66555;
int a[maxn];
int b[maxn];
int c[maxn];
int n,m;
bool check(int *a,int *b){//O(nlogn)
    sort(a,a+n);
    for(int i = 0; i < n; i++){
        if(a[i] != b[i]){
            return 0;
        }
    }
    return 1;
}
int main(){
    cin >> n >> m;
    for(int i = 0; i < n; i++)scanf("%d",&a[i]);
    for(int i = 0; i < n; i++)scanf("%d",&b[i]);
    int ans = inf;
    sort(b,b+n);
    for(int i = 0; i < n; i++){
        int t;
        if(b[i] > a[0])t = b[i] - a[0];
        else t = m + b[i] - a[0];
        for(int j = 0; j < n; j++){
            c[j] = (a[j] + t) % m;
        }
        if(check(c,b)){
            ans = min(ans,t);
        }
    }
    cout << ans % m << endl;
    return 0;
}

C

这题就是只需要变前k个就行了
如果有前k个组成的n/k个k数的数组小于之前的,那么把最后一个数也就是a[k]加一
然后考虑进位的问题(我被hack在这里)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#define ll long long
using namespace std;
const int maxn = 2e5 + 5;
const int inf = 0x3f3f3f3f;
char a[maxn];
char z[maxn];
int n,k;
void change(){
    if(z[k] == '9'){
        z[k - 1]++;
        z[k] = '0';
        int i = k - 1;
        while(z[i]==':'){
            z[i - 1]++;
            z[i] = '0';
            i--;
        }
    }else{
        z[k]++;
    }
    int cnt = 1;
    for(int i = 1; i <= n; i++){
        if(cnt == k + 1)cnt = 1;
        z[i] = z[cnt++];
    }
}
int main(){
    cin >> n >> k;
    scanf("%s",a + 1);
    int cnt = 1;
    for(int i = 1; i <= n; i++){
        if(cnt == k + 1)cnt = 1;
        z[i] = a[cnt++];
    }
    int zz = strcmp(z + 1, a + 1);
    if(zz < 0){
        change();
    }
    printf("%d
",n);
    printf("%s
",z + 1);
    return 0;
}

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

Codeforces Round #609 题解

Codeforces Round #609 (Div. 2)

Codeforces Round 609 Div2

Codeforces Round #609 (Div. 2)--B.Modulo Equality

Codeforces Round #609 (Div. 2) A-E简要题解

Codeforces Round #609 (Div. 2)