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

Codeforces Round #609 (Div. 2)

时间:2019-12-22 11:05:09      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:can   vector   strcmp   pac   name   else   一个   ==   lin   

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\n",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",n);
    printf("%s\n",z + 1);
    return 0;
}

Codeforces Round #609 (Div. 2)

标签:can   vector   strcmp   pac   name   else   一个   ==   lin   

原文地址:https://www.cnblogs.com/Emcikem/p/12079115.html

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