QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#838363 | #9922. Mah-jong | fryan | TL | 1ms | 3744kb | C++20 | 1.6kb | 2024-12-31 07:04:29 | 2024-12-31 07:04:30 |
Judging History
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 ...