QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#850354#9922. Mah-jongCrysflyAC ✓1811ms204172kbC++144.3kb2025-01-10 02:01:562025-01-10 02:01:56

Judging History

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

  • [2025-01-10 02:01:56]
  • 评测
  • 测评结果:AC
  • 用时:1811ms
  • 内存:204172kb
  • [2025-01-10 02:01:56]
  • 提交

answer

// what is matter? never mind. 
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2")
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define ll long long
//#define ull unsigned long long
//#define int long long
#define SZ(x) ((int)((x).size()))
#define ALL(x) (x).begin(),(x).end()
using namespace std;
inline int read()
{
	char c=getchar();int x=0;bool f=0;
	for(;!isdigit(c);c=getchar())f^=!(c^45);
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return f?-x:x;
}

#define mod 998244353
struct modint{
	unsigned int x;
	modint(int o=0){x=o;}
	modint &operator = (int o){return x=o,*this;}
	modint &operator +=(modint o){return x=x+o.x>=mod?x+o.x-mod:x+o.x,*this;}
	modint &operator -=(modint o){return x=x<o.x?x-o.x+mod:x-o.x,*this;}
	modint &operator *=(modint o){return x=1ll*x*o.x%mod,*this;}
	modint &operator ^=(int b){
		modint a=*this,c=1;
		for(;b;b>>=1,a*=a)if(b&1)c*=a;
		return x=c.x,*this;
	}
	modint &operator /=(modint o){return *this *=o^=mod-2;}
	friend modint operator +(modint a,modint b){return a+=b;}
	friend modint operator -(modint a,modint b){return a-=b;}
	friend modint operator *(modint a,modint b){return a*=b;}
	friend modint operator /(modint a,modint b){return a/=b;}
	friend modint operator ^(modint a,int b){return a^=b;}
	friend bool operator ==(modint a,modint b){return a.x==b.x;}
	friend bool operator !=(modint a,modint b){return a.x!=b.x;}
	bool operator ! () {return !x;}
	modint operator - () {return x?mod-x:0;}
	bool operator <(const modint&b)const{return x<b.x;}
};
inline modint qpow(modint x,int y){return x^y;}

vector<modint> fac,ifac,iv;
inline void initC(int n)
{
	if(iv.empty())fac=ifac=iv=vector<modint>(2,1);
	int m=iv.size(); ++n;
	if(m>=n)return;
	iv.resize(n),fac.resize(n),ifac.resize(n);
	For(i,m,n-1){
		iv[i]=iv[mod%i]*(mod-mod/i);
		fac[i]=fac[i-1]*i,ifac[i]=ifac[i-1]*iv[i];
	}
}
inline modint C(int n,int m){
	if(m<0||n<m)return 0;
	return initC(n),fac[n]*ifac[m]*ifac[n-m];
}
inline modint sign(int n){return (n&1)?(mod-1):(1);}

#define fi first
#define se second
#define pb push_back
#define mkp make_pair
typedef pair<int,int>pii;
typedef vector<int>vi;

#define maxn 1000005
#define inf 0x3f3f3f3f

int n,a[maxn],cnt[maxn][9];
int pw[233];
deque<int>q[10005];

int now[maxn];
vi qwq[10050];
int get(vi o){
	int sta=0;
	For(j,1,8) sta=sta*3+(o[j-1]%3);
	return sta;
}
vector<int>qq;

void chk(){
	int sta=0;
	For(j,1,8) sta=sta*3+(now[j]%3);
	vi os;
	For(j,1,8) os.pb(now[j]);
	qwq[sta]=os;
	qq.pb(sta);
}

void dfs(int u){
	if(u==7){
		chk();
		return;
	}
	For(i,0,2){
		For(j,0,2)now[u+j]+=i;
		dfs(u+1);
		For(j,0,2)now[u+j]-=i;
	}
}
void prew(){
	dfs(1);
}
int lst[maxn];
ll res[maxn];
int sb[6666][6666];
int nxt[maxn],buc[maxn],ps[maxn];


int cc[maxn];

