zoj 上一简单的题~超时~可以怎么改

来源:百度知道 编辑:UC知道 时间:2024/06/11 21:04:14
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1195

我的
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1195
我是用数组a表示用的电的消耗~b表示开或关~b[i]=0时表示第i 个关着的~1的时候就是开着的
#include "stdio.h"
int main()
{
int n,m,c,cases,i,a[100],b[100],max,op,sum;
cases=0;
while(scanf("%d%d%d",&n,&m,&c)&&(n||m||c))
{
for(i=1;i<=n;i++)
{scanf("%d",&a[i]);
b[i]=0;
}
max=sum=0;
for(i=1;i<=m;i++)
{
scanf("%d",&op);
if(b[op]==0)
{
sum+=a[op];
b[op]=1;
}
else
{
sum-=a[op];
b[op]=0;
}

if(sum>c)

问题出在这里
if(sum>c)
{ if(cases++)
printf("\n");
printf("Sequence %d\n",cases);
printf("Fuse was blown.\n");
break;
}
这里如果数据没有读到最后就超过范围,直接退出,后面的数据会被当作下一个测试数据。。。最后导致测试测试数据“不整齐”,卡在输入上,就tle了。
输出格式有点小问题。

#include "stdio.h"
int main()
{
int n,m,c,cases,i,a[100],b[100],max,op,sum;
cases=0;
while(scanf("%d%d%d",&n,&m,&c),n||m||c)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=0;
}
max=sum=0; cases++;
for(i=1;i<=m;i++)
{
scanf("%d",&op);
if(b[op]==0)
{
sum+=a[op];
b[op]=1;
}
else
{
sum-=a[op];
b[op]=0;
}
if(sum>c)
{
for(i++;i<=m;++i)
scanf("%d",&op);
i--;
printf(&qu