/home/toolbox/public_html/solutions/6/661/a.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <fcntl.h>
6 #include <stdint.h>
7 #include <math.h>
8 #include <stdlib.h>
9
10 #define TRUE (1 == 1)
11 #define FALSE (1 != 1)
12
13 #define DEBUG if (FALSE)
14
15 /*
16 * Author: Isaac Traxler
17 * Date: 2017-01-22
18 * Purpose: fun
19 * Problem: 661 Blowing Fuses
20 */
21
22 /*
23 * This template reads data until a terminating value is reached.
24 */
25
26 #define MAX_DEVICES 22
27 #define OFF 0
28 #define ON 1
29
30 int n; /* number of devices */
31 int m; /* number of operations */
32 int c; /* fuse capacity */
33
34 int devices[MAX_DEVICES];
35 int caps[MAX_DEVICES];
36
37 void init()
38 {
39 /* FUNCTION init */
40 } /* FUNCTION init */
41
42 void dump()
43 {
44 /* FUNCTION dump */
45 } /* FUNCTION dump */
46
47 int getInput()
48 {
49 /* FUNCTION getInput */
50 int dataReadFlag;
51
52 scanf(" %d %d %d ", &n, &m, &c);
53 dataReadFlag = (m>0) || (n>0) || (c>0);
54 return (dataReadFlag);
55 } /* FUNCTION getInput */
56
57 void loadCap()
58 {
59 /* FUNCTION loadCap */
60 int i;
61
62 for (i=1; i<=n; i++)
63 {
64 /* for each device */
65 scanf(" %d ", &caps[i]);
66 devices[i] = OFF; /* set all devices off */
67 } /* for each device */
68 } /* FUNCTION loadCap */
69
70 void process()
71 {
72 /* FUNCTION process */
73 int i;
74 int tot = 0;
75 int dv;
76 int blown = FALSE;
77 int mx = 0;
78
79 loadCap();
80 for (i=0; i<m; i++)
81 {
82 /* process each operation */
83 scanf(" %d ", &dv);
84 switch (devices[dv])
85 {
86 /* switch */
87 case OFF:
88 devices[dv] = ON;
89 tot = tot + caps[dv];
90 blown = blown || (tot > c);
91 if (tot > mx)
92 {
93 mx = tot;
94 }
95 break;
96 case ON:
97 devices[dv] = OFF;
98 tot = tot - caps[dv];
99 break;
100 } /* switch */
101 } /* process each operation */
102 if (blown)
103 {
104 printf("Fuse was blown.\n");
105 }
106 else
107 {
108 printf("Fuse was not blown.\n");
109 printf("Maximal power consumption was %d amperes.\n", mx);
110 }
111 } /* FUNCTION process */
112
113 int main()
114 {
115 /* main */
116 int moreToDo;
117 int cnt = 1;
118
119 moreToDo = getInput();
120 while (moreToDo)
121 {
122 /* while */
123 printf("Sequence %d\n", cnt);
124 cnt++;
125 process();
126 printf("\n");
127 moreToDo = getInput();
128 } /* while */
129
130 return EXIT_SUCCESS;
131 } /* main */
132