void work()
{
	n=read();
	For(i,1,n)a[i]=read();
	For(i,1,n){
		For(j,1,8)cnt[i][j]=cnt[i-1][j];
		cnt[i][a[i]]++;
	}
	For(i,0,pw[8]-1) buc[i]=n+1;
	Rep(i,n,0){
		int S=0;
		For(j,1,8) S=S*3+cnt[i][j]%3;
	//	cout<<"???? "<<i<<' '<<S<<endl;
		ps[i]=S;
		nxt[i]=buc[S],buc[S]=i;
	}
	ll sum=0;
	
	for(auto ss:qq){
		For(i,1,n){
		//	cout<<"i: "<<i<<" "<<ps[i]<<"\n";
			int t=sb[ps[i]][ss];
		//	cout<<"t "<<t<<" "<<buc[t]<<" "<<now[t]<<" "<<cc[t]<<endl;
			if(buc[t]==n+1) continue;
			if(now[t]==inf) now[t]=buc[t],cc[t]=0;
			while(1){
				if(now[t]>=i) break;
		//		cout<<"chk "<<i<<" "<<now[t]<<"\n";
				bool ok=1;
				For(k,1,8)
					if(cnt[i][k]-cnt[now[t]][k]<qwq[ss][k-1]){
						ok=0;
						break;
					}
		//		cout<<"QWQ "<<ok<<"\n";
				if(!ok) break;
				now[t]=nxt[now[t]],++cc[t];
		//		cout<<"NOW "<<now[t]<<' '<<cc[t]<<"\n";
			}
			sum+=cc[t];
		//	cout<<"add "<<cc[t]<<"\n";
		}
		For(i,0,n){
			int s=ps[i];
			now[s]=inf,cc[s]=0;
		}
	}
	cout<<sum<<"\n";
}

signed main()
{
	pw[0]=1;
	For(i,1,8) pw[i]=pw[i-1]*3;
	//cout<<"PW "<<pw[8]<<endl;
	prew();
	For(i,0,pw[8]-1) for(int j:qq) {
		int s=0;
		For(k,0,7){
			int t=(i/pw[7-k]%3)-(j/pw[7-k]%3)+3;
			s=s*3+(t%3);
		}
		sb[i][j]=s;
	}
	
	For(i,0,pw[8]-1) now[i]=inf,cc[i]=0;
//	cout<<pw[8]<<endl;
//	exit(0);
	int T=read();
	while(T--)work();
	return 0;
}
/*

*/

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 173ms
memory: 195864kb

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: 0
Accepted
time: 1177ms
memory: 196012kb

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:

51699
61486
5146
1960
241675
6274
11224
46170
435241
1219228
17198
139542
299436
960439
217729
1174
87401
141087
69813
1
78895
0
39510
16757
86551
0
100302
161956
3
512157
58619
196941
26116
61635
28879
11511
2061
4394
74620
907389
172780
23952
524
87857
1305332
1413
11784
156368
11746
23217
25189
9...

result:

ok 100 numbers

Test #3:

score: 0
Accepted
time: 1811ms
memory: 198004kb

input:

1
100000
7 6 3 7 1 2 5 2 4 5 3 2 6 2 2 2 5 6 5 8 6 2 1 8 2 2 1 1 4 8 2 6 4 1 8 6 6 7 8 4 4 5 4 7 8 6 2 3 3 7 5 7 1 1 3 5 2 8 5 6 3 6 2 3 3 8 4 5 7 8 1 5 6 1 3 4 5 7 1 5 4 4 4 6 6 4 2 3 5 2 7 3 5 8 7 1 5 4 5 4 1 5 8 7 2 2 8 2 4 3 5 7 6 6 1 6 6 3 1 1 3 1 7 8 1 7 3 7 8 3 6 3 5 7 5 1 8 7 4 7 5 4 8 1 3 4...

output:

555222305

result:

ok 1 number(s): "555222305"

Test #4:

score: 0
Accepted
time: 1480ms
memory: 198012kb

input:

20
4413
3 6 4 7 7 2 2 7 8 8 4 1 8 6 6 4 7 3 4 3 2 4 2 3 8 2 2 8 4 2 2 8 6 3 3 6 2 3 3 1 7 3 4 2 8 6 3 2 7 6 2 1 5 7 6 8 4 2 1 8 5 4 1 1 2 4 7 4 5 8 2 1 7 1 1 2 2 2 4 6 7 5 4 7 2 6 7 4 8 6 5 8 8 1 5 1 7 8 1 2 2 8 5 1 8 2 4 2 6 1 3 2 1 7 4 4 7 8 5 8 7 4 6 7 4 1 7 8 6 8 7 7 8 4 6 8 3 6 4 8 2 3 7 5 4 4 ...

