2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛

酶和ATP 2022年03月26日 653次浏览

A——A+B Problem

#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int a[N];
int b[N];
int n;

int main() {
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        b[i] = a[i];
    }

    sort(a, a + n);
    for (int i = 0; i < n; i++) {
        if (b[i] == a[n - 1])
            cout << b[i] + a[n - 2] << ' ';
        else
            cout << b[i] + a[n - 1] << ' ';
    }

    return 0;
}

B——Komorebi的数学课


快速幂背公式,改为 LL 就过了。

#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
long long n;
typedef long long LL;

LL qmi(LL m, LL k, LL p)
{
    LL res = 1 % p, t = m;
    while (k)
    {
        if (k&1) res = res * t % p;
        t = t * t % p;
        k >>= 1;
    }
    return res;
}


int main() {
    cin >> n;
    cout << qmi(n,n,n+2) << endl;
    return 0;
}

C——次佛锅

#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
#include <map>
using namespace std;

const int N = 1e5;
map<string, int> m;

int main() {
    string ch;
    while (cin >> ch) {
        if (ch[0] >= '0' && ch[0] <= '9') break;
        int v;
        cin >> v;
        m[ch] += v;
    }
    int n = stoi(ch);
    while (n--) {
        string ans;
        cin >> ans;
        cout << m[ans] << endl;
    }
    return 0;
}

F——黄金律法


一开始只能得 10 分,改成 LL 就全过了,一整个大无语!!!

#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
using namespace std;

const int N = 1e5 + 10;
long long w[N], m[N];
long long T;

bool cmp(long long a, long long b) { return a > b; }

int main() {
    scanf("%d", &T);
    long long n;
    while (T--) {
        scanf("%lld", &n);
        memset(w, 0, sizeof w);
        memset(m, 0, sizeof m);
        for (long long i = 0; i < n; i++) scanf("%lld", &w[i]);
        for (long long i = 0; i < n; i++) scanf("%lld", &m[i]);
        sort(w, w + n);
        sort(m, m + n, cmp);
        long long res = 0;
        for (long long i = 0; i < n; i++) res += (long long)w[i] * m[i];
        printf("%lld\n", res);
    }
    return 0;
}

G——天气预报


暴力+前缀和优化,还是只能得26.66分,只能说我尽力了!

#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;

const int N = 1e6 + 10;
long long res;
int an[N],bn[N];

int main()
{
    // 天数 至少要出去玩的天数 至少要休息的天数。
    int n, a, b;
    cin >> n >> a >> b;
    string s;
    getline(cin, s);
    getline(cin, s);
    s = ' ' + s;
    for(int i = 1;i <= n;i++)
    {
        an[i] = an[i - 1];
        bn[i] = bn[i - 1];
        if(s[i] == '0') an[i]++;
        if(s[i] == '1') bn[i]++;
    }
    
    for(int i = 1;i <= n;i++)
        for(int j = i + 1;j <= n;j++)
        {
            int ca = an[j] - an[i - 1];
            int cb = bn[j] - bn[i - 1];
            if(ca >= a && cb >= b) res++;
        }
         
    cout << res << endl;
    
    return 0;
}

K——取模


一开始暴力得了30分,优化了一下还是30分!???气死了

#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
using namespace std;
 
typedef long long LL;
LL n;
LL res;
 
int main()
{
    cin >> n;
     
    for(LL i = 1;i <= n;i++)
        res += (n % i) % 998244353;
     
    cout << res % 998244353 << endl;
     
    return 0;
}