Codeforces Round #609 (Div. 2)

A题

给出n,求大于n的两个合数a和b,并且a-b = n
直接输出n的倍数即可

int n;
int main() {
    cin >> n;
    cout << 9*n << ' ' << 8*n << endl;
    return 0;
}

B题

给出n和k两个数,给出两个数组a和b,求一个数x让a数组的每个数加上x对k取余等于b数组的数,可以进行重排序
给a和b排序,排完序再交错求x验证,求最下的x

ll a[2010],b[2010],c[2010];

int main() {
    int n,k;
    cin >> n >> k;
    for(int i = 0; i < n; i++) cin >> a[i];
    sort(a,a+n);
    for(int i = 0; i < n; i++) cin >> b[i];
    sort(b,b+n);
    ll x,mini = k;
    for(int i = 0; i < n; i++) {
        int flag = 0;
        x = (b[i] - a[0] + k) % k;
        for(int j = 0; j < n; j++) {
            int l = (j+i) % n;
            if((b[l] - a[j] + k) % k != x) flag = 1;
        }
        if(!flag) mini = min(mini,x);
    }
    cout << mini << endl;
}

C题

给出一个数,让这个数的每隔k位的数都相等并且要大于等于原数的最小数
按照题意模拟一遍,判断一下是不是比原数大,比原数小的话就把从第k个数开始找一个小于9的数然后加一(找到小于9之前的数都变为0),最后再按照题意模拟一边,输出即可

int main() {
    int n,k;
    cin >> n >> k;
    cin >> s;
    strcpy(ss,s);
    for(int i = 0; i < n; i++) s[i] = s[i%k];
    if(strcmp(ss,s) <= 0) {
        cout << n << endl << s << endl;
    }
    else {
        int a = k-1;
        while(ss[a] == '9') {
            ss[a] = '0';
            a--;
        }
        ss[a]++;
        for(int i = 0; i < n; i++) ss[i] = ss[i%k];
        cout << n << endl << ss << endl;
    }
    return 0;
}

D题

输入n 后面输入n个数 每个数代表那一列有多少个11的方块,为问最多可以用多少个12的方块覆盖
如果那一列是偶数,那就直接除以2,如果是奇数,如果隔壁列也是奇数,那么它们可以多构造一个,他们相间隔偶数列也是可以构造的。

int main() {
    ll n,sum = 0,flag1 = 0,flag2 = 0,a;
    cin >> n;
    for(int i = 0; i < n; i++) {
        cin >> a;
        sum += a/2;
        if(a&1) {
            if(i % 2 == 0) flag1++;
            else flag2++;
        }
    }
    cout << (sum + min(flag1,flag2)) << endl;
    return 0;
}
posted @ 2019-12-22 15:47  执梦之花  阅读(223)  评论(0编辑  收藏  举报