# 13364 - Mom, don't do that ## Brief Given testcases T, each with two strings, O (origin directory) and D (decoded directory), please print "valid" if you can rearrange D into a sub-directory of O; if it's not possible, print "not valid". ## Input The first line of the input is an intger T, denoting the number of testcases. 1<= T <= 100 Next 2*T lines contain information of T pairs of O and D. O is a directory, composed of a sequence of folders separated by a "/", e.g. "/home/hii/it/is/a/folder". D is a decoded directory, which may be a sub-directory of O or an invalid directory: example 1: "/hii/home/it", which is valid because you rearrange it into "/home/hii/it". example 2: "/hii/it/home/nooo", which is invalid because "nooo" is not a part of folders of O. 1 <= length of O or D <= 5000 1 <= number of folders in O <= 50 Note that O and D must start from a "/", and there is no "/" in the end and each folder are not identical. ## Output For each testcases, if D may be valid, print "valid". Otherwise, print "not valid". Note that you have to print "\n" after each answer. ## Solution ```c= //by 景璞 #include <stdio.h> #include <string.h> int main() { int n; scanf("%d", &n); for(int i=0; i<n; i++) { char root[5000]; int layer = 0; char *token; char *all_dir[40]; scanf("%s", root); token = strtok(root, "/"); while( token != NULL ) { all_dir[layer] = token; token = strtok(NULL, "/"); layer++; } char test[5000]; int test_len = 0; char *test_dir[40]; scanf("%s", test); token = strtok(test, "/"); while( token != NULL ) { test_dir[test_len] = token; token = strtok(NULL, "/"); test_len++; } int flag = 1; for(int j=0; j<test_len; j++) { int found = 0; for(int k=0; k<layer; k++) { if(strcmp(all_dir[k], test_dir[j])==0) { found = 1; break; } } if(!found) { flag = 0; break; } } if(flag==1) printf("valid\n"); else printf("not valid\n"); } return 0; } ```