QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#405255 | #7932. AND-OR closure | ucup-team992 | WA | 78ms | 12044kb | C++20 | 5.3kb | 2024-05-05 15:18:36 | 2024-05-05 15:18:37 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define ar array
typedef int uci;
#define int long long
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define ll long long
typedef pair<int, int> pii;
typedef vector<int> vi;
vi val, comp, z, cont;
int Time, ncomps;
vector<vi> comps;
template<class G> int dfs(int j, G& g) {
int low = val[j] = ++Time, x; z.push_back(j);
for (auto e : g[j]) if (comp[e] < 0)
low = min(low, val[e] ?: dfs(e,g));
if (low == val[j]) {
do {
x = z.back(); z.pop_back();
comp[x] = ncomps;
cont.push_back(x);
} while (x != j);
comps.push_back(cont); cont.clear();
ncomps++;
}
return val[j] = low;
}
template<class G> void scc(G& g) {
int n = sz(g);
val.assign(n, 0); comp.assign(n, -1);
Time = ncomps = 0;
rep(i,0,n) if (comp[i] < 0) dfs(i, g);
}
vector<int> topo;
int high{};
void getneed(int v, vector<vector<bool>> &dag, vector<int> &mask, vector<bool> &vis){
vis[v] = true;
for(int i{}; i < high; ++i){
if(dag[v][i]){
if(!vis[i])
getneed(i, dag, mask, vis);
}
}
topo.push_back(v);
}
int sosdp[1<<20];
void solve(){
ll N; cin >> N;
vi A(N); rep(i,0,N) cin >> A[i];
vector<int> counts(40);
for(int i{}; i < N; ++i){
int t = A[i];
int c{};
while(t){
if(t&1)
counts[c]++;
c++;
t >>= 1;
}
high = max(high, c);
}
vector<vector<bool>> implies(high, vector<bool>(high, true));
vector<vi> adj(high);
vector<int> indeg(high);
rep(j,0,high) {
rep(k,0,high) {
if(j == k)
continue;
int c{};
rep(i,0,N) {
if((A[i]&(1ll << j)) && (A[i]&(1ll<<k))) {
c++;
}else if((A[i]&(1ll<<j))){
c = -1;
break;
}
}
if(c > 0){
adj[j].push_back(k);
indeg[k]++;
}
}
}
/*
for(int i{}; i < high; ++i){
cout << i << ": ";
for(int j : adj[i])
cout << j << ' ';
cout << '\n';
}
*/
int empt{};
for(int i{}; i < high; ++i){
if(indeg[i] == 0 && adj[i].empty())
empt++;
}
scc(adj);
if(comps.size() == 1){
cout << 1 << '\n';
return;
}
vector<vector<bool>> dag(comps.size(), vector<bool>(comps.size()));
vector<int> cnum(high);
for(int i{}; i < comps.size(); ++i){
//cout << i << '\n';
for(int j : comps[i]){
cnum[j] = i;
//cout << j << ' ';
}
//cout << '\n';
}
for(auto &t : comps){
for(int j : t){
for(int k : adj[j]){
if(cnum[j] != cnum[k])
dag[cnum[j]][cnum[k]] = true;
}
}
}
int m = comps.size();
/*
for(int i{}; i < m; ++i){
for(int j{}; j < m; ++j)
cout << dag[i][j];
cout << '\n';
}
*/
vector<int> mask(m);
vector<bool> vis(m);
for(int i{}; i < m; ++i){
if(!vis[i]){
getneed(i, dag, mask, vis);
}
}
reverse(topo.begin(), topo.end());
for(int i = topo.size()-1; i >= 0; --i){
mask[topo[i]] |= (1ll<<i);
for(int j{}; j < high; ++j){
if(dag[topo[i]][j]){
mask[topo[i]] |= mask[j];
}
}
}
/*
for(int i : topo)
cout << i << ' ';
cout << '\n';
for(int i{}; i < m; ++i)
cout << mask[i] << ' ';
cout << '\n';
*/
int fh = m/2;
int sh = (m+1)/2;
int fmask = (1<<fh)-1;
int smask = ((1<<sh)-1)<<fh;
// do the last sh
for(int i{}; i < (1<<sh); ++i){
bool bad{};
for(int j{}; j < sh; ++j){
if(i&(1<<(j))){
if((i&(mask[topo[j+fh]]>>fh)) != (mask[topo[j+fh]]>>fh)){
bad = true;
break;
}
}
}
if(!bad){
//cout << i << '\n';
sosdp[i]++;
}
}
for(int i = 19; i >= 0; --i){
for(int j{}; j < (1<<20); ++j){
if((j&(1<<i)) == 0){
sosdp[j] += sosdp[j^(1<<i)];
}
}
}
/*
for(int i{}; i < 8; ++i)
cout << sosdp[i] << ' ';
cout << '\n';
*/
// do the first 2^fh
int out{};
for(int i{}; i < (1<<fh); ++i){
bool bad{};
int maskneed{};
for(int j{}; j < fh; ++j){
if(i&(1<<(j))){
if((i&mask[topo[j]]) != (fmask&mask[topo[j]])){
bad = true;
break;
}
maskneed |= mask[topo[j]];
}
}
/*
cout << i << ' ' << bad << '\n';
cout << maskneed << '\n';
cout << ((maskneed&smask)>>fh) << '\n';
*/
if(!bad){
out += sosdp[(maskneed&smask)>>fh];
}
}
out >>= empt;
if(out == 1)
out <<= empt;
out--;
for(int i{}; i < N; ++i){
if(A[i] == 0){
out++;
break;
}
}
cout << out << '\n';
}
uci main(){
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 19ms
memory: 11708kb
input:
4 0 1 3 5
output:
5
result:
ok 1 number(s): "5"
Test #2:
score: 0
Accepted
time: 20ms
memory: 11884kb
input:
5 0 1 2 3 4
output:
8
result:
ok 1 number(s): "8"
Test #3:
score: 0
Accepted
time: 14ms
memory: 11700kb
input:
49 1097363587067 1096810445814 275012137504 1096739142630 1096809921522 1087071335264 829364908576 949625500192 1087142638448 1096200190829 1097292808175 1095750860656 1087144145776 1097346808827 1095734082416 1096755396578 829230678048 1095663303524 1087072842592 1096216444777 949623992864 10962714...
output:
52
result:
ok 1 number(s): "52"
Test #4:
score: 0
Accepted
time: 19ms
memory: 11800kb
input:
40 32 830045728951 278250692646 1021660937663 881584025918 275993636902 275953000615 327534555567 329833558447 278293950631 327534558639 893011227647 327533244718 1021660934591 1021661000703 893011161535 1030787822591 832344731831 275994947751 1073741862 329832247598 278292639782 1030787825663 10307...
output:
44
result:
ok 1 number(s): "44"
Test #5:
score: 0
Accepted
time: 15ms
memory: 11976kb
input:
113 995010353355 513836652779 438679050443 548477566959 507675377387 412904849600 412904919234 431506823898 1065151889147 436774574666 413152182848 438955900619 412871032896 436497750090 24159262794 419628520130 479476914639 427941630147 436493424714 412875358272 541196352 1098370744303 445117176011...
output:
143
result:
ok 1 number(s): "143"
Test #6:
score: 0
Accepted
time: 15ms
memory: 11756kb
input:
63 274873712607 183352984580 549655082623 549688637311 463755584628 188974231516 463789156220 183487485535 274873708508 183487464532 463789160319 188907059039 463755605631 137709486080 463822782207 181339965016 274840153820 187799217236 187799238239 463789139316 146970789464 549722255100 18897421461...
output:
63
result:
ok 1 number(s): "63"
Test #7:
score: 0
Accepted
time: 19ms
memory: 11940kb
input:
46 343736386052 77314129940 1099444493311 1094075521919 68724195332 353165185622 541926877791 490604139103 404722784854 1099444493023 1094142655359 410091756246 547530709727 1094142655071 352863191638 525047822943 524980689503 524678695519 547597843167 541859744639 1099511626463 507483193951 3875417...
output:
46
result:
ok 1 number(s): "46"
Test #8:
score: 0
Accepted
time: 15ms
memory: 11788kb
input:
49 73358378052 349495737422 73358394852 74617839076 349496261711 74433224164 74616757732 377952403438 349494672878 74618363365 74432142820 74156382272 352180764143 352180223054 77302324708 74432126020 1045287271919 377952927727 360772271598 74617822276 77302848997 1039379725807 1074829312 3494946560...
output:
49
result:
ok 1 number(s): "49"
Test #9:
score: 0
Accepted
time: 15ms
memory: 11748kb
input:
55 1097313795995 1065134439323 77916805395 1028593268635 305549054739 305549054720 301254054675 1099511627775 376450620179 1030774306715 375750245147 305951707931 304942973696 302332064531 304945074944 308132746011 306627064576 9196278016 13491278099 377931283227 374672235291 307730092819 3066270645...
output:
59
result:
ok 1 number(s): "59"
Test #10:
score: 0
Accepted
time: 19ms
memory: 11660kb
input:
140 618955644536 618880146008 618956693368 206638591281 618954923376 618881194840 619835332946 624338984050 405244424 73492646960 628566235994 210935738169 69122164752 652800941950 632935669370 550158506048 770376204155 623249907056 551251581514 618879031632 761781682043 550024288320 624342589306 61...
output:
174
result:
ok 1 number(s): "174"
Test #11:
score: 0
Accepted
time: 19ms
memory: 11788kb
input:
98 276234289538 276435628434 280525066271 426776261023 1097162807743 1097363685375 1087951250 859273990194 4309160351 864646910399 860553736626 276234293650 495327959007 864642715711 280525062159 4304961551 5378719759 348204339231 280529260959 1097364142527 280730595743 495529292191 1010893910463 10...
output:
110
result:
ok 1 number(s): "110"
Test #12:
score: 0
Accepted
time: 19ms
memory: 11712kb
input:
68 394201661537 549394440821 549394178661 1099503239159 488557772900 145090412581 144956194852 462787969060 325347967008 531641925749 462922186789 282532511777 549411354231 549680178807 325482184737 1099234144247 1099503103607 76235669600 548687389284 532212367477 256625344612 548821869173 549680314...
output:
68
result:
ok 1 number(s): "68"
Test #13:
score: 0
Accepted
time: 11ms
memory: 11720kb
input:
54 514313778046 514313813886 81942544928 497669898095 494448209774 357005026154 512703000431 496058917759 496596025198 514850780015 219536687652 13155959328 515387686783 8860467744 82093548392 13306954272 513239835519 497669862255 511629091694 515396075519 9011462688 512702964591 2097664 51538765094...
output:
54
result:
ok 1 number(s): "54"
Test #14:
score: 0
Accepted
time: 15ms
memory: 11980kb
input:
81 69795316278 7523011620 901144743607 275951648773 1073741828 621967642166 5372903428 71943327286 626266803766 344673223223 351120395831 540133691007 1090124320311 1090158005887 540100038327 351128829879 282400918565 896845549111 351154114303 540133723903 346821234231 348972384823 1090166407039 322...
output:
81
result:
ok 1 number(s): "81"
Test #15:
score: 0
Accepted
time: 15ms
memory: 11788kb
input:
44 5411176842 31453621226 5671225632 5411185610 5679614378 5671234400 856154451946 4841930890 5679876523 31453883371 858319044587 5940838656 5679885291 6217935851 832544784362 6217664938 832545046507 6217927083 5679623146 6217673706 5949236170 31991933931 858318782442 5402796864 7843953642 319916717...
output:
58
result:
ok 1 number(s): "58"
Test #16:
score: 0
Accepted
time: 11ms
memory: 11796kb
input:
77 481034223583 480413171607 1073807361 37616164743 443973091295 37614586113 205526744983 1030790053855 989031301087 31576366983 1074791938 480967081879 169018994451 338271866627 475782164315 164321902487 439274942299 1108348674 481036320767 480479784795 443905421075 306462265091 480412643091 342970...
output:
88
result:
ok 1 number(s): "88"
Test #17:
score: 0
Accepted
time: 15ms
memory: 11704kb
input:
82 272174463709 17246986261 18359263381 91642145429 267745274005 113252276425 547052501727 17179877396 274720403221 134592899733 821949151965 115802410369 684367587989 229089487509 113113860097 115798215937 3863741825 91637950997 409605159647 503963331095 229085293077 132978093333 1179385985 8734717...
output:
122
result:
ok 1 number(s): "122"
Test #18:
score: 0
Accepted
time: 19ms
memory: 11776kb
input:
54 2109536 921967046467 1099171741543 578354952800 921969147747 923111178111 575525625920 1219768932 1060550197119 1059408166755 991746702182 853230791490 923043938151 575525879808 575525617664 647089106497 923041836871 0 3902024260 854305581894 1060482957159 991813942142 579427641924 2829335136 142...
output:
56
result:
ok 1 number(s): "56"
Test #19:
score: 0
Accepted
time: 15ms
memory: 11772kb
input:
112 1099477022463 756484767267 789981003447 790140810943 22758818854 774948617763 756451505707 583822859966 584091426494 756485062187 760209286151 18388354082 573085146662 536892962 779210028583 22683321382 22683321350 789905800895 34033129142 583713806014 572514698246 33957631670 572439200806 77894...
output:
166
result:
ok 1 number(s): "166"
Test #20:
score: 0
Accepted
time: 15ms
memory: 11700kb
input:
35 941452556157 627065233440 907084428069 907080233248 941452687359 1099494848511 958767560703 907080365490 924399433655 901980959269 902785216544 1099494717309 901980960309 907084429109 958767429501 1047811716917 906271782192 1065126590261 902789412405 906275977013 901976765488 902789411365 9070802...
output:
35
result:
ok 1 number(s): "35"
Test #21:
score: 0
Accepted
time: 19ms
memory: 11704kb
input:
73 1099243190263 479683662551 470890992133 1029382787863 329152352773 141738639360 36523999744 141738659844 1029381715735 1099243181047 329152332289 54274314757 54274294273 0 549487376119 416616677376 470890992151 549420192311 178262659588 1029449962455 416616697860 292628332545 1020657292055 20484 ...
output:
75
result:
ok 1 number(s): "75"
Test #22:
score: 0
Accepted
time: 15ms
memory: 11744kb
input:
60 126720696480 40819253408 813920904114 1090787437562 728664138658 539305993192 728018191234 41364512928 286880 728019461042 814020322210 178258183040 262144 539851252712 728118879138 728120124338 1090921660415 1089847392255 1090787438587 40819228800 178803467168 814566827955 1089713170427 81456682...
output:
62
result:
ok 1 number(s): "62"
Test #23:
score: 0
Accepted
time: 18ms
memory: 11780kb
input:
188 632311943094 147138318536 649492156292 909358280503 237602068168 651501194752 9665777664 770858164044 790047481544 77312033330 151701820488 632169336498 787895770696 805285044222 807294082682 651643834244 701995555912 376102151731 1082331414527 649349549696 736422436040 772867235400 736565042636...
output:
306
result:
ok 1 number(s): "306"
Test #24:
score: 0
Accepted
time: 19ms
memory: 11896kb
input:
46 129997256715 78407313819 1092078581803 1040475761083 8593088515 1040479988155 78403086747 1099477925375 1094243367419 1094213711979 8590991362 1092065703979 69796366347 1099511496703 1040463210539 1040471861291 1094230489595 1099469274623 78384211978 1040488638907 3145731 78390536203 109422658980...
output:
46
result:
ok 1 number(s): "46"
Test #25:
score: 0
Accepted
time: 15ms
memory: 11960kb
input:
85 497140360702 77645758816 77780107750 217387516390 409074525691 357524431330 492299928034 409066136035 543841632739 357524562406 357532820986 409074656767 404234355175 82612019686 492174099832 78182637824 548673675751 497131839970 268435712 77578633216 353103570296 497131971046 222085079392 352692...
output:
99
result:
ok 1 number(s): "99"
Test #26:
score: 0
Accepted
time: 15ms
memory: 11796kb
input:
48 326495241995 330795507599 334016733071 274886350211 292135556483 1030657867759 8425473 327338874767 331634892687 1099511627775 309246072587 316763332491 480885014479 334856118159 326495295371 475749611471 326499489679 292135503107 334872895407 329720715151 326495278859 274886296835 8388609 343681...
output:
48
result:
ok 1 number(s): "48"
Test #27:
score: 0
Accepted
time: 11ms
memory: 11700kb
input:
72 41547483650 1007007095631 36042459651 35975070209 1099478072219 50170976838 1099477015451 41547221504 1013585861455 1099460008579 1099511626719 1084291304067 1099493563079 1006973541131 998316179969 36042197505 1092914830287 34901328384 998349996615 1092914797255 41581038150 1099460041611 9983833...
output:
80
result:
ok 1 number(s): "80"
Test #28:
score: 0
Accepted
time: 11ms
memory: 11944kb
input:
50 196608 10203109376 10219886612 1095149026559 1077969157373 1082264648957 978744990869 283468321793 1013238955157 8590200832 285097810965 559421788288 834836847745 0 8590397440 1081962626237 458752 559438827668 8589938688 9666236416 262144 869347589269 8590135296 1026425355479 834316752021 1030720...
output:
50
result:
ok 1 number(s): "50"
Test #29:
score: 0
Accepted
time: 15ms
memory: 11772kb
input:
98 990910277751 648537499794 652832471954 648537504402 927559379286 72582471680 567251847184 652681476882 552823465984 790271551923 1065149463543 1060854491383 1065151888383 622608300544 927559383894 923415411414 582888253714 622615109632 639947565200 790120561459 720327338291 576378693650 639947569...
output:
100
result:
ok 1 number(s): "100"
Test #30:
score: 0
Accepted
time: 15ms
memory: 11768kb
input:
51 551905919014 612343036974 618399793151 560500047910 596740160574 551906188326 820338606079 595280576046 594861104174 586686447150 586535149614 2149580838 614180175871 551903821824 595280576495 2147752960 612494065647 596740161023 618475290623 562379373622 596891189247 2149850150 596739891262 6124...
output:
51
result:
ok 1 number(s): "51"
Test #31:
score: 0
Accepted
time: 15ms
memory: 11704kb
input:
196 548915379187 414686890643 274949409299 274962022400 412518402563 1096523710327 518829603555 312528276099 862313483991 999882477255 450109852355 585204174423 549721734139 413341567499 2563 1068606422775 412539406867 516698929763 1068585418471 414670342835 450118535843 480187501491 450105920179 99...
output:
228
result:
ok 1 number(s): "228"
Test #32:
score: 0
Accepted
time: 15ms
memory: 11704kb
input:
60 138858799744 17525909122 718835005383 237832224707 567298668486 443819472834 224808648642 1062466994119 431056332739 138875745216 346072000 346038912 156038669954 499687604162 156194289603 774564462534 705811429318 156055615426 17542821506 512572506050 980829059015 362984384 362951296 17525942210...
output:
60
result:
ok 1 number(s): "60"
Test #33:
score: 0
Accepted
time: 29ms
memory: 11884kb
input:
9363 1043131227225 785298644298 785298644426 768051666240 776706678080 767112121448 1043062021200 208361622848 775366593858 1090376130011 1043131489633 768119360840 974411488610 1043130965088 768253582699 1099503239167 758184631616 775635029450 225541496128 768253578587 1064614976979 768116743232 10...
output:
16968
result:
ok 1 number(s): "16968"
Test #34:
score: 0
Accepted
time: 24ms
memory: 11752kb
input:
2896 279173926961 846780829747 1065092872063 1065126425211 927620366199 855102738993 838194958641 856445039411 962047213431 893302570615 1061829703291 1099452610167 1099452872567 1099511330423 829332394609 1062903445107 847049675313 927712900727 838461313907 927662307191 927628752499 829869265521 10...
output:
3242
result:
ok 1 number(s): "3242"
Test #35:
score: 0
Accepted
time: 23ms
memory: 12032kb
input:
5806 67747361867 62378589249 961779068895 135326051801 45131539529 136803495131 66740597835 135460142171 45130951761 62311185473 616496381011 66606447707 8623692800 131031084235 66606185539 66807901259 136472145371 66606376011 131102256219 135800007755 63385316355 66606316889 549730631391 6852872552...
output:
8219
result:
ok 1 number(s): "8219"
Test #36:
score: 0
Accepted
time: 34ms
memory: 11944kb
input:
20232 1090921430942 1090300673983 39763607956 1013926516116 877261247888 877292836244 881856279996 1090300870079 1099427347871 878236663262 403105709534 39736329620 51816432016 327495996816 950714161086 1096743387103 880750908816 1088119627676 602650722704 314918355348 538229407228 877247612304 1099...
output:
78774
result:
ok 1 number(s): "78774"
Test #37:
score: 0
Accepted
time: 24ms
memory: 11832kb
input:
5139 696332950770 146048129170 137975830656 715798715890 696324496880 137447708800 137978222720 137600800896 156249200882 137458194900 139203517616 146585524720 687743016432 147799251154 1099243191807 697415081462 198108289522 16 147659267250 704939662578 139067234514 2627584 713529613814 7072045869...
output:
15731
result:
ok 1 number(s): "15731"
Test #38:
score: -100
Wrong Answer
time: 78ms
memory: 12044kb
input:
92751 19226398471 466168229634 53868441352 483721512849 285509390151 148732054336 157593374531 586281364234 2164697856 603640573192 449706954739 184645783526 2156015360 607930985768 320531836739 607792982312 569672118025 17339747592 423861595985 208863563587 706539785481 552081043208 278116935688 21...
output:
2742600
result:
wrong answer 1st numbers differ - expected: '702105600', found: '2742600'