QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#848651#9922. Mah-jongisWFnoyaWA 1434ms8436kbC++232.8kb2025-01-09 00:45:232025-01-09 00:45:23

Judging History

你现在查看的是最新测评结果

  • [2025-01-09 00:45:23]
  • 评测
  • 测评结果:WA
  • 用时:1434ms
  • 内存:8436kb
  • [2025-01-09 00:45:23]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=729;
typedef long long ll;
typedef pair<ll,ll> PII;
int n,m,k;
ll a[N],c[N],tg[N],dep[N];
array<int,8> b[1010];
// char s[N];
vector<int> e[N];
int now[10],now2[10];
array<int,8> s[N];
int p[N];
void dfs(int x){
    if(x==6){
        int state=0;
        for(int i=5;i>=0;i--) state=state*3+c[i];
        for(int i=0;i<6;i++){
            for(int u=1;u<=c[i];u++)
            {
            b[state][i]++;
            b[state][i+1]++;
            b[state][i+2]++;
            }
        }
        // tg[state]=0;
        // for(int i=7;i>=0;i--){
        //     tg[state]=tg[state]*3+(b[state][i]%3);
        // }
        // cout<<state<<endl;
        // able.insert(state);
    }else{
        for(int i=0;i<3;i++){
            c[x]=i;
            dfs(x+1);

        }
    }
}


int query(array<int,8> ar,int state){
    if(s[e[state].back()]>=ar) return e[state].size()-1;
    int l=0,r=e[state].size()-1;
    while(l<r){
        int mid=l+r+1>>1;
        if(s[e[state][mid]]>=ar) l=mid;
        else r=mid-1;
    }
    // if(l>0) cout<<"--"<<l<<endl;
    return l;
}

void __(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        a[i]--;
    }
    array<int,8> ar;
    for(int i=0;i<8;i++) ar[i]=0;
    s[0]=ar;
    memset(now,0,sizeof now);

    for(int i=1;i<=n;i++){
        ar[a[i]]++;
        s[i]=ar;
        // cout<<s[i]<<" ";
    }
    for(int i=0;i<=M*10;i++){
         e[i].clear();
         array<int,8> res;
         for(int j=0;j<8;j++) res[j]=1e9;
         s[n+1]=res;
         e[i].push_back(n+1);
    }
    // cout<<endl;
    ll ans=0;
    for(int i=0;i<M;i++) p[i]=0;
    for(int i=n;i>=0;i--){
        for(int j=0;j<M;j++){
            array<int,8> nw;
            int t=j;
            for(int k=0;k<8;k++){
                nw[k]=(s[i][k]+b[j][k]%3)%3;
                t/=3;
            }
            
            int state=0;
            for(int k=7;k>=0;k--) state=state*3+nw[k];
            // if(j==1){
            //     for(int k=0;k<8;k++) cout<<s[i][k]<<" ";
            //     cout<<endl;
            //     for(int k=0;k<8;k++) cout<<nw[k]<<" ";
            //     cout<<endl;
            //     cout<<endl;
            // }
            array<int,8> least;
            for(int k=0;k<8;k++) least[k]=s[i][k]+b[j][k];
            ll tt=query(least,state);
            ans+=tt;
            // if(tt>0) cout<<i<<" "<<j<<" "<<tt<<endl;
        }
        int state=0;
        for(int j=7;j>=0;j--) state=state*3+s[i][j]%3;
        e[state].push_back(i);
    }
    printf("%lld\n",ans);
}
//2*1 1*2
//2 2 2

int main(){
    
    dfs(0);
    // cout<<able.size()<<endl;
    int _=1;
    cin>>_;
    while(_--){
        __();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 6240kb

input:

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

output:

2
5
1
3
2

result:

ok 5 number(s): "2 5 1 3 2"

Test #2:

score: -100
Wrong Answer
time: 1434ms
memory: 8436kb

input:

100
992
8 1 8 1 2 3 6 6 1 3 1 8 7 7 4 7 7 1 6 6 4 8 3 7 3 5 1 4 4 7 5 7 5 7 4 3 7 5 2 8 7 1 6 3 6 2 4 3 2 3 1 6 3 1 3 2 6 6 7 4 6 1 1 4 6 4 7 7 8 5 6 4 1 5 4 8 2 4 4 2 1 3 5 7 6 8 3 7 6 6 5 6 4 2 5 4 3 7 3 5 5 3 3 2 7 8 2 7 2 4 4 3 4 1 1 3 5 5 4 6 3 3 3 2 6 1 2 6 4 8 8 6 6 8 7 3 1 1 8 8 7 2 5 6 3 5 ...

output:

53199
63610
5515
2223
245098
6693
11897
47620
439459
1227355
18280
141843
303882
967724
220810
1422
89694
143500
71577
1
80804
0
41058
17671
88385
0
102610
164722
14
516830
60353
199568
27396
63461
30143
12196
2292
4925
76565
913884
176144
25166
742
90163
1313432
1702
12516
159136
12567
24328
26351
...

result:

wrong answer 1st numbers differ - expected: '51699', found: '53199'