时间:2022/9/4 19:00~20:40 20 道选择题 两道编程题 第一题:n 个桃子,常数 k,第 i 个重量为 \(a_i\),使一箱中最重的桃子重量不超过平均重量的 k 倍,求一箱中最多几个桃子。 通过 55%

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector a;
vector b;
for (int i = 0;i < n;i++) {
int t; cin >> t;
a.push_back(t);
}
sort(a.begin(), a.end());
b.push_back(a[0]);
for (int i = 1;i < n;i++) {
b.push_back(b[i - 1]+a[i]);
}
int ans = 0;

for(int i=0;i<n;i++){
int num=0;
for(int j=i+ans;j<n;j++){
if ((b[j] - b[i] + a[i]) * k >= a[j] * (j - i + 1)) {
num=j-i;
}
}
ans=max(ans,num);
if(i+ans>n){
break;
}
}
cout << ans+1 << endl;
return 0;
}

第二题:T 次询问,T 个 L,T 个 R,T 个 t,求从 \(L_i-R_i\) 有几个数的十进制各位异或值为 \(t_i\) AC

#include<iostream>
#include<vector>
using namespace std;
vector a;
vector b;
vector c;
bool YN(int x,int flag){
while(x){
flag=(flag^(x%10));
x/=10;
}
if(flag)
return false;
return true;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int t; cin>>t;
a.push_back(t);
}
for(int i=0;i<n;i++){
int t; cin>>t;
b.push_back(t);
}
for(int i=0;i<n;i++){
int t; cin>>t;
c.push_back(t);
}
for(int i=0;i<n;i++){
int ans=0;
if(c[i]>15){
cout<<"0 ";
continue;
}
for(int j=a[i];j<=b[i];j++){
if(YN(j,c[i]))
ans++;
}
cout<<ans<<" ";
}
cout<<endl;
return 0;
}