output:

1069083
436006
1777187
5525353
859904
20447
1921397
11322
113761
632458
911481
140310
5527193
391225
3870234
1392311
5521780
767038
377958
251269

result:

ok 20 numbers

Test #5:

score: 0
Accepted
time: 1800ms
memory: 195944kb

input:

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

output:

142582
130392
26184001
1706964
29530837
7819026
1889862
2047254
4622629
9958898

result:

ok 10 numbers

Test #6:

score: 0
Accepted
time: 450ms
memory: 198024kb

input:

100
699
3 5 4 4 2 2 2 4 4 5 4 4 4 2 3 5 4 3 3 4 2 4 5 1 2 2 1 3 4 2 3 5 2 4 4 4 4 4 2 2 2 3 2 4 4 3 5 1 1 1 1 1 5 3 2 2 2 4 1 2 4 5 4 3 4 4 3 1 2 1 2 2 5 2 4 2 3 2 3 1 2 3 1 3 1 4 1 1 2 3 4 4 4 5 5 1 1 1 4 2 4 5 2 4 4 2 2 1 4 3 2 4 2 1 3 3 1 1 1 2 3 2 3 3 4 5 3 1 4 3 2 3 4 1 2 3 1 5 4 1 3 1 4 1 1 4 ...

output:

26614
93607
15542
185945
9610
336083
27587
5973
15452
428708
697
64714
259
21
828
113476
31140
105458
80
23536
5525
1159
12042
40221
3480
19417
67593
2269
413557
158230
35791
252920
14694
17018
49089
181
5249
132040
80726
799827
70851
176451
195473
5082
17942
474031
966
2197
7165
361668
165329
13748...

result:

ok 100 numbers

Test #7:

score: 0
Accepted
time: 385ms
memory: 195980kb

input:

20
6438
6 4 6 2 2 3 6 3 3 6 3 5 2 3 5 3 4 4 6 6 5 4 4 4 6 5 2 3 6 6 6 2 4 2 6 3 2 6 4 4 5 5 5 5 2 3 5 6 3 5 2 3 2 3 6 2 6 4 5 6 6 3 6 2 4 6 6 2 2 5 2 5 3 2 2 5 3 5 2 5 4 4 6 5 6 5 3 2 2 6 6 4 4 6 6 5 3 5 2 3 6 4 6 2 6 2 4 2 5 2 3 2 6 4 3 6 2 2 6 5 2 2 4 6 4 2 2 6 6 2 5 5 6 3 5 4 2 4 6 5 5 2 5 2 5 2 ...

output:

2295109
129235
937429
180801
809871
174359
1198354
743354
795518
130580
84599
3763780
1614768
2235523
4161333
5544144
349912
421552
4172118
5545527

result:

ok 20 numbers

Test #8:

score: 0
Accepted
time: 363ms
memory: 195984kb

input:

10
26316
4 3 2 6 6 5 6 4 2 6 3 6 3 6 6 4 5 2 6 5 4 4 5 4 5 3 3 4 3 6 3 2 2 2 2 2 4 2 5 3 5 4 3 6 5 5 2 4 4 4 3 5 3 3 3 5 3 5 3 4 3 6 6 3 2 4 5 4 4 3 3 6 5 6 2 2 2 3 6 2 3 2 3 2 4 5 3 5 3 2 6 2 2 2 6 4 6 6 4 6 6 6 5 2 4 6 3 5 2 3 4 3 5 5 3 3 5 2 2 4 6 2 5 6 4 6 3 5 3 3 3 2 2 3 4 5 2 5 2 2 5 5 3 3 2 5...

output:

38450451
2276831
7270246
704368
5850869
468608
9764821
13710579
4255399
96369

result:

ok 10 numbers

Test #9:

score: 0
Accepted
time: 359ms
memory: 202292kb

input:

