QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#218621#6555. Sets May Be GoodlmeowdnWA 240ms7472kbC++142.7kb2023-10-18 15:57:242023-10-18 15:57:25

Judging History

你现在查看的是最新测评结果

  • [2023-10-18 15:57:25]
  • 评测
  • 测评结果:WA
  • 用时:240ms
  • 内存:7472kb
  • [2023-10-18 15:57:24]
  • 提交

answer

//vanitas vanitatum et omnia vanitas
#include<bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
#define mp make_pair
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128; 
template<typename T,typename U>
T ceil(T x, U y) {return (x>0?(x+y-1)/y:x/y);}
template<typename T,typename U>
T floor(T x, U y) {return (x>0?x/y:(x-y+1)/y);}
template<class T,class S>
bool chmax(T &a,const S b) {return (a<b?a=b,1:0);}      
template<class T,class S>
bool chmin(T &a,const S b) {return (a>b?a=b,1:0);}
int popcnt(int x) {return __builtin_popcount(x);}
int popcnt(ll x)  {return __builtin_popcountll(x);}
int topbit(int x) {return (x==0?-1:31-__builtin_clz(x));}
int topbit(ll x)  {return (x==0?-1:63-__builtin_clzll(x));}
int lowbit(int x) {return (x==0?-1:__builtin_ctz(x));}
int lowbit(ll x)  {return (x==0?-1:__builtin_ctzll(x));}

#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
typedef pair<int,int> pii; 
typedef vector<int> vi;  
typedef vector<pii> vp; 
typedef tuple<int,int,int> tiii;
int read() {
  int x=0,w=1; char c=getchar(); 
  while(!isdigit(c)) {if(c=='-') w=-1; c=getchar();}
  while(isdigit(c)) {x=x*10+(c-'0'); c=getchar();}
  return x*w;
}

const int N=1005,mod=998244353;
int n,m,p[N],ans;
bool e[N][N];

void solve(vi &s,int pp) {
  //cout<<"SOLVE: ("<<pp<<") ";
  //sort(s.begin(),s.end());
  //for(int x:s) cout<<x<<" "; puts("");
  //for(int x:s) {
  //  for(int y:s) cout<<e[x][y];
  //    puts("");
  //}
  if(s.size()==0) {ans=(ans+pp*(!e[0][0]))%mod; return;}
  else if(s.size()==1) {
    e[0][s[0]]^=e[s[0]][s[0]];
    ans=(ans+pp*(1+(!e[0][s[0]])))%mod;
    return;
  }
  for(int x:s) if(e[x][x]) e[0][x]^=1, e[x][0]^=1, e[x][x]=0;
  int u=s[0], v=0, n=s.size();
  for(int x:s) if(e[u][x]) {v=x; break;}
  if(!v) {
    if(e[0][u]) {ans=(ans+p[n-1]*pp)%mod; return;}
    vi t; for(int x:s) if(x!=u) t.eb(x);
    solve(t,pp*2%mod); return;
  }
  ans=(ans+p[n-2]*pp)%mod; //cout<<p[n-2]*pp<<endl;
  static int a[N],b[N];
  for(int x:s) a[x]=e[u][x], b[x]=e[v][x];
  vi t; for(int x:s) if(x!=u&&x!=v) t.eb(x);
  for(int x:t) for(int y:t) if(x<=y) {
    //cout<<x<<" "<<y<<" "<<b[x]<<" "<<a[y]<<endl;
    if(x==y) e[x][y]^=(a[x]&&b[x]);
    else {
      if(a[x]&&b[y]) e[x][y]^=1, e[y][x]^=1;
      if(b[x]&&a[y]) e[x][y]^=1, e[y][x]^=1;
    }
  }
  e[0][0]^=e[u][0]&&e[v][0];
  solve(t,pp*2%mod);
}

