A 小沙の好客
把商品排个序,做个前缀和,二分查找就好了。 二分查找可以用lower_bound(点这里),upper_bound(点这里)
#include <bits/stdc++.h>
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define ll long long
using namespace std;
ll a[100005],sum[100005];
int main(){
int n,q,k,x;
cin >> n >> q;
rep(i,1,n) cin >> a[i];
sort(a+1,a+n+1);
sum[1] = a[1];
rep(i,2,n) sum[i] = sum[i-1]+a[i];
while(q--){
cin >> k >> x;
int t = upper_bound(a+1,a+n+1,x)-a-1;
cout << sum[t]-sum[max(0,t-k)] << endl;
}
return 0;
}
B 小沙の博弈
签到题,偶数平局,奇数小雅获胜。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
cout << (n%2==0? "win-win!":"Yaya-win!") << endl;
return 0;
}
H 小沙の店铺
签到题,模拟n个客户,超过T了退出。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
ll x,y,k,n,T,sum = 0,cnt = 0,ans = -1;
cin >> x >> y >> k >> n >> T;
for(ll i = n;i >= 1;i--){
sum+=i*x;
cnt+=i;
if(cnt>=k){
x+=(cnt/k)*y;
cnt=cnt%k;
}
if(sum>=T){
ans = n-i+1;
break;
}
}
cout << ans << endl;
return 0;
}
K 小沙の抱团 easy
还是签到题(虽然难的也不会),每次要求以n/2+1人为单位抱团最优。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
ll n,sum = 0;
cin >> n;
while(n/2+1<n){
n = n/2+1;
sum++;
}
cout << sum << endl;
return 0;
}