C2. Exam in BerSU (hard version)(CF 思维)

it2022-05-05  154

http://codeforces.com/contest/1185/problem/C2

 

题意:一个序列的数字,从左往右取数字,第i的数字一定要取,问你前面最少只有几个数字没取,满足取的数字和小于m

最开始那个简单的题用优先队列过了,这个会超时还是交了一发,blem/C2

 

 

 

题意:一个序列的数字,从左往右取数字,第i的数字一定要取,问你前面最少只有几个数字没取,满足取的数字和小于m

 

最开始那个简单的题用优先队列过了,这个会超时还是交了一发,第十四哥样例就超时了。

思路:所有的数字在1-100以内,所以开一个数组记录每个数字出现的个数。

#include<bits/stdc++.h> using namespace std; int b[110]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0; i<n; i++) { int a; scanf("%d",&a); int sum=0; int k=0; sum=m-a; for(int j=1; j<=100; j++) { int ans=min(sum/j,b[j]); k+=ans; sum-=ans*j; } b[a]++; printf("%d ",i-k); } }

 


最新回复(0)