【发布时间】:2019-11-03 14:39:05
【问题描述】:
The problem 表示我们必须找到要删除的最小学生数,以便第 i 个学生可以通过考试。因此,我基本上是将学生添加到一个多重集中,因为它存储排序后的值,虽然排序后的总和大于要求的分数,但我们将其减去并移至下一个。
问题在于输入:
3 4 3 9 1 1 9 8 9
with m : 需要通过的分数是 14
此处输入的第 6 个索引,即 9,尚未添加到多重集,正在以某种方式被删除。
运行有问题的输入时我得到的输出:
0 0 0 ;4--;3-- 2 ;9-- 1 ;9-- 1 ;9--;4--;9-- 3 ;9--;9--;9-- 3 ;9--;9--;9--;9-- 4
:""-- 中的值包含从 sum 中减去的 *x 有一个额外的 9 但我不知道如何?
multiset<int> st;
int setsum =0;
for(int i=0;i<n;i++)
{
int sum = setsum+ar[i];
if((sum)<=m)
{
cout<<"0 ";
}
else
{
//cout<<sum<<"-*";
int cnt = 0;
auto x = st.rbegin();
while(sum>m)
{
sum -= *x;
//cout<<";"<<*x<<"--";
x--;
//if(i==3)
//cout<<*x<<"++";
cnt++;
}
cout<<" "<<cnt<<" ";
}
st.emplace(ar[i]);
setsum += ar[i];
}
【问题讨论】:
-
ll 顺便代表 long long int
-
ll 顺便表示 long long int 我的建议是下次您在
StackOverflow发帖时搜索并替换您的在将代码添加到问题之前将其删除。 -
@drescherjm 是的,用 int 家伙替换了它,对不起我的错。
-
这似乎是learn how to debug your programs 的好时机,
-
@HardikMehta:我没有投反对票,但“为什么我的代码不起作用?”中更重要的事情之一问题是提供minimal reproducible example。您还没有这样做,因为问题中的代码不足以重现问题(我无法将其复制到源文件中,编译并运行它以重现您的行为),您也没有提供预期的输出,让人们更难帮助你。