50130. Bank Accounts

難度:3.5/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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
char name[32];
int bal;
} helper;

int n;
helper arr[32];
char buffer[1024];

int is_str(char* s, char *p, int s_len, int p_len){
for(int i = 0; i <= (s_len - p_len); i++){
int flag = 1;
for(int j = 0; j < p_len; j++){
if(s[i + j] != p[j]){
flag = 0;
break;
}
}
if(flag == 1) return 1;
}
return 0;
}
int idty_op(char* cmd){
int n = strlen(cmd);
if(is_str(cmd, "earns", n, 5)) return 1;
if(is_str(cmd, "spends", n, 6)) return 2;
if(is_str(cmd, "gives", n, 5)) return 3;
if(is_str(cmd, "becomes", n, 7)) return 4;
return -1;
}

int find_idx(char *s){
for(int i = 0; i < n; i++){
if(strcmp(s, arr[i].name) == 0) return i;
}
return -1;
}
void earns(char* name, int num){
int rtv = find_idx(name);
if(rtv == -1) return;
arr[rtv].bal += num;
}
void spends(char* name, int num){
int rtv = find_idx(name);
if(rtv == -1) return;
if(arr[rtv].bal < num) return;
arr[rtv].bal -= num;
}
void gives(char* name1, char* name2, int num){
int rtv1 = find_idx(name1);
int rtv2 = find_idx(name2);
if(rtv1 == -1 || rtv2 == -1) return;
if(arr[rtv1].bal < num) return;
arr[rtv1].bal -= num;
arr[rtv2].bal += num;
}
void becomes(char* name, int num){
int rtv = find_idx(name);
if(rtv == -1) return;
arr[rtv].bal = num;
}


int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%s %d", arr[i].name, &arr[i].bal);
}

char name[32], cmd[32];
while(scanf("%s %s", name, cmd) != EOF){
int rtv = idty_op(cmd);
// printf("rtv = %d\n", rtv);
if(rtv == -1){
fgets(buffer, 1024, stdin);
}
else if(rtv == 1){
int num; scanf("%d", &num);
earns(name, num);
}
else if(rtv == 2){
int num; scanf("%d", &num);
spends(name, num);
}
else if(rtv == 3){
char name2[32]; int num; scanf("%s %d", name2, &num);
gives(name, name2, num);
}
else if(rtv == 4){
int num; scanf("%d", &num);
becomes(name, num);
}
}

for(int i = 0; i < n; i++){
printf("%s %d\n", arr[i].name, arr[i].bal);
}
}


50130. Bank Accounts
https://aaronlin1229.github.io/judgegirl_50130/
Author
Akizumi
Posted on
July 17, 2023
Licensed under