跳转至

C. Production of Snowmen

C. Production of Snowmen

时间限制:每测试点 2 秒
内存限制:每测试点 512 MB

问题描述

为了营造真正的节日气氛,圣诞老人的助手们开设了一家生产雪人的工厂!

每个雪人都由三个雪球组成——头部、躯干和腿部。要使雪人稳定,组成腿的雪球必须严格大于组成躯干的雪球;反过来,组成躯干的雪球也必须严格大于组成头的雪球。形式上,如果我们将头部、躯干和腿部的大小分别表示为 a, b, c,那么只有当且仅当 a < b < c 时,雪人才是稳定的。

在雪人生产工厂,有三条传送带,每条传送带上都有 n 个雪球。第一条传送带上的雪球大小为 a_1, a_2, \dots, a_n;第二条传送带上的雪球大小为 b_1, b_2, \dots, b_n;第三条传送带上的雪球大小为 c_1, c_2, \dots, c_n。这些传送带是循环的;换句话说,在编号为 n 的元素之后,编号为 1 的元素又接踵而至,我们可以认为编号为 i 的球和编号为 i+n 的球(以及编号为 i+2ni+3n 的球等等)是同一个球。

要生产雪人,需要指定三个参数 i, j, k1 \le i, j, k \le n),表示从每个传送带上的哪个球开始生产。之后,雪人将按如下方式从球上组装起来: * 第一个雪人的头部大小为 a_i,躯干大小为 b_j,腿部大小为 c_k; * 第二个雪人的头部大小为 a_{i+1},躯干大小为 b_{j+1},腿部大小为 c_{k+1}; * 以此类推; * 第 n 个(最后一个)雪人的头部大小为 a_{i+n-1},躯干大小为 b_{j+n-1},腿部大小为 c_{k+n-1}

参数 i, j, k 的选择必须保证所有 n 个雪人都是稳定的。你的任务是计算合适的参数组合的数量。

输入格式

第一行包含一个整数 t1 \le t \le 5000)——测试用例的数量。

每个测试用例包含四行: * 第一行包含一个整数 n1 \le n \le 5000); * 第二行包含 n 个整数 a_1, a_2, \dots, a_n1 \le a_i \le 3n); * 第三行包含 n 个整数 b_1, b_2, \dots, b_n1 \le b_i \le 3n); * 第四行包含 n 个整数 c_1, c_2, \dots, c_n1 \le c_i \le 3n)。

输入数据额外保证: 所有测试用例的 n 的总和不超过 5000

输出格式

对于每个测试用例,输出一个整数——使得所有 n 个雪人都稳定的参数 i, j, k 的组合数量。

样例输入

4
2
1 2
3 4
5 4
3
1 1 1
2 2 2
3 3 3
4
1 2 1 2
3 3 2 2
5 5 5 5
5
1 4 2 3 5
6 4 5 7 6
7 5 8 10 10

样例输出

4
27
0
10

样例说明

在第一个样例中,合适的参数 i, j, k 组合如下: * i=1, j=1, k=2:那么雪人将是 (1,3,4)(2,4,5); * i=1, j=2, k=1:那么雪人将是 (1,4,5)(2,3,4); * i=2, j=1, k=2:那么雪人将是 (2,3,4)(1,4,5); * i=2, j=2, k=1:那么雪人将是 (2,4,5)(1,3,4)

在第二个样例中,所有参数组合都是合适的。

在第三个样例中,对于任何参数组合,都会产生一个头部大小为 2、躯干大小为 2 的雪人,这是不稳定的。

// Problem: CF 2182 C
// Contest: Codeforces - Educational Codeforces Round 186 (Rated for Div. 2)
// URL: https://codeforces.com/contest/2182/problem/C
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define int long long


int fun(vector<int>& a,vector<int>& b){
    int ans=0,n=(int)a.size();
    for(int m=0;m<n;m++){
        int flag=1;
        for(int i=0;i<n;i++){
            if(a[i]>=b[(i+m)%n]){
                flag=0;
                break;
            }
        }
        if(flag) ans++;
    }
    return ans;
}

void solve(){
    int n;
    cin>>n;
    vector<int> a(n),b(n),c(n);
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];
    for(int i=0;i<n;i++) cin>>c[i];

    //cout<<fun(a,b)<<"  "<<fun(b,c)<<endl;
    cout<<(int)n*fun(a,b)*fun(b,c)<<endl;

    return ;
}


signed main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}