yuwj  

好惨的一场

这里就先放我赛时过的两个代码吧,C题题目都要理解半天

A:模拟

/*
9876543210

9977665540
9976545670

9988776650
9977665540
9976554430
9876665430

9876556330
9876655330
9887766530
9977665540
9976554330
*/
#include <bits/stdc++.h>
using namespace std;

void solve(){
    string s; cin >> s;
    
    int cnt[10]{};
    for(char c : s) cnt[c - '0']++;

    s = " " + s;
    for(int i = 1; i <= 10; i++){
        if(cnt[10 - i]){
            //cout << 10 - i << ' ' << cnt[10-i] << '\n';
            cnt[10-i]--;
            cout << 10 - i;
        }else{
            //从剩余数字可选池中拿到最小的满足的数字
            for(int j = 10 - i; j <=9;j++){
                if(cnt[j]){
                    cout << j;
                    //<< ' ' << cnt[j];
                    cnt[j]--;
                    break;
                }
            }
        }
    }

    //if(s[10]=='0')cout << 0;
    cout << '\n';
}

int main(){
    int t; cin >> t;
    while(t--){
        solve();
    }
    return 0;
}

B:中位数结论,扩展

/*
中位数结论:区间加强版本

如果删掉k个数字,那么距离和最小的可能个数有多少个?
这是一段区间内数字:

让数字区间左端点尽可能小,
让数字区间右端点尽可能大,

这样就能覆盖到所有的可能性
*/
#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n, k, m, l, r; cin >> n >> k;
    vector<int> a(n+1);
    for(int i = 1; i <= n; i++) cin >> a[i];
    
    sort(a.begin()+1, a.end());
    m = n - k; 
    l = (m+1)/2, r = k + (m+2)/2;
    cout << a[r] - a[l] + 1 << '\n';
}

int main(){
    int t; cin >> t;
    while(t--){
        solve();
    }
    return 0;
}

奇怪,怎么好像每一篇都有至少1的阅读量,我已经怀疑是不是被谁盯上了QWQ,我也只是记录而已啊(难道实名还有错Σ(っ °Д °;)っ)

posted on 2025-04-26 19:38  xiaowang524  阅读(14)  评论(0)    收藏  举报