signed main() {
  n=read(), m=read();
  p[0]=1; rep(i,1,n) p[i]=p[i-1]*2%mod;
  rep(i,1,m) {
    int u=read(), v=read();
    e[u][v]^=1, e[v][u]^=1;
  }
  vi g; rep(i,1,n) g.eb(i);
  solve(g,1); printf("%lld\n",ans);
  return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3700kb

input:

5 5
1 2
2 3
3 4
4 5
1 5

output:

16

result:

ok 1 number(s): "16"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3812kb

input:

3 0

output:

8

result:

ok 1 number(s): "8"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3752kb

input:

2 1
1 2

output:

3

result:

ok 1 number(s): "3"

Test #4:

score: 0
Accepted
time: 0ms
memory: 4036kb

input:

4 6
1 2
1 3
1 4
2 3
2 4
3 4

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 0ms
memory: 4004kb

input:

1 0

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 0
Accepted
time: 0ms
memory: 3768kb

input:

4 5
1 2
1 3
1 4
2 3
3 4

output:

8

result:

ok 1 number(s): "8"

Test #7:

score: 0
Accepted
time: 0ms
memory: 3784kb

input:

5 3
1 3
1 4
1 5

output:

24

result:

ok 1 number(s): "24"

Test #8:

score: 0
Accepted
time: 0ms
memory: 3748kb

input:

5 0

output:

32

result:

ok 1 number(s): "32"

Test #9:

score: 0
Accepted
time: 0ms
memory: 4116kb

input:

6 3
1 2
3 4
3 6

output:

40

result:

ok 1 number(s): "40"

Test #10:

score: 0
Accepted
time: 0ms
memory: 3808kb

input:

6 0

output:

64

result:

ok 1 number(s): "64"

Test #11:

score: 0
Accepted
time: 0ms
memory: 3760kb

input:

7 3
2 3
3 6
6 7

output:

80

result:

ok 1 number(s): "80"

Test #12:

score: 0
Accepted
time: 0ms
memory: 3772kb

input:

7 0

output:

128

result:

ok 1 number(s): "128"

Test #13:

score: 0
Accepted
time: 0ms
memory: 3780kb

input:

20 30
1 7
1 9
1 12
1 13
2 6
2 17
3 13
4 12
4 15
4 17
6 10
6 17
7 8
7 18
8 14
9 13
10 16
10 17
12 14
13 15
13 16
13 20
14 16
14 18
14 20
15 17
15 18
15 19
15 20
16 17

output:

524288

result:

ok 1 number(s): "524288"

Test #14:

score: 0
Accepted
time: 0ms
memory: 3856kb

input:

20 73
1 4
1 9
1 13
2 6
2 7
2 12
2 14
2 18
2 19
3 6
3 10
3 12
3 14
3 16
3 17
3 18
4 6
4 7
4 11
4 14
4 15
4 18
4 19
5 6
5 7
5 9
5 10
5 12
5 14
5 15
5 17
5 18
5 19
5 20
6 12
6 13
6 15
6 16
6 17
7 9
7 16
7 19
8 11
8 15
8 16
8 20
9 10
9 12
9 17
9 20
10 11
10 12
10 14
10 16
10 17
10 18
11 12
11 20
12 13
1...

output:

524288

result:

ok 1 number(s): "524288"

Test #15:

score: 0
Accepted
time: 240ms
memory: 7472kb

input:

1000 499500
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1...

output:

818794637

result:

ok 1 number(s): "818794637"

Test #16:

score: -100
Wrong Answer
time: 136ms
memory: 7404kb

input:

1000 10000
1 14
1 53
1 132
1 139
1 174
1 237
1 246
1 278
1 302
1 349
1 353
1 396
1 465
1 652
1 698
1 706
1 753
1 845
1 848
1 862
1 884
1 911
1 1000
2 31
2 57
2 80
2 118
2 182
2 195
2 198
2 344
2 347
2 585
2 591
2 597
2 611
2 623
2 642
2 672
2 694
2 704
2 731
2 770
2 852
2 923
2 974
3 8
3 12
3 59
3 8...

output:

510735315

result:

wrong answer 1st numbers differ - expected: '128609606', found: '510735315'