poj1484||zoj1195 Blowing Fuses (模拟)

Description

Maybe you are familiar with the following situation. You have plugged in a lot of electrical devices, such as toasters, refrigerators, microwave ovens, computers, stereos, etc, and have them all running. But at the moment when you turn on the TV, the fuse blows, since the power drawn from all the machines is greater than the capacity of the fuse. Of course this is a great safety feature, avoiding that houses burn down too often due to fires ignited by overheating wires. But it is also annoying to walk down to the basement (or some other inconvenient place) to replace to fuse or switch it back on.

What one would like to have is a program that checks before turning on an electrical device whether the combined power drawn by all running devices exceeds the fuses capacity (and it blows), or whether it is safe to turn it on.


Input

The input consists of several test cases. Each test case describes a set of electrical devices and gives a sequence of turn on/off operations for these devices.

The first line of each test case contains three integers n, m and c, where n is the number of devices (n <= 20), m the number of operations performed on these devices and c is the capacity of the fuse (in Amperes). The following n lines contain one positive integer ci each, the consumption (in Amperes) of the i-th device.

This is followed by m lines also containing one integer each, between 1 and n inclusive. They describe a sequence of turn on/turn off operations performed on the devices. For every number, the state of that particular devices is toggled, i.e. if it is currently running, it is turned off, and if it is currently turned off, it will by switched on. At the beginning all devices are turned off.

The input will be terminated by a test case starting with n = m = c = 0. This test case should not be processed.


Output

For each test case, first output the number of the test case. Then output whether the fuse was blown during the operation sequence. The fuse will be blown if the sum of the power consumptions ci of turned on devices at some point exceeds the capacity of the fuse c.

If the fuse is not blown, output the maximal power consumption by turned on devices that occurred during the sequence.

Output a blank line after each test case.


Sample Input

2 2 10
5
7
1
2
3 6 10
2
5
7
2
1
2
3
1
3
0 0 0


Sample Output

Sequence 1
Fuse was blown.

Sequence 2
Fuse was not blown.

Maximal power consumption was 9 amperes.

题目意思很容易明白。直接就说来代码了。

我艹,这题目不好,m的范围不给,

第一:在读m个操作的时候就直接break掉,以至于之后一直wa...

第二:把m个操作读近数组,可是一开始数组开小了,老wa。

/*
    @author : liuwen
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits> //INT_MAX INT_MIN LONG_LONG_MAX LONG_LONG_MIN
#include <cstdlib>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int a[50],ci[5000],vis[50],n,m,c;
int main()
{
    //freopen("in.txt","r",stdin);
    int cas=0;
    while(cin>>n>>m>>c){
        if(n==0&&m==0&&c==0)    break;
        bool isok=true;
        memset(a,0,sizeof(a));
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=m;i++){
            scanf("%d",&ci[i]);
        }
        int _max=INT_MIN,tmp=0;
        for(int i=1;i<=m;i++){
            int t=ci[i];
            if(!vis[t]){
                vis[t]=1;
                tmp+=a[t];
            }else{
                vis[t]=0;
                tmp-=a[t];
            }
            _max=max(_max,tmp);
            if(_max>c){
                isok=false;
                break;
            }
        }
        printf("Sequence %d\n",++cas);
        if(!isok){
            printf("Fuse was blown.\n");
        }else{
            printf("Fuse was not blown.\nMaximal power consumption was %d amperes.\n",_max);
        }
        printf("\n");
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值