50160. Skills

難度:3/5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))

typedef struct{
int b;
int e;
int c;
int now_cool_down;
int last_used;
} s_sp_atk;

int r;
int h, g;
int max_h;
s_sp_atk sp_atk[4];
int b;

int get_damage(s_sp_atk *s, int rnd_cnt){
if(s->last_used == -1){
if(rnd_cnt <= s->c) return s->b;
else return s->b + (s->e * (rnd_cnt - s->c));
}
else if(rnd_cnt - s->last_used >= s->c){
return s->b + (s->e * (rnd_cnt - s->last_used - s->c));
}
else{
return -1;
}
}

void ipt(){
scanf("%d %d %d", &r, &h, &g);
for(int i = 0; i < 3; i++){
scanf("%d %d %d", &sp_atk[i].b, &sp_atk[i].e, &sp_atk[i].c);
sp_atk[i].last_used = -1;
}
scanf("%d", &sp_atk[3].b);
sp_atk[3].e = 0, sp_atk[3].c = 0, sp_atk[3].last_used = -1;

max_h = h;
}

void solve(){
for(int rnd_cnt = 0; rnd_cnt < r; rnd_cnt++){
int max_idx = 0, max_dmg = -1;
for(int i = 0; i < 4; i++){
int now_dmg = get_damage(&sp_atk[i], rnd_cnt);
if(now_dmg > max_dmg) max_idx = i, max_dmg = now_dmg;
}
sp_atk[max_idx].last_used = rnd_cnt;

h -= max_dmg;
printf("%d%c", h, (rnd_cnt == r - 1 || h <= 0) ? '\n' : ' ');

if(h <= 0) break;
else h = min(max_h, h + g);
}
}

int main(){
ipt();
solve();
}


50160. Skills
https://aaronlin1229.github.io/judgegirl_50160/
Author
Akizumi
Posted on
July 17, 2023
Licensed under