import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n+1];
        int[] b = new int[n+1];
        int[] pa = new int[n+1];
        for (int i = 1;i <= n;++i) a[i]=in.nextInt();
        for (int i = 1;i <= n;++i) b[i]=in.nextInt();
        boolean[] visa = new boolean[n+1];
        int[] ans = {0,0,0};
        dfs(n, 1, pa, visa, ans, a, b);
        System.out.println(ans[0]+" "+ans[1]+" "+ans[2]);
    }
    static void dfs(int n, int i, int[] pa, boolean[] visa, int[] ans,int[] a,int[] b) {
        if (i == n+1) {
            int awin = 0;
            int bwin = 0;
            for (int j = 1;j <= n;++j) {
                if (a[pa[j]] > b[j]) awin++;
                else if (a[pa[j]] < b[j]) bwin++;
            }
            if (awin > bwin) ans[0]++;
            else if (awin < bwin) ans[1]++;
            else ans[2]++;
            return;
        }
        for (int k = 1; k <= n; ++k) {
            if (visa[k]) continue;
            visa[k] = true;
            pa[i] = k;
            dfs(n, i+1, pa, visa, ans, a, b);
            visa[k] = false;
        }
    }
}

这里我使用了DFS求a队的排列,然后就可以枚举出所有的情况了。

一开始我把b队的排列也求了,后面发现求两个排列没有用,只要枚举其中一队的排列,就可以枚举出所有情况了。