23暑假友谊赛No.2

23暑假友谊赛No.2

A-雨_23暑假友谊赛No.2 (nowcoder.com)

#include <bits/stdc++.h>

using namespace std;

signed main() {

    ios::sync_with_stdio(false);cin.tie(nullptr);
    int a,b,c,d,x;
    cin >> a >> b >> c >> d >> x;
    cout << (a > x ? 0 : x - a) << ' ' << (b > x ? 0 : x - b) << ' ' << (c > x ? 0 : x - c)<< " " << (d > x ? 0 : x - d);

    return 0;
}

B-吻_23暑假友谊赛No.2 (nowcoder.com)

啊,忘了加后取模,我真傻,真的.

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main() {

    ios::sync_with_stdio(false);cin.tie(nullptr);

    const int mod = 998244353;
    int n;
    cin >> n;
    n %= mod;
    cout << (n % mod + n % mod * (n - 1) % mod) % mod << endl;

    return 0;
}

C-失_23暑假友谊赛No.2 (nowcoder.com)

模拟

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main() {

    ios::sync_with_stdio(false);cin.tie(nullptr);

    string s;
    int n;
    cin >> s >> n;
    vector<string> ans(n);
    for(auto &i : ans) cin >> i;

    vector<int> k(n);
    for(int i = 0;i < n;i ++){
        if(ans[i].size() != s.size()){
            k[i] = 0;
        }else{
            for(int j = 0;j < s.size();j ++)
                k[i] += (ans[i][j] == s[j]);
        }
    }

    vector<string> res;
    int m = *max_element(k.begin(),k.end());
    for(int i = 0;i < n;i ++){
        if(k[i] == m)
            res.emplace_back(ans[i]);
    }

    sort(res.begin(),res.end());
    for(auto i : res)
        cout << i << endl;

    return 0;
}

D-吹_23暑假友谊赛No.2 (nowcoder.com)(动态规划)

\(dp[i][0/1]\)表示当前数为1或原数时的最大可爱值.

若当前数为1,则它的最大值为它左边为1的可爱值为原数时加上原数 - 1的可爱值

若当前数为原数,则它的最大值为左边为1加上当前数 - 1 或 为 原数时加上原数与当前数的差的绝对值

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main() {

    ios::sync_with_stdio(false);cin.tie(nullptr);

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

    vector dp(n,vector<int>(2,0));
    for(int i = 1;i < n;i ++){
        dp[i][0] = max(dp[i - 1][0],dp[i - 1][1] + abs(a[i - 1] - 1)) ;
        dp[i][1] = max(dp[i - 1][0] + abs(a[i] - 1), dp[i - 1][1] + abs(a[i - 1] - a[i]));
    }
    cout << max(dp[n - 1][0],dp[n - 1][1]) << endl;

    return 0;
}

E-唤_23暑假友谊赛No.2 (nowcoder.com)

首先边长为4,5,6的纸片都各需要一个正方形边框,而一个正方形边框可以装4个边长为3的纸片,边长为2和1的纸片可以放在这些纸片的空隙中,需要特殊处理.
一个边长为4的纸片可以放5个边长为2的,四个边长为3的纸片放不了边长为2的,一个边长为3的可以放5个,二个边长为3的可以放3个,三个边长为3的可以放1个,处理出当前有多少空隙可以放边长为2的纸片后继续处理边长为1的.
边长为1的只要看当前的边框面积减去已放入的纸片的面积,剩下的面积都能放边长为1的,比较一下看看还需不需要再继续加边框即可

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main() {

    ios::sync_with_stdio(false);cin.tie(nullptr);

    int T;
    cin >> T;
    while(T--){
        int s;
    cin >> s;
    int s3[] = {0,5,3,1};
    vector<int> k(7);
    for(int i = 1;i <= 6;i ++) cin >> k[i];

    int ans = 0;
    ans += k[6] + k[5] + k[4] + (k[3] + 3) / 4;
        
    int num2 = 5 * k[4] + s3[k[3] % 4];
    if(k[2] > num2)
        ans += (k[2] - num2 + 8) / 9;
        
    int sum = ans * 36 - k[6] * 36 - k[5] * 25 - k[4] * 16 - k[3] * 9 - k[2] * 4;
    if(k[1] > sum)
        ans += (k[1] - sum + 35) / 36;

    cout << (ans > s ? "No" : "Yes") << endl;
    }

    return 0;
}
posted @ 2023-07-26 19:48  Ke_scholar  阅读(3)  评论(0编辑  收藏  举报