1
100000
7 8 8 5 4 7 7 4 4 7 6 8 5 8 8 6 6 4 8 8 6 8 7 8 4 4 7 4 8 7 4 6 6 5 5 6 8 5 6 4 5 6 6 4 4 7 7 5 4 5 8 4 7 5 7 7 8 8 7 8 6 4 8 5 7 8 5 4 4 4 7 7 4 5 7 4 4 6 6 7 6 6 7 7 4 4 4 6 6 4 6 8 5 6 6 5 7 8 5 7 5 7 6 4 6 6 4 7 5 8 6 7 4 6 8 7 4 7 7 6 6 8 5 4 6 7 5 4 4 4 6 6 6 5 4 6 4 6 8 6 5 5 5 5 7 5...

output:

555459907

result:

ok 1 number(s): "555459907"

Test #10:

score: 0
Accepted
time: 317ms
memory: 195988kb

input:

100
1250
5 6 6 6 5 6 6 5 7 6 6 6 5 7 5 5 6 6 7 5 5 5 5 5 5 7 5 5 6 5 5 5 6 7 5 6 5 7 7 7 7 5 5 7 6 5 7 7 5 6 6 5 5 6 6 7 5 6 6 6 6 6 5 7 5 7 7 5 5 6 5 6 6 7 7 7 7 7 7 5 5 6 6 5 5 6 6 6 5 5 5 5 7 6 6 7 7 5 5 7 5 7 5 7 7 6 6 5 7 6 5 6 5 7 6 5 6 7 6 6 6 6 6 6 7 5 6 7 6 7 7 5 7 7 5 5 6 6 5 5 7 6 6 6 6 7...

output:

86841
34629
45
25861
17828
47611
4229
10999
3019
7915
174644
150587
1388747
931
8024
1143
15819
282708
204457
30072
5134
116143
519353
149357
40372
2405
259501
15816
5574
104552
24707
223938
415556
4003
3687
43
0
69380
19410
121396
5303
100311
811
18848
81468
2
5204
635
107048
152629
39533
13647
168...

result:

ok 100 numbers

Test #11:

score: 0
Accepted
time: 279ms
memory: 197912kb

input:

20
4135
6 8 6 7 7 7 7 8 7 6 6 8 6 7 8 7 7 8 7 8 7 8 6 6 7 8 7 8 6 8 6 6 6 7 7 6 6 8 6 6 8 7 7 8 6 7 8 7 8 6 6 6 8 8 7 7 8 6 6 6 7 7 7 7 7 8 7 6 7 6 7 6 8 8 6 7 6 8 7 6 7 6 6 7 7 6 8 7 8 7 6 7 8 7 6 8 6 6 8 6 6 6 7 6 8 8 8 6 7 7 6 8 7 6 7 8 8 6 8 6 6 8 7 6 6 7 6 8 7 8 6 8 7 6 6 8 6 6 6 8 6 6 8 7 7 8 ...

output:

950096
2194477
5554824
81254
5553178
1573274
194238
668
1982043
58228
1291767
5557012
58027
5225
1463164
4280005
609999
1655471
62184
2077822

result:

ok 20 numbers

Test #12:

score: 0
Accepted
time: 307ms
memory: 195924kb

input:

10
15064
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5...

output:

37818172
46634876
15400026
2035255
27812
69660
92555465
15265745
4010655
42669333

result:

ok 10 numbers

Test #13:

score: 0
Accepted
time: 290ms
memory: 198028kb

input:

1
100000
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8...

output:

1666650000

result:

ok 1 number(s): "1666650000"

Test #14:

score: 0
Accepted
time: 177ms
memory: 194104kb

input:

4
1
5
2
5 6
3
7 6 5
3
7 7 7

output:

0
0
1
1

result:

ok 4 number(s): "0 0 1 1"

Test #15:

score: 0
Accepted
time: 302ms
memory: 204172kb

input:

1
100000
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5...

output:

1666650000

result:

ok 1 number(s): "1666650000"

Test #16:

score: 0
Accepted
time: 261ms
memory: 195920kb

input:

10
1686
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 ...

output:

473485
16665000
16665000
2028272
16665000
16665000
16665000
1238058
9559650
11134350

result:

ok 10 numbers

Test #17:

score: 0
Accepted
time: 303ms
memory: 202160kb

input:

1
100000
2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3...

output:

885341676

result:

ok 1 number(s): "885341676"

Test #18:

score: 0
Accepted
time: 254ms
memory: 196148kb

input:

10
3465
2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 ...

output:

1038578
2938
813044
30782
8661003
8661003
5290235
8661003
5108993
6641544

result:

ok 10 numbers

Extra Test:

score: 0
Extra Test Passed