QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#65989 | #1965. Trio | dlg# | AC ✓ | 739ms | 20892kb | C++17 | 3.2kb | 2022-12-05 12:17:39 | 2022-12-05 12:17:43 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define sp ' '
#define endl '\n'
#define loop(i, l, r) for(int i=(int)(l); i<=(int)(r); i++)
#define rloop(i,l,r) for(int i=(int)(l); i>=(int)r; i--)
#define all(x) (x).begin(), (x).end()
#define bit(x,y) ((x>>y)&1)
using Arr = array<int,4>;
ostream& operator<<(ostream &os, Arr x){
os << "[";
loop(i,0,3) os << x[i] << sp;
os << "]";
return os;
}
const int STAR = 0;
const int N = 4477456;
int n;
vector<int> a;
int maxCode = 10; // 0->9
int code[10][10];
int f[N]; // 46^4
Arr conv3(int x){
Arr ret;
rloop(i,3,0){
ret[i] = x%3;
x/=3;
}
return ret;
}
Arr conv(int x){
Arr ret;
rloop(i,3,0){
ret[i] = x%10;
x/=10;
}
// cout << x << sp << ret << endl;
return ret;
}
int encode(const Arr& fx){
int ret = 0;
loop(i,0,3){
ret*=maxCode;
ret+=fx[i];
}
// if (ret>=N){
// loop(i,0,3) cout << fx[i] << sp;
// cout << endl;
// exit(0);
// }
return ret;
}
int calc(int x, int y){
auto fx = conv(x);
auto fy = conv(y);
loop(i,0,3) if (fx[i]>fy[i]) swap(fx[i],fy[i]); // must be here
int mustOn = 0;
loop(i,0,3) if (fx[i]==fy[i]) mustOn^=(1<<i);
int nStar = 4 - __builtin_popcount(mustOn);
Arr enc;
int ret = 0;
loop(mask,0,(1<<4)-1){
if ((mask&mustOn)!=mustOn) continue;
int curStar = 0;
loop(i,0,3){
if (bit(mustOn,i)){
enc[i] = fx[i];
}
else{
if (bit(mask,i)) enc[i] = code[fx[i]][fy[i]];
else {
enc[i] = STAR;
curStar++;
}
}
}
auto rec = f[encode(enc)];
// cout << enc << sp << curStar << sp << nStar << sp << rec << endl;
if (curStar%2==nStar%2) ret+= rec;
else ret-=rec;
}
return ret;
}
void prep(){
loop(i,1,9){
loop(j,i+1,9){
code[i][j] = maxCode++;
}
}
}
void back(int pos, const Arr& fx, const Arr& mask, Arr& enc){
if (pos==4){
f[encode(enc)]++;
return;
}
if (mask[pos]==0){
enc[pos] = fx[pos];
back(pos+1,fx,mask,enc);
}
else if (mask[pos]==1){
loop(i,1,9){
if (i==fx[pos]) continue;
auto [x,y] = minmax({i,fx[pos]});
enc[pos] = code[x][y];
back(pos+1,fx,mask,enc);
}
}
else{
enc[pos] = STAR;
back(pos+1,fx,mask,enc);
}
}
void addToSet(int x){
Arr fx = conv(x);
Arr enc;
loop(_mask,0,80){
back(0,fx,conv3(_mask),enc);
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
#ifdef LOCAL
freopen("1test.inp","r",stdin);
#endif
cin >> n;
a.assign(n,0);
for(auto &it:a) cin >> it;
prep();
for(auto it:a){
addToSet(it);
}
long long ans = 0;
loop(i,0,n-1){
loop(j,i+1,n-1){
ans+=calc(a[i],a[j]);
}
}
cout << ans/3 << endl;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 4ms
memory: 14644kb
input:
4 1234 2345 3456 4567
output:
4
result:
ok single line: '4'
Test #2:
score: 0
Accepted
time: 3ms
memory: 17144kb
input:
9 1299 2399 3499 4599 5699 6799 7899 8999 9199
output:
84
result:
ok single line: '84'
Test #3:
score: 0
Accepted
time: 7ms
memory: 16852kb
input:
9 1239 2349 3459 4569 5679 6789 7899 8919 9129
output:
84
result:
ok single line: '84'
Test #4:
score: 0
Accepted
time: 3ms
memory: 15736kb
input:
9 1999 2999 3999 4999 5999 6999 7999 8999 9999
output:
84
result:
ok single line: '84'
Test #5:
score: 0
Accepted
time: 0ms
memory: 16880kb
input:
9 1234 2345 3456 4567 5678 6789 7891 8912 9123
output:
84
result:
ok single line: '84'
Test #6:
score: 0
Accepted
time: 3ms
memory: 16568kb
input:
18 1211 2311 3411 4511 5611 6711 7811 8911 9111 1222 2322 3422 4522 5622 6722 7822 8922 9122
output:
168
result:
ok single line: '168'
Test #7:
score: 0
Accepted
time: 5ms
memory: 16756kb
input:
17 1211 2311 3411 4511 5611 6711 7811 8911 9111 1231 2341 3451 4561 5671 6781 7891 9121
output:
336
result:
ok single line: '336'
Test #8:
score: 0
Accepted
time: 17ms
memory: 17196kb
input:
81 1211 2311 3411 4511 5611 6711 7811 8911 9111 1222 2322 3422 4522 5622 6722 7822 8922 9122 1233 2333 3433 4533 5633 6733 7833 8933 9133 1244 2344 3444 4544 5644 6744 7844 8944 9144 1255 2355 3455 4555 5655 6755 7855 8955 9155 1266 2366 3466 4566 5666 6766 7866 8966 9166 1277 2377 3477 4577 5677 67...
output:
43848
result:
ok single line: '43848'
Test #9:
score: 0
Accepted
time: 3ms
memory: 14656kb
input:
17 3433 3443 3444 3434 3333 3334 3343 3344 4333 4343 4334 4344 4433 4434 4444 4443 5678
output:
8
result:
ok single line: '8'
Test #10:
score: 0
Accepted
time: 1ms
memory: 14920kb
input:
21 1111 1113 1131 1133 1222 1312 1321 1323 1332 2122 2322 3112 3121 3123 3132 3222 3311 3313 3331 3333 4567
output:
28
result:
ok single line: '28'
Test #11:
score: 0
Accepted
time: 106ms
memory: 20884kb
input:
500 5225 6396 8284 5729 9576 3159 1831 9314 5674 4164 5166 5513 1765 8333 9921 7856 3789 6129 3882 1462 1322 5932 6859 1794 6426 8336 3265 2938 4487 7143 3653 4218 7814 3521 3349 5331 3486 7264 5385 8724 7421 5736 9875 9432 1588 5758 4319 9649 4224 6841 9639 1774 1551 9761 1944 3979 7682 5599 4289 7...
output:
5075198
result:
ok single line: '5075198'
Test #12:
score: 0
Accepted
time: 117ms
memory: 20800kb
input:
500 5114 6269 8111 5597 9326 2942 1773 8955 5577 4165 4969 5388 1691 8159 9766 7686 3789 5829 3855 1431 1283 5781 6655 1762 6292 8183 3156 2837 4417 6868 3591 4189 7629 3451 3241 5228 3414 6881 5367 8384 7166 5612 9755 9147 1526 5633 4239 9385 4191 6575 9345 1743 1447 9623 1884 3978 7438 5517 4231 7...
output:
5084517
result:
ok single line: '5084517'
Test #13:
score: 0
Accepted
time: 287ms
memory: 20820kb
input:
1000 5643 3673 9624 6633 5355 6586 9219 8148 9533 7777 2984 9365 5932 4617 5553 6716 2312 3599 2349 1216 9483 3558 3846 1353 3675 4621 7556 1842 9698 3958 2178 2595 7377 8579 1952 7632 1999 8277 3295 9384 7845 3467 5546 5266 5962 8118 8261 5395 2597 8256 7546 1343 1248 8936 1394 2478 9247 3392 9397 ...
output:
40686935
result:
ok single line: '40686935'
Test #14:
score: 0
Accepted
time: 319ms
memory: 20800kb
input:
1000 5659 3899 9639 6658 5344 6624 9339 8138 9619 7818 3314 9459 5967 4695 5557 6692 2422 3792 2451 1228 9568 3755 4149 1383 3915 4696 7571 1875 9687 4223 2324 2669 7413 8624 2158 7668 2244 8275 3467 9487 7874 3624 5555 5258 5982 8114 8255 5376 2674 8242 7558 1382 1254 9152 1443 2535 9355 3556 9489 ...
output:
40589947
result:
ok single line: '40589947'
Test #15:
score: 0
Accepted
time: 277ms
memory: 20804kb
input:
1000 5565 3799 9621 6574 5284 6539 9171 8136 9555 7837 3234 9315 5885 4634 5482 6647 2465 3686 2491 1242 9468 3622 3897 1433 3816 4637 7538 2117 9689 3972 2415 2664 7381 8532 2235 7657 2317 8247 3414 9349 7865 3495 5481 5196 5899 8128 8217 5322 2678 8194 7533 1425 1279 8812 1485 2551 9188 3457 9351 ...
output:
40686926
result:
ok single line: '40686926'
Test #16:
score: 0
Accepted
time: 707ms
memory: 20852kb
input:
2000 5699 2343 5288 9952 3128 8562 7628 4456 8712 4359 8217 8242 3426 2742 7267 9136 9277 6815 1671 1181 9432 9411 7289 5719 2345 6542 4235 8919 8122 9981 1622 1782 4164 4668 1537 4267 1562 4532 6391 7882 4371 2196 8633 6411 6452 6991 6275 8334 8679 6972 7141 9822 1191 4845 7199 8737 8495 7826 7456 ...
output:
326702860
result:
ok single line: '326702860'
Test #17:
score: 0
Accepted
time: 709ms
memory: 20756kb
input:
2000 5661 2399 5315 9953 3236 8494 7548 4468 8647 4383 8171 8184 3496 2848 7227 9141 9287 6766 1725 1193 9432 9425 7256 5682 2414 6525 4255 8886 7988 9982 1648 1784 4174 4677 1555 4313 1585 4543 6337 7848 4398 2268 8568 6343 6413 6977 6237 8253 8622 6958 7121 9838 1226 4842 7182 8685 8443 7759 7378 ...
output:
326499935
result:
ok single line: '326499935'
Test #18:
score: 0
Accepted
time: 713ms
memory: 20752kb
input:
2000 5794 2444 5427 9941 3263 8588 7712 4641 8699 4546 8321 8337 3569 2844 7368 9155 9276 6875 1812 1168 9429 9413 7394 5816 2445 6663 4444 8919 8232 9982 1735 1883 4362 4851 1667 4476 1691 4716 6515 7982 4564 2325 8656 6519 6582 7191 6397 8421 8688 7168 7255 9825 1177 5113 7332 8731 8543 7886 7527 ...
output:
326783211
result:
ok single line: '326783211'
Test #19:
score: 0
Accepted
time: 739ms
memory: 20892kb
input:
2000 5752 2465 5387 9897 3214 8513 7635 4624 8653 4498 8219 8222 3538 2836 7268 8959 9242 6834 1747 1181 9414 9372 7295 5758 2474 6619 4374 8847 8134 9966 1692 1831 4322 4849 1588 4432 1645 4671 6465 7886 4539 2315 8581 6473 6526 7123 6352 8281 8617 7114 7167 9749 1196 4998 7224 8675 8462 7827 7433 ...
output:
327038446
result:
ok single line: '327038446'
Test #20:
score: 0
Accepted
time: 4ms
memory: 6068kb
input:
1 1111
output:
0
result:
ok single line: '0'
Test #21:
score: 0
Accepted
time: 3ms
memory: 8436kb
input:
2 1111 9783
output:
0
result:
ok single line: '0'
Test #22:
score: 0
Accepted
time: 3ms
memory: 7972kb
input:
3 1111 1122 1211
output:
0
result:
ok single line: '0'
Test #23:
score: 0
Accepted
time: 3ms
memory: 8644kb
input:
4 1111 1122 1211 9876
output:
0
result:
ok single line: '0'
Test #24:
score: 0
Accepted
time: 7ms
memory: 8464kb
input:
8 1111 1112 1121 1122 1211 1212 1221 1222
output:
0
result:
ok single line: '0'
Test #25:
score: 0
Accepted
time: 7ms
memory: 9032kb
input:
12 1111 1112 1121 1122 1211 1212 1221 1222 2111 2112 2121 2122
output:
0
result:
ok single line: '0'
Test #26:
score: 0
Accepted
time: 3ms
memory: 9644kb
input:
16 3433 3443 3444 3434 3333 3334 3343 3344 4333 4343 4334 4344 4433 4434 4444 4443
output:
0
result:
ok single line: '0'
Test #27:
score: 0
Accepted
time: 9ms
memory: 10508kb
input:
20 1111 1113 1131 1133 1222 1312 1321 1323 1332 2122 2322 3112 3121 3123 3132 3222 3311 3313 3331 3333
output:
0
result:
ok single line: '0'
Test #28:
score: 0
Accepted
time: 5ms
memory: 7916kb
input:
3 1111 1112 1113
output:
1
result:
ok single line: '1'
Test #29:
score: 0
Accepted
time: 2ms
memory: 5968kb
input:
3 1111 1122 1133
output:
1
result:
ok single line: '1'
Test #30:
score: 0
Accepted
time: 0ms
memory: 8152kb
input:
3 1111 1222 1333
output:
1
result:
ok single line: '1'
Test #31:
score: 0
Accepted
time: 4ms
memory: 8960kb
input:
3 1234 2345 3456
output:
1
result:
ok single line: '1'