牛客周赛 Round 4

牛客周赛 Round 4

A-游游的字符串构造_牛客周赛 Round 4 (nowcoder.com)

先把几个\('you'\)输出,剩下的随便输出

#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long

using namespace std;

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n,m;
    cin >>n >> m;
    if(n < m * 3){
        cout << -1 << endl;
    }else{
        for(int i = 0;i < m;i ++)
            cout << "you";
        for(int i = 0; i < n - m * 3;i ++)
            cout << 'y';
    }

    return 0;
}

B-游游的整数拆分_牛客周赛 Round 4 (nowcoder.com)

要满足\(a+b=n\) 并且 $a \cdot b $是\(3\)的倍数,\(n\)\(3\)的倍数时,\(a,b\)同时为\(3\)的倍数会导致重复计算,答案就是\([1,n)\)里的所有\(3\)的倍数;\(n\)不是\(3\)的倍数时,\(a,b\)不同时为\(3\),所以可以互换,答案就是前面答案的两倍

#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long

using namespace std;

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    if(n % 3 == 0)
        cout << (n - 1)/ 3  << endl;
    else
        cout << (n - 1) / 3 * 2 << endl;
    
    return 0;
}

C-游游的整数操作_牛客周赛 Round 4 (nowcoder.com)

操作1的贡献是\(n \times x\),操作2的贡献在非负的情况下的贡献为\(-n\times x\),对于原数组,我们可以让所有数减去最小值,使得所有数非负,然后去用\(sum\)去记录操作1的贡献,判断操作2的贡献能否用用\(sum\)抵消掉,若不能抵消则说明这个时候肯定会使原数组元素小于0了,我们用一个\(cha\)去记录这个多出来的值,留在最后一并减掉,最后答案就是原数组加一遍再加上\(sum \times n\),记得取模.

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

signed main() {

    int n,k;
    cin >> n >> k;
    vector<int> a(n);
    for(auto &i : a) cin >> i;

    int mi = *min_element(a.begin(), a.end());
    int sum = mi, cha = 0;
    const int mod = 1e9 + 7;

    while(k--){
        int op,x;
        cin >> op >> x;
        if(op == 1){
            sum += x;
        }else{
            if(x <= sum)
                sum -= x;
            else{
                cha += x - sum;
                sum = 0;
            }
        }
    }

    for(auto &i : a)
        i = max(i - mi - cha, 0ll);

    int ans = 0;
    for(auto i : a) ans += i;
    ans = (ans % mod + sum % mod * n) % mod;

    cout << ans << endl;

    return 0;
}

D-游游的因子计算_牛客周赛 Round 4 (nowcoder.com)

就是把\(a,b\)分别算出它们的因子,以及它们因子的乘积,若 \(i\)能被\(a\)整除,\(j\)能被\(b\)整除,则\(i\times j\)也一定能被\(a \times b\)整除

#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long

using namespace std;

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
   
    int a,b;
    cin >> a >> b;

    int n = a,m = b;
    set<int> ans;
    vector<int> p,q;

    for(int i = 1;i <= sqrt(b) ; i++){
       if(b % i == 0){
           p.push_back(i);
           if(i * i != b)
           p.push_back(b / i);
       }
    }

    for(int i = 1;i <= sqrt(a) ; i++){
        if(a % i == 0){
            q.push_back(i);
            if(i * i != a)
            q.push_back(a / i);
        }
    }

    for(auto i : p){
        for(auto j : q){
            ans.insert(i * j);
        }
    }

    cout << ans.size() << endl;
    for(auto i : ans)
        cout << i << ' ';
    
    
    return 0;
}

E是个大模拟吧,没写,摸了...

posted @ 2023-07-31 00:35  Ke_scholar  阅读(36)  评论(0编辑  收藏  举报