CodeForces Round #560 Div.3

A. Remainder

#include <bits/stdc++.h>
using namespace std;

string s;
int N, x, y;

int main() {
    scanf("%d%d%d", &N, &x, &y);
    cin >> s;
    for(int i = 0; i < N / 2; i ++)
        swap(s[i], s[N - i - 1]);

    int ans = 0;
    for(int i = 0; i <= y; i ++) {
        if(i != y && s[i] != '0') ans ++;
        else if(i == y && s[i] != '1') ans ++;
    }
    
    for(int i = y + 1; i < x; i ++) {
        if(s[i] == '1') ans ++;
    }
    
    printf("%d
", ans);

    return 0;
}
View Code

B. Polycarp Training

#include <bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 10;
int N;
int a[maxn];

int main() {
    scanf("%d", &N);
    for(int i = 1; i <= N; i ++)
        scanf("%d", &a[i]);

    sort(a + 1, a + N + 1);

    int ans = 0;
    int pos = 1;
    for(int i = 1; i <= N; i ++) {
        if(a[i] >= pos) {
            ans ++;
            pos ++;
        }
    }

    printf("%d
", ans);

    return 0;
}
View Code

C. Good String

#include <bits/stdc++.h>
using namespace std;

int N;
string s, t;

int main() {
    scanf("%d", &N);
    cin >> s;

    int pos = 0;
    for(int i = 0; i < N; i ++) {
        if(pos % 2 == 0 || t[pos - 1] != s[i])
            t += s[i], pos ++;
    }

    if(t.length() % 2) pos --;
    t = t.substr(0, pos);

    printf("%d
", N - pos);
    cout << t << endl;

    return 0;
}
View Code

D. Almost All Divisors

#include <bits/stdc++.h>
using namespace std;

const int maxn = 550;
int T, N;
long long a[maxn];

bool IsPrime(long long x) {
    if(x == 1 || x == 0) return false;
    if(x == 2) return true;
    for(long long i = 2; i * i <= x; i ++)
        if(x % i == 0) return false;
    return true;
}

int Count(long long x) {
    int ans = 0;
    for(long long i = 2; i * i <= x; i ++) {
        if(x % i == 0) {
            if(x / i == i) ans += 1;
            else ans += 2;
        }
    }
    return ans;
}

int main() {
    scanf("%d", &T);
    while(T --) {
        bool flag = true;
        scanf("%d", &N);
        for(int i = 1; i <= N; i ++)
            cin >> a[i];

        sort(a + 1, a + 1 + N);

        if(N == 1 && !IsPrime(a[1])) flag = false;

        long long sum;
        sum = a[1] * a[N];
        for(int i = 2; i <= N / 2; i ++) {
            if(a[i] * a[N - i + 1] != sum) {
                flag = false;
                break;
            }
        }
        if(N % 2 && N != 1 && a[N / 2 + 1] * a[N / 2 + 1] != sum) flag = false;
        if(Count(sum) != N) flag = false;

        if(flag) cout << sum << endl;
        else printf("-1
");

    }
    return 0;
}
View Code

E. Two Arrays and Sum of Functions

#include <bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 10;
const long long mod = 998244353;
int N;
long long a[maxn], b[maxn];
vector<long long> v;

int main() {
    scanf("%d", &N);
    for(int i = 0; i < N; i ++) {
        scanf("%lld", &a[i]);
        v.push_back(a[i] * (i + 1) * (N - i));
    }

    sort(v.rbegin(), v.rend());
    for(int i = 0; i < N; i ++)
        scanf("%lld", &b[i]);

    long long ans = 0;
    sort(b, b + N);
    for(int i = 0; i < N; i ++) {
        ans = (ans + b[i] * (v[i] % mod)) % mod;
        ans %= mod;
    }

    printf("%lld
", ans % mod);

    return 0;
}
View Code

明天周一不想上班

 

原文地址:https://www.cnblogs.com/zlrrrr/p/10890289.html