QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#838363#9922. Mah-jongfryanTL 1ms3744kbC++201.6kb2024-12-31 07:04:292024-12-31 07:04:30

Judging History

This is the latest submission verdict.

  • [2024-12-31 07:04:30]
  • Judged
  • Verdict: TL
  • Time: 1ms
  • Memory: 3744kb
  • [2024-12-31 07:04:29]
  • Submitted

answer

#pragma GCC optimize("O3,unroll-loops")

#include "bits/stdc++.h"
using namespace std;
#define all(x) begin(x), end(x)
#define sz(x) (int) (x).size()
#define int long long

const int p3[] {1,3,9,27,81,243,729};
const int mxn = 1e5+5;

inline int f(int m, int i) {return (m/p3[i])%3;}

vector<array<int,8>> ok;

void gen_mk() {
	for (int mk=0; mk<p3[6]; mk++) {
		array<int,8> av = {0,0,0,0,0,0,0,0};
		for (int i=0; i<6; i++) {
			int v = f(mk,i);
			av[i] += v;
			av[i+1] += v;
			av[i+2] += v;
		}
		ok.push_back(av);
	}
}

int n,a[mxn],c[8],cnt;

void solve1() {
	for (int i=0; i<n; i++) {
		memset(c,0,sizeof(c));
		for (int j=i+2; j<n; j+=3) {
			c[a[j-2]]++;
			c[a[j-1]]++;
			c[a[j-0]]++;
			for (auto aa : ok) {
				int ok = 1;
				for (int k=0; k<8; k++) {
					if (aa[k] > c[k] || (aa[k]-c[k])%3!=0) {
						ok = 0; break;
					}
				}
				if (ok) {
					cnt++;
					break;
				}
			}
		}
	}
	cout<<cnt<<"\n";
}

int n0,n1,n2;
int amt[3][3][3];

void solve2() {
	memset(amt,0,sizeof(amt));
	n0 = n1 = n2 = 0;
	amt[0][0][0]++;
	for (int i=0; i<n; i++) {
		if (a[i]==0) n0++; n0 %= 3;
		if (a[i]==1) n1++; n1 %= 3;
		if (a[i]==2) n2++; n2 %= 3;
		for (int s=0; s<3; s++) {
			int a0=(n0+s)%3;
			int a1=(n1+s)%3;
			int a2=(n2+s)%3;
			cnt+=amt[a0][a1][a2];
		}
		amt[n0][n1][n2]++;
	}
	cout<<cnt<<"\n";
}

void solve() {
	cin>>n; cnt = 0;
	for (int i=0; i<n; i++) {cin>>a[i]; --a[i];}
	if (n <= 1e3) solve1();
	else solve2();
	
}

signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
	gen_mk();
	int t; cin>>t;
	while (t--) solve();
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3744kb

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
Time Limit Exceeded

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:


result: