以下是问题的链接:http://www.spoj.com/problems/STAMPS/; 这是当前代码的ideone链接:http://ideone.com/AcHfc6; 这是代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int t,x,n,sum,sum2,count,i,j;
scanf("%d",&t);
for(j=1;j<=t;j++)
{
cin>>x>>n;
sum=0;
int offer[n];
for(i=0;i<n;i++)
{
cin>>offer[i];
sum+=offer[i];
sort(offer,offer+n);
}
if(sum>=x)
{
sum2=0;
count=0;
for(i=n-1;i>=0;i--)
{
sum2+=offer[i];
if(sum2<=x)
count++;
else
break;
}
cout<<"Scenario #"<<j<<":"<<endl;
cout<<count<<endl;
cout<<endl;
}
else
{
cout<<"Scenario #"<<j<<":"<<endl;
cout<<"impossible"<<endl;
cout<<endl;
}
}
return 0;
}
代码为给定的测试用例提供了正确的答案,但它会导致TLE。我已尝试将cin
和cout
转换为scanf
/ printf
,但奇怪的是,答案不一样,我不知道答案如何彼此不同。
出了什么问题?
答案 0 :(得分:1)
我怀疑你的主要问题在于:
for(i=0;i<n;i++)
{
cin>>offer[i];
sum+=offer[i];
sort(offer,offer+n);
}
您为输入的每个数字排序数据。此外,您对随机数据进行排序,因为数组中只有i
行有效数据,而不是n
行。排序应该在循环之外完成一次:
for(i=0;i<n;i++)
{
cin>>offer[i];
sum+=offer[i];
}
sort(offer,offer+n);