QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#856946 | #9922. Mah-jong | zhuge0 | WA | 1703ms | 5704kb | C++20 | 2.4kb | 2025-01-14 21:10:18 | 2025-01-14 21:10:19 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const long long mod = 20020219, inf = 1e18;
ll n, m, k, q,l,r,ans=0,all=0;
vector<int> mmp[50005]{};
deque<ll> que[10]{};
ll arr[200005]{};
int num[19]{},pw[10]{};
vector<int> pre(9),suf(9),temp(9);
void work()
{
pw[0]=1;
for(int i=1;i<=9;i++)
{
pw[i]=pw[i-1]*3;
}
}
void dfs(int depth,int st,ll pos)
{
if(depth==7)
{ auto iter=lower_bound(mmp[st].begin(),mmp[st].end(),pos);
//if(pos!=inf) iter--;
//cout<<st<<'a';
//for(auto i:mmp[st]) cout<<i<<'b';
//cout<<'\n';
ans+=max(0,(int)(iter-mmp[st].begin()));
return ;
}
//cout<<st;
//cout<<depth<<' ';
for(int i=0;i<=min({2,pre[depth],pre[depth+1],pre[depth+2]});i++)
{
int nst=st;
if(i)
{
if(pre[depth]%3>=i) nst-=i*pw[depth];
else nst+=(3-i)*pw[depth];
if(pre[depth+1]%3>=i) nst-=i*pw[depth+1];
else nst+=(3-i)*pw[depth+1];
if(pre[depth+2]%3>=i) nst-=i*pw[depth+2];
else nst+=(3-i)*pw[depth+2];
}
//cout<<nst<<'\n';
pre[depth]-=i,pre[depth+1]-=i,pre[depth+2]-=i;
num[depth]+=i,num[depth+1]+=i;num[depth+2]+=i;
ll npos=inf;
if(i)
npos=min({npos,que[depth][num[depth]-1],que[depth+1][num[depth+1]-1],que[depth+2][num[depth+2]-1]});
dfs(depth+1,nst,npos);
pre[depth]+=i,pre[depth+1]+=i,pre[depth+2]+=i;
num[depth]-=i,num[depth+1]-=i;num[depth+2]-=i;
}
}
void solve() {
for(int i=0;i<=50000;i++) mmp[i].clear();
for(int i=1;i<=8;i++) que[i].clear();
cin>>n;
all=0;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
}
for(int i=0;i<9;i++) pre[i]=0;
ans=0;
mmp[0].push_back(0);
int state=0;
for(int i=1;i<=n;i++)
{ // cout<<arr[i]<<'a';
que[arr[i]].push_front(i);
while(que[arr[i]].size()>=6) que[arr[i]].pop_back();
pre[arr[i]]++;
if(pre[arr[i]]%3==0) state-=2*pw[arr[i]];
else state+=pw[arr[i]];
all=state;
dfs(1,all,inf);
mmp[state].push_back(i);
}
cout<<ans<<'\n';
}
int main() {
//ios::sync_with_stdio(false);
//cin.tie(0);
work();
int T = 1;
cin >> T;
while(T--) {
solve();
}
return 0;
}
/*
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5704kb
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: 1703ms
memory: 4224kb
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:
53465 63526 5501 2274 245240 6739 11967 47575 439883 1228058 18247 141832 303715 968447 221206 1566 89747 143889 71614 1 80878 0 41181 17543 88739 0 102735 164996 3 516621 60396 200151 27428 63713 30152 12164 2309 4861 76551 913807 176138 25325 721 90141 1314193 1632 12766 159305 12275 24311 26381 1...
result:
wrong answer 1st numbers differ - expected: '51699', found: '53465'