好惨的一场

这里就先放我赛时过的两个代码吧,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,我也只是记录而已啊(难道实名还有错Σ(っ °Д °;)っ)

浙公网安备 33010602011771号