一道很简单的思维题,题目本身不重要,可是有个很离谱的question
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long a[200005],qzh[200005],ans;
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i)cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;++i){
qzh[i]+=qzh[i-1]+a[i];
}
for(int i=1;i<=n;++i){
int d=((m-qzh[i])/i)+1;//爆0了
if(d>0)ans+=d;
}
cout<<ans;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long a[200005],qzh[200005],ans;
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i)cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;++i){
qzh[i]+=qzh[i-1]+a[i];
}
for(int i=1;i<=n;++i){
int d=((m-qzh[i]+i)/i);//只改了这个式子,就ac了
if(d>0)ans+=d;
}
cout<<ans;
return 0;
}
题目描述:
小绮同样喜欢购物,简单地说就是买很多东西,且很多东西都会重复买,原因就是钱多, 她每天都可以得到 m 元,但这些钱如果在一天中没有被用完,就会神奇地消失掉,也就是 说,她每天都有 m 元。 现在有 n 件小绮想要买的商品,其中第 i 件商品在第一天的价格为 ai ,神奇的是, 每过一天,这些商品的价格都会上涨 1 元,即在第 j 天时,第 i 件商品的价格为 ai + j − 1, 这些商品每天都有且只会有一个,即小绮每天只能买同一件商品一次。 小绮想要尽可能的多买东西,即买到的商品数量越多越好,请你帮她找出这个最大值。 输入格式: 第一行两个数字,分别为 n 、 m 第二行 n 个数字,表示 ai 数组的值
输出格式: 一个数字,即答案
样例输入: 3 7 2 1 2
样例输入: 11
样例解释: 在第一天,价格为 2、1、2 ,此时最多可以买 3 件商品
在第二天,价格为 3、2、3 ,此时最多可以买 2 件商品
在第三天,价格为 4、3、4 ,此时最多可以买 2 件商品
在第四天,价格为 5、4、5 ,此时最多可以买 1 件商品
在第五天,价格为 6、5、6 ,此时最多可以买 1 件商品
在第六天,价格为 7、6、7 ,此时最多可以买 1 件商品
在第七天,价格为 8、7、8 ,此时最多可以买 1 件商品
在第八天,价格为 9、8、9 ,此时无法再购买商品
因此答案为 3 + 2 + 2 + 1 + 1 + 1 + 1 = 11
数据范围: 对于 20% 的数据,有 n <= 10, ai <= 5, m <= 10
对于 100% 的数据,有 n <= 200000, ai <= 10^9, m <= 10^9