标签:支付 main pac ios name return syn turn out
# 题意
有 n 件商品,你带着 p 元钱,每次你可以选择至多 k 件商品,只需要支付其中最贵的商品的价格就可以买下你选择的这些商品
你带的钱最多可以购买多少件商品
# 题解
二分最后的位置,check时从后往前减保证正确性
1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N=1e5+10; 5 ll a[N]; 6 int n,k; 7 ll p; 8 bool check(ll mid){ 9 ll pos=p; 10 for(int i = mid; i >= 1; i-=k) 11 pos-=a[i]; 12 return pos>=0; 13 } 14 int main(){ 15 ios::sync_with_stdio(0); 16 cin.tie(0); 17 cout.tie(0); 18 cin>>n>>p>>k; 19 for(int i = 1; i <= n; i++) 20 cin >> a[i]; 21 sort(a+1,a+n+1); 22 23 int l=1,r=n; 24 while(l < r){ 25 int mid = l+r+1 >> 1; 26 if(check(mid)) 27 l = mid; 28 else 29 r = mid-1; 30 } 31 cout<<l<<endl; 32 }
标签:支付 main pac ios name return syn turn out
原文地址:https://www.cnblogs.com/hhyx/p/12430962.html