50092. Pointer Chasing
難度:4.8/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#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "chasing.h"
static inline int is_ABC(char* s){
return s[0] == 'A' || s[0] == 'B' || s[0] == 'C';
}
static inline int is_num(char* s){
int n = strlen(s);
for(int i = 0; i < n; i++){
if(!isdigit(s[i])) return 0;
}
return 1;
}
static inline int map_char(char* s){
return s[0] - 'A';
}
void chasing(int **A[], int a, int *B[], int b, int C[], int c){
memset(A, 0, sizeof(A[0])*a);
memset(B, 0, sizeof(B[0])*b);
int arr_sizes[3] = {a, b, c};
char ipt[64];
while(fgets(ipt, 64, stdin) != NULL){
char* s[5];
s[0] = strtok(ipt, " \n");
for(int i = 1; i < 5; i++) s[i] = strtok(NULL, " \n");
if((!s[0]) || (!s[1]) || (!s[2]) || (!s[3]) || (s[4])) {printf("0\n"); continue;}
if(strlen(s[0]) != 1 || strlen(s[2]) != 1 || !is_ABC(s[0]) || !is_ABC(s[2])) {printf("0\n"); continue;}
if(!is_num(s[1]) || !is_num(s[3])) {printf("0\n"); continue;}
int f_array = map_char(s[0]), t_array = map_char(s[2]);
if(t_array - f_array != 1) {printf("0\n"); continue;}
int f_int = atoi(s[1]), t_int = atoi(s[3]);
if(f_int >= arr_sizes[f_array] || t_int >= arr_sizes[t_array]
|| f_int < 0 || t_int < 0) {printf("0\n"); continue;}
if(f_array == 0) A[f_int] = &B[t_int];
else B[f_int] = &C[t_int];
printf("1\n");
}
}