50070. Elevator

難度:3/5

free(ptr)是好習慣。

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "elevator.h"

void solve(){
int u, d, f;
char movement[1600];
scanf("%d %d %d %s", &u, &d, &f, movement);
int n = strlen(movement);

Elevator* e = newElevator(u, d, f);
for(int i = 0; i < n; i++){
char now_mv = movement[i];
int rtv;
if(now_mv == 'U') rtv = up(e);
else if(now_mv == 'D') rtv = down(e);

if(rtv == 1) printf("Valid %d\n", getPosition(e));
else if(rtv == 0) printf("Invalid\n");
else{
printf("Broken\n");
break;
}
}

for(int i = 1; i <= f; i++){
if(visited(e, i)) printf("%d\n", i);
}
free(e);
}

int main(){
int t; scanf("%d", &t);
while(t--) solve();
}

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
69
70
71
// #define MAXF 1000
// #define MAXL 1500
#include <stdio.h>
#include <stdlib.h>
#include "elevator.h"

struct Elevator{
int u;
int d;
int f;
int now_floor;
int cnsc;
int vis[1024];
};

Elevator* newElevator(int u, int d, int F){
Elevator* e = (Elevator*) malloc(sizeof(Elevator));
e->u = u;
e->d = d;
e->f = F;
e->now_floor = 1;
e->cnsc = 0;
for(int i = 1; i <= e->f; i++){
e->vis[i] = 0;
}
e->vis[1] = 1;
return e;
}

int up(Elevator* e){
if(e->now_floor + e->u <= e->f){ // valid
e->now_floor += e->u;
e->cnsc = 0;
e->vis[e->now_floor] = 1;
return 1;
}
else{ // invalid
if(e->cnsc < 0) e->cnsc = 1;
else e->cnsc += 1;

if(e->cnsc >= 4) return -1;
else return 0;
}
}


int down(Elevator* e){
if(e->now_floor - e->d >= 1){ // valid
e->now_floor -= e->d;
e->cnsc = 0;
e->vis[e->now_floor] = 1;
return 1;
}
else{ // invalid
if(e->cnsc > 0) e->cnsc = -1;
else e->cnsc -= 1;

if(e->cnsc <= -4) return -1;
else return 0;
}
}

int visited(Elevator* e, int floor){
if(floor > e->f || floor < 1) return 0;
else return e->vis[floor];
}

int getPosition(Elevator* e){
return e->now_floor;
}


50070. Elevator
https://aaronlin1229.github.io/judgegirl_50070/
Author
Akizumi
Posted on
July 17, 2023
Licensed under