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;
}