A题

思路:取出最小值,所有数加到最小值的最大倍数使得不超过k 记录次数即可
#include <bits/stdc++.h>
using namespace std;
int main () {
int T;
cin >> T;
while(T--) {
int n, k;
cin >> n >> k;
vector<int> a(n);
int minn = 0x3f3f3f3f;
int sum = 0;
for(int i = 0; i < n; ++i) {
cin >> a[i];
sum += a[i];
minn = min(minn, a[i]);
}
int ans = 0;
for(int i = 0; i < n; ++i) {
ans += (k - a[i]) / minn;
}
ans -= (k - minn) / minn;
cout << ans << endl;
}
}
B题

思路:分成三种情况。小于最大值的一半,等于最大值的一半,大于最大值的一般。依次标记即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
int T;
cin >> T;
while(T--) {
ll n, T;
cin >> n >> T;
vector<int> a(n);
for(int i = 0; i < n; ++i) {
cin >> a[i];
}
int temp = 1;
for(int i = 0; i < n; ++i) {
if(a[i] < T / 2 || a[i] == T / 2 && T & 1) {
cout << 0 << " ";
}
else if(!(T & 1) && a[i] == T / 2){
if(temp & 1) {
cout << 0 << " ";
}
else {
cout << 1 << " ";
}
temp++;
}
else {
cout << 1 << " ";
}
}
cout << endl;
// int i;
// for(i = 0; i < n && a[i] < T / 2; i++) {
// cout << 0 << " ";
// }
// int temp = 1;
// for(; i < n && a[i] == T / 2; ++i) {
// if(temp & 1) {
// cout << 0 << " ";
// }
// else {
// cout << 1 << " ";
// }
// temp++;
// }
// for(; i < n; ++i) {
// cout << 1 << " ";
// }
// cout << endl;
}
}
Codeforces Round #673 (Div. 2)
原文:https://www.cnblogs.com/lightac/p/13748574.html