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