CCF-201803-3-URL映射

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    private static List<String> ans = new ArrayList<String>();
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n, m;
        
        while (in.hasNext()) {
            n = in.nextInt();
            m = in.nextInt();
            String[] p = new String[n];
            String[] r = new String[n];
            String s1, s2;
            in.nextLine();
            for (int i = 0; i < n; i++) {
                String[] split = in.nextLine().split(" ");
                p[i] = split[0];
                r[i] = split[1];
            }
            
            for (int i = 0; i < m; i++) {
                boolean flag = true; //flag == false 表示找到
                s1 = in.next();
            
                int j;
                for (j = 0; j < n; j++) {
                    flag = !check(s1, p[j]);
                    if (!flag) { //找到
                        break;
                    }
                }
                if (flag) {
                    System.out.println(404);
                } else {
                    System.out.print(r[j]);
                    for (int k = 0; k < ans.size(); k++) {
                        if (check(ans.get(k)) == "<int>") {
                            System.out.print(" " + toi(ans.get(k)));
                        } else {
                            System.out.print(" " + ans.get(k));
                        }
                    }
                    System.out.println();
                }
            }
        }
    }

    private static int toi(String str) {
        int ans = 0;
        int len = str.length();
        for (int i = 0; i < len; i++) {
            ans = ans*10 + str.charAt(i) - '0';
        }
        return ans;
    }

    private static boolean check(String strp, String strq) {
        List<String> cnt1 = new ArrayList<>();
        List<String> cnt2 = new ArrayList<>();
        solve(cnt1, strq);
        solve(cnt2, strp);
        
        int tot = 1;
        if (cnt1.size() > cnt2.size()) {
            return false;
        }
        if (cnt1.size() >= 1) {
            if (cnt1.size() < cnt2.size() && !cnt1.get(cnt1.size()-1).equals("<path>")) {
                return false;
            }
        }
        
        if (cnt1.size() == 0 && cnt2.size() != 0) {
            return false;
        }
        
        ans.clear();
        for (int i = 0; i < cnt1.size(); i++) {
            if (cnt1.get(i).equals(cnt2.get(i))) {
                tot += (cnt2.get(i).length() + 1);
                continue;
            } else if (cnt1.get(i).equals("<path>")) {
                ans.add(strp.substring(tot, strp.length()));
                return true;
            } else if (cnt1.get(i).equals(check(cnt2.get(i)))) {
                ans.add(cnt2.get(i));
                tot += (cnt2.get(i).length()+1);
            } else {
                return false;
            }
        }
        
        
        if (strp.charAt(strp.length()-1) == '/' && strq.charAt(strq.length()-1) != '/') {
            return false;
        }
        if (strp.charAt(strp.length()-1) != '/' && strq.charAt(strq.length()-1) == '/') {
            return false;
        }
        
        
        return true;
    }
    
    private static void solve(List<String> V, String str) {
        V.clear();
        int len = str.length();
        String cnt = "";
        for (int i = 1; i < len; i++) {
            if (str.charAt(i) == '/') {
                V.add(cnt);
                cnt = "";
            } else {
                cnt += str.charAt(i);
            }
        }
        if (cnt != "") {
            V.add(cnt);
        }
    }

    private static String check(String str) {
        int len = str.length();
        int flag = 0;
        for (int i = 0; i < len; i++) {
            if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                flag = 1;
                break;
            }
        }
        
        if (flag == 0) {
            return "<int>";
        } else {
            return "<str>";
        }
    }
}

 

posted on 2018-08-07 21:28  NEU-2015  阅读(846)  评论(0编辑  收藏  举报

导航