QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#301920 | #5827. 异或图 | cryozwq | 30 | 78ms | 75716kb | C++14 | 4.1kb | 2024-01-10 14:26:12 | 2024-01-10 14:26:12 |
Judging History
answer
#include<bits/stdc++.h>
#define mp make_pair
#define fr first
#define sc second
using namespace std;
typedef long long ll;
const ll mod=998244353;
const ll inv2=(mod+1)/2ll;
const int maxn=4e6+5;
const int maxS=(1<<20)+5;
bool con[maxS];
bool g[20][20];
ll lm[20];
ll lim[20];
int n,m;
ll c;
ll f[20][2][2],a[20];
ll ipw[maxn];
ll calc(ll *l,int N,ll C){
ll ans=0;
for(ll i=59;i>=0;i--){
for(int j=1;j<=N;j++){
for(int a=0;a<=1;a++){
for(int b=0;b<=1;b++){
f[j][a][b]=0;
}
}
}
f[0][0][0]=1;
for(int j=1;j<=N;j++){
if((l[j]&(1ll<<i))){
ll s1=((1ll<<i))%mod,s2=(l[j]-s1)%mod;
f[j][0][0]=f[j-1][0][1]*s2%mod;
f[j][0][1]=f[j-1][0][0]*s2%mod;
f[j][1][0]=(f[j-1][0][0]*s1%mod+f[j-1][1][1]*s2%mod+f[j-1][1][0]*s1%mod)%mod;
f[j][1][1]=(f[j-1][0][1]*s1%mod+f[j-1][1][0]*s2%mod+f[j-1][1][1]*s1%mod)%mod;
}
else{
for(int a=0;a<=1;a++){
for(int b=0;b<=1;b++){
f[j][a][b]=f[j-1][a][b]*(l[j]%mod)%mod;
}
}
}
}
if((C&(1ll<<i)))ans=(ans+f[N][1][1]*ipw[i]%mod)%mod;
else ans=(ans+f[N][1][0]*ipw[i]%mod)%mod;
int cnt=0;
for(int j=1;j<=N;j++){
if((l[j]&(1ll<<i))){
cnt++;
l[j]^=(1ll<<i);
}
}
if(((cnt&1)^((C>>i&1))))return ans;
}
return ans;
}
#define lowbit(i) ((i)&(-(i)))
ll dp[maxS],pw[maxn],xs[maxn];
int ch[maxS],lg[maxS];
int popcnt[maxn];
int id[maxn];
pair<ll,int>tmp[maxn];
int main(){
ipw[0]=1;
for(int i=1;i<maxn;i++)ipw[i]=ipw[i-1]*inv2%mod;
pw[0]=1;
for(int i=1;i<maxn;i++)pw[i]=pw[i-1]*3ll%mod;
for(int i=1;i<maxS;i++)ch[i]=ch[i>>1]*3ll+(i&1),popcnt[i]=popcnt[i>>1]+(i&1);
for(int i=1;(1<<(i-1))<maxS;i++)lg[(1<<i-1)]=i;
scanf("%d%d%lld",&n,&m,&c);
for(int i=1;i<=n;i++)scanf("%lld",&lim[i]),lim[i]++,tmp[i]=mp(lim[i],i);
sort(tmp+1,tmp+n+1);
sort(lim+1,lim+n+1);
if(m==0){
cout<<calc(lim,n,c)<<endl;
return 0;
}
for(int i=1;i<=n;i++)id[tmp[i].sc]=i;
for(int i=1,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
g[id[u]][id[v]]=g[id[v]][id[u]]=1;
}
for(int S=0;S<(1<<n);S++){
for(int i=1;i<=n;i++){
if(!(S&(1<<i-1)))continue;
for(int j=1;j<=n;j++){
if(!(S&(1<<j-1)))continue;
if(i==j)continue;
if(g[i][j])con[S]=1;
}
}
}
for(int S=1;S<(1<<n);S++){
xs[S]=0;
if(!con[S])xs[S]=1;
int ts=(S^(lowbit(S)));
for(int T=ts;T;T=((T-1)&ts)){
if(!con[T])xs[S]=(xs[S]-xs[S^T]+mod)%mod;
}
// cout<<S<<" "<<xs[S]<<endl;
}
dp[0]=1;
int cnt=0;
int all=(1<<n)-1;
for(int S=0;S<pw[n];S++){
if(!dp[S])continue;
// if(2000<=S&&S<=2500)cout<<S<<" "<<dp[S]<<endl;
int ts=0,T=S;
for(int i=n-1;i>=0;i--){
if(T>=pw[i]){
ts+=(1<<i);
T%=pw[i];
}
}
ts=(all^ts);
if(!ts)continue;
int tts=(ts^(lowbit(ts)));
// cout<<S<<" "<<tts<<endl;
for(int tt=tts;;tt=((tt-1)&tts)){
int T=(tt|(lowbit(ts)));
int news=S+ch[T];
if(popcnt[T]&1){
news+=ch[lowbit(ts)];
dp[news]=(dp[news]+dp[S]*xs[T]%mod)%mod;
}
else{
dp[news]=(dp[news]+dp[S]*xs[T]%mod*(lim[lg[lowbit(ts)]]%mod)%mod)%mod;
}
if(!tt)break;
}
}
ll ans=0;
for(int S=0;S<(1<<n);S++){
int ts=ch[S]+ch[all];
if(!dp[ts])continue;
int tt=0;
for(int i=1;i<=n;i++){
if((S&(1<<i-1)))lm[++tt]=lim[i];
}
ans=(ans+dp[ts]*calc(lm,tt,c)%mod)%mod;
}
cout<<ans;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 20
Accepted
Test #1:
score: 20
Accepted
time: 39ms
memory: 74284kb
input:
4 6 2 7 11 14 0 1 2 1 3 2 3 2 4 4 1 4 3
output:
44
result:
ok 1 number(s): "44"
Test #2:
score: 0
Accepted
time: 27ms
memory: 74252kb
input:
4 4 6 12 14 14 5 4 2 1 4 3 2 1 2
output:
798
result:
ok 1 number(s): "798"
Test #3:
score: 0
Accepted
time: 35ms
memory: 74496kb
input:
3 3 2 10 4 11 2 1 3 2 1 3
output:
33
result:
ok 1 number(s): "33"
Test #4:
score: 0
Accepted
time: 23ms
memory: 74200kb
input:
4 0 4 9 8 5 2
output:
148
result:
ok 1 number(s): "148"
Test #5:
score: 0
Accepted
time: 27ms
memory: 74208kb
input:
5 6 14 12 15 13 13 12 3 1 2 4 2 5 2 1 5 3 4 5
output:
21337
result:
ok 1 number(s): "21337"
Test #6:
score: 0
Accepted
time: 31ms
memory: 74280kb
input:
4 5 5 5 2 4 13 2 1 3 4 1 4 4 2 3 2
output:
42
result:
ok 1 number(s): "42"
Test #7:
score: 0
Accepted
time: 34ms
memory: 74320kb
input:
4 4 3 13 7 8 12 4 1 3 1 2 4 4 3
output:
552
result:
ok 1 number(s): "552"
Test #8:
score: 0
Accepted
time: 39ms
memory: 74488kb
input:
4 2 12 1 12 4 11 2 1 3 1
output:
70
result:
ok 1 number(s): "70"
Test #9:
score: 0
Accepted
time: 37ms
memory: 74388kb
input:
5 5 6 10 7 8 2 13 1 5 1 3 2 1 4 3 5 3
output:
1231
result:
ok 1 number(s): "1231"
Test #10:
score: 0
Accepted
time: 33ms
memory: 74200kb
input:
5 7 9 6 7 13 15 12 1 3 5 3 5 2 4 5 4 3 4 1 3 2
output:
6223
result:
ok 1 number(s): "6223"
Test #11:
score: 0
Accepted
time: 27ms
memory: 74276kb
input:
3 0 3 15 7 12
output:
104
result:
ok 1 number(s): "104"
Test #12:
score: 0
Accepted
time: 27ms
memory: 74504kb
input:
3 2 9 10 6 5 1 2 1 3
output:
17
result:
ok 1 number(s): "17"
Test #13:
score: 0
Accepted
time: 27ms
memory: 74288kb
input:
5 5 11 7 9 15 9 9 5 4 5 1 5 2 1 3 3 4
output:
5224
result:
ok 1 number(s): "5224"
Test #14:
score: 0
Accepted
time: 23ms
memory: 74268kb
input:
5 0 12 9 8 14 11 2
output:
3006
result:
ok 1 number(s): "3006"
Test #15:
score: 0
Accepted
time: 23ms
memory: 74492kb
input:
3 1 1 6 10 4 3 1
output:
30
result:
ok 1 number(s): "30"
Subtask #2:
score: 0
Wrong Answer
Dependency #1:
100%
Accepted
Test #16:
score: 50
Accepted
time: 27ms
memory: 74392kb
input:
9 27 705410105529944560 929827299070190972 733413770730537329 473007347105710981 190062421504120247 918561152768663129 196040702922254016 981530663192980241 203295856357272834 337150461958783092 2 8 7 9 8 9 2 3 9 2 2 7 9 5 9 4 4 8 1 7 6 3 6 1 4 1 6 5 2 4 2 1 9 3 9 6 7 3 7 5 5 2 4 5 2 6 3 1 3 8 4 3 8 6
output:
5392583
result:
ok 1 number(s): "5392583"
Test #17:
score: 0
Accepted
time: 31ms
memory: 74344kb
input:
9 7 788762650337246371 605340092851479114 625896945107761227 361131331380167081 572133549445050458 929899192003968010 340514051531987427 690728985364969400 268762741220048006 818120252827139346 5 8 9 6 6 1 1 9 9 8 5 1 4 5
output:
35237078
result:
ok 1 number(s): "35237078"
Test #18:
score: 0
Accepted
time: 43ms
memory: 74292kb
input:
7 8 968166787047166534 945734997493219809 465616677643913237 530128109571749460 717120283671096308 118646732725835921 510958884109370001 797022604947155276 5 2 4 7 1 2 6 5 4 2 4 6 1 6 6 3
output:
133871438
result:
ok 1 number(s): "133871438"
Test #19:
score: 0
Accepted
time: 31ms
memory: 75716kb
input:
12 21 341964498832651322 422448536649714733 488538974423366199 893293448611252565 879334133559023407 13516625885288091 43377983230712374 263189254162337644 474056776923289355 540904774976211471 103364876621830299 515157013276720499 213857038587555252 12 9 8 3 1 9 1 7 3 1 8 11 11 10 6 10 6 1 10 2 7 9...
output:
296076062
result:
ok 1 number(s): "296076062"
Test #20:
score: 0
Accepted
time: 34ms
memory: 75188kb
input:
11 42 215284372701527433 670445786006000260 969876209382224733 248721347029697734 375741447316879814 840434941395805804 187091598433077755 126574401069916039 764298539206353847 750906714570719526 387387869969339518 713140316419888823 1 10 2 5 1 7 4 11 3 11 2 7 4 5 9 5 1 6 3 4 10 9 11 9 3 7 2 1 8 11 ...
output:
861118590
result:
ok 1 number(s): "861118590"
Test #21:
score: 0
Accepted
time: 21ms
memory: 74504kb
input:
7 20 619868500075052677 653541655679358091 619279335581334164 74945438024390700 772996180610853550 636253173293891586 125935970032544337 454311587629767538 7 3 4 5 6 7 2 7 4 2 5 3 4 6 2 6 7 4 5 7 2 5 6 3 5 1 2 3 3 4 1 7 2 1 1 3 5 6 4 1
output:
396474896
result:
ok 1 number(s): "396474896"
Test #22:
score: -50
Wrong Answer
time: 78ms
memory: 75392kb
input:
13 1 655058659126783551 220930961455414900 363602338013759573 443737606888655227 137555247528320912 492558319379424931 930253239754276705 727679308735300884 787033056632957722 29595553176095069 586820353385061840 342786039873677428 141912073483259823 800159879032310691 4 9
output:
443917653
result:
wrong answer 1st numbers differ - expected: '504321097', found: '443917653'
Subtask #3:
score: 10
Accepted
Test #47:
score: 10
Accepted
time: 38ms
memory: 74380kb
input:
14 0 731833687287532167 157552918690640051 900457311668526045 111217720157614956 84140984111060473 814012186135880499 784848789620248379 958953377683017264 105083874298571687 104921429970878846 44983041675142735 871013110538758030 686733907990421995 98063590462078176 495161493555059993
output:
231790380
result:
ok 1 number(s): "231790380"
Test #48:
score: 0
Accepted
time: 39ms
memory: 74316kb
input:
11 0 101435837408688522 638776638580507479 933944392115323974 19098604312360490 142362319980029593 419910251764515410 275591812677260089 770239593400917018 928344484461634421 67340905784404712 378109786925249078 110881245457449811
output:
242383534
result:
ok 1 number(s): "242383534"
Test #49:
score: 0
Accepted
time: 25ms
memory: 74256kb
input:
9 0 100988561775675251 622570387572403506 684352103903274038 784649864569409753 270298495621205212 56183537059869110 346856482529145989 86639702870530669 607198038565138736 14747634008501988
output:
20893166
result:
ok 1 number(s): "20893166"
Test #50:
score: 0
Accepted
time: 50ms
memory: 74256kb
input:
10 0 839910859917247463 611237879350518457 292219463776059962 548211857317940894 822255554598388425 335628456629874391 774414280870858683 882480367082748768 654587410087321403 74330774886125511 22894883233341926
output:
61697734
result:
ok 1 number(s): "61697734"
Subtask #4:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%