虽迟但到。
T1.糖果店
记 \(s_i=x_i+y_i\),设第 \(i\) 种糖果买了 \(r_i\) 个,记 \(r_i=2p_i+q_i\)(\(0\le q_i\le 1\)),则总价为 \(p_is_i+q_ix_i\),则显然只有 \(s_i\) 最小的 \(p_i\ne 0\),记为 \(s_j\);也显然只有最小的若干个 \(x_i\) 的 \(q_i=1\),于是把 \(x\) 排序,枚举一段前缀的 \(q_i=1\),剩下的钱全都买 \(s_j\) 即可。
点击查看代码[code]#include#define LL long longusing namespace std;const int N=1e5+5;int n,a[N],b[N];LL m,ans;signed main(){// freopen("candy.in","r",stdin);// freopen("candy.out","w",stdout); ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m; int mn=INT_MAX; for(int i=1;i>a>>b; mn=min(mn,a+b); } sort(a+1,a+n+1); LL sum=0; for(int i=0;im) break; LL tmp=m-sum; ans=max(ans,2ll*(tmp/mn)+i); } cout |