QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#77718#5019. 整数infinities100 ✓630ms11640kbC++144.6kb2023-02-15 15:18:042023-02-15 15:18:08

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-02-15 15:18:08]
  • 评测
  • 测评结果:100
  • 用时:630ms
  • 内存:11640kb
  • [2023-02-15 15:18:04]
  • 提交

answer

#include<bits/stdc++.h>
//#include <ext/pb_ds/hash_policy.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
namespace infinities{
    #define fint register int
    #define ls(i) (i << 1)
    #define rs(i) ((i << 1) | 1)
    #define pii pair<int, int>
    #define im int mid = (l + r) >> 1
    #define INT __int128
    #define ll long long
    #define ui unsigned int
    #define lc ch[now][0]
    #define rc ch[now][1]
    const int mod = 998244353, INF = 998244353, maxn = 5e5 + 7;
    namespace FastIO{//10M
        const int SS = 1e7; char num_[50]; int cnt_;
        inline int xchar(){static char buf[SS]; static int len = 0, pos = 0; if(pos == len)pos = 0, len = fread(buf, 1, SS, stdin); if(pos == len)exit(0); return buf[pos++];}
        inline int read(){fint x = 0, f = 1, ch = getchar(); while(ch < '0' || ch > '9'){if(ch == '-')f = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar();} return x * f;}
        inline ll readll(){ll x = 0, f = 1, ch = getchar(); while(ch < '0' || ch > '9'){if(ch == '-')f = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){x = (x << 1ll) + (x << 3ll) + (ch ^ 48ll); ch = getchar();} return x * f;}
		inline void write(int x){if(x == 0){putchar('0'); return;}if(x < 0)putchar('-'), x = -x; while(x)num_[++cnt_] = x % 10 ^ 48,x /= 10; while(cnt_)putchar(num_[cnt_--]);}
        inline void write(int x, char c){write(x), putchar(c);}
    }
    using namespace std;
    using namespace FastIO;
    namespace mystd{
        inline int qmin(int a, int b){return (a > b) ? b : a;} inline int qmax(int a, int b){return (a > b) ? a : b;}
        inline void chkmin(int &a, int b){a = min(a, b); return;} inline void chkmax(int &a, int b){a = max(a, b); return;}
        inline void qk(int &a, int b){a = (a + b); a = (a >= mod) ? a - mod : a;}
        inline void sub(int &a, int b){a = a - b; a = (a < 0) ? a + mod : a;}
		inline int mul(int a, int b){return (1ll * a * b % mod + mod) % mod;}
        inline int qpow(int x, int k){fint res = 1; for(; k; k = (k >> 1), x = 1ll * x * x % mod)if(k & 1)res = 1ll * res * x % mod; return res;}
        inline void looked(int a[], int n){for(fint i = 1; i < n; i++)write(a[i], ' '); write(a[n], '\n');} inline void debug(){puts("qwq");} inline void YES(){puts("YES");} inline void Yes(){puts("Yes");} inline void yes(){puts("yes");} inline void NO(){puts("NO");} inline void No(){puts("No");} inline void no(){puts("no");}
    }
	using namespace mystd;
	//using namespace __gnu_pbds;
	//gp_hash_table<int, int>hsh;
    void file(){freopen("a.in", "r", stdin), freopen("a.out", "w", stdout);}
    int n, s[(1 << 18) + 10], f[2][(1 << 18) + 10], lim, g[(1 << 18) + 10], a[maxn];
    int p[62], pos[62], change[(1 << 18) + 20], from[(1 << 18) + 20];
    int num[62];
    pii q[30];
    ll r[20];
    int calc(ll x){fint res = -1; while(x){++res, x >>= 1;} return res;}
    void FWT(int *a, int opt, int len){
		for(fint l = 1, o = 0; o < len; l <<= 1, o++){
			for(fint i = 0; i < (1 << n); i += (l << 1)){
				for(fint j = i; j < l + i; j++){
					if(opt == 1)qk(a[j], a[j + l]);else sub(a[j], a[j + l]);
				}
			}
		}
	}
	int work(int S){
		fint as = 0;
		for(fint i = 0; i < n; i++)as |= (((S >> p[i]) & 1) << i);
		return as;
	}
    signed main(){
    	n = read();
    	for(fint i = 1; i <= n; i++){r[i] = readll(); lim = max(lim, calc(r[i]));}
    	for(fint i = 0; i < (1 << n); i++)s[i] = getchar() - '0';
    	for(fint i = lim; i >= 0; i--){
			for(fint j = 1; j <= n; j++)num[i] |= ((r[j] >> i) & 1) << j - 1;
		}
    	f[(lim + 1) & 1][(1 << n) - 1] = 1;
		for(fint i = lim; i >= 0; i--){
			fint num1 = 0, cg = 0;
			for(fint j = 1; j <= n; j++){
				if(num[i] & (1 << j - 1))++num1;else cg |= (1 << j - 1);
				q[j] = {((num[i] >> j - 1) & 1) ^ 1, j - 1};
			}
			sort(q + 1, q + 1 + n);
			for(fint j = 0; j < n; j++)p[j] = q[j + 1].second, pos[q[j + 1].second] = j;
			for(fint S = 0; S < (1 << n); S++){fint k = work(S); change[S] = k, from[k] = S;}
			for(fint S = 0; S < (1 << n); S++)g[change[S]] = s[S ^ cg], a[change[S]] = f[(i + 1) & 1][S];
			for(fint j = n; j >= 1; j--){
				if(q[j].first == 0)break;
				for(fint S = (1 << n) - 1; S >= 0; S--)if((S & (1 << j - 1)) == 0)qk(g[S], g[S | (1 << j - 1)]);
			}
			FWT(a, 1, num1), FWT(g, 1, num1);
			for(fint S = 0; S < (1 << n); S++)a[S] = 1ll * a[S] * g[S] % mod;
			FWT(a, -1, num1);
			for(fint S = 0; S < (1 << n); S++){f[i & 1][from[S]] = a[S], f[(i + 1) & 1][S] = 0;}
		}
		fint res = 0;
		for(fint S = 0; S < (1 << n); S++)qk(res, f[0][S]);
		cout << res;
        return 0;
    }
}
signed main(){
    return infinities::main();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 5
Accepted
time: 3ms
memory: 7460kb

input:

2
557860450892773247 1006376652976945084
1001

output:

434419861

result:

ok 1 number(s): "434419861"

Test #2:

score: 5
Accepted
time: 1ms
memory: 7500kb

input:

2
1114627670617095929 177024338535020511
1000

output:

1

result:

ok 1 number(s): "1"

Test #3:

score: 5
Accepted
time: 0ms
memory: 7592kb

input:

2
1149393890526355314 1070730158013930700
1001

output:

315168037

result:

ok 1 number(s): "315168037"

Test #4:

score: 5
Accepted
time: 0ms
memory: 7508kb

input:

2
971930549804858302 431201925917048822
1001

output:

713084688

result:

ok 1 number(s): "713084688"

Test #5:

score: 5
Accepted
time: 6ms
memory: 7900kb

input:

15
3 2 1 3 0 3 2 2 3 0 3 3 3 1 1
111100000011100110100011100000100010011010010011011101110110000011100111101101100011111100111010001010010001001111010011000000110110011111000011100100010100011010110000000010011110101111110110110100011101011101011100110000001100110111101001101001010111011000000110010...

output:

919883

result:

ok 1 number(s): "919883"

Test #6:

score: 5
Accepted
time: 24ms
memory: 11184kb

input:

18
3 0 3 2 3 3 3 3 3 3 3 1 3 3 3 3 1 3
101101001111111010001101010111101111110111100111111011010010011000101111101100011100101111101001001010010110011001001110011101011100001100100000100011001110101101110010011011000001001001000000001001010000010100010101010101010001001110100111001001110001101000111...

output:

812380442

result:

ok 1 number(s): "812380442"

Test #7:

score: 5
Accepted
time: 24ms
memory: 11640kb

input:

18
3 2 3 3 3 3 3 3 3 1 1 1 2 3 1 3 3 3
100101100011011110000000100100001001010001001000110011011111000010001110111011111010001011101101010101111111000111000011110001100111100001110100110100010101111100001001110110000000111100110011011011000110001010100110001101011011011101000110001000101101000110000...

output:

609445751

result:

ok 1 number(s): "609445751"

Test #8:

score: 5
Accepted
time: 3ms
memory: 7472kb

input:

9
774618017057897470 1150648813667465147 936044467577552867 540429591977619391 492984435788926911 706491668336975855 1148409108818935103 1152305623476461243 1151646826418395103
101100111100110000011001010001100101011001010001111000000000000001011100001010001011100110010110100001000101101101101001011...

output:

762304370

result:

ok 1 number(s): "762304370"

Test #9:

score: 5
Accepted
time: 0ms
memory: 7640kb

input:

9
864195661015236599 828072363954386938 215046877307787767 125420173910435807 863300627424341495 1125890835854768063 538106264396606431 1008449764986412979 1112933880000274175
1111011011101000110000110000110110111101111110011110001110010111100001010001110110111000101011110011001000101011100011011100...

output:

91522040

result:

ok 1 number(s): "91522040"

Test #10:

score: 5
Accepted
time: 4ms
memory: 7452kb

input:

9
1060294142652751871 270953131468627965 950114304166317032 1023152535943950935 1124721212123772879 1136030244306680786 575888989072637942 576457170017579983 1071468780714196734
10010111011101001111011010000011000000111111000001100001001110001000000000101001001101110110001001111011110111101001000000...

output:

235859607

result:

ok 1 number(s): "235859607"

Test #11:

score: 5
Accepted
time: 6ms
memory: 7692kb

input:

11
1044692707433249934 1008683100277431676 999797431367270367 1143631656501850799 1098790111790735245 468268805647233519 539233207094867537 414313023104679647 1113992177660166126 1150563014851263359 1146149597257104766
111100100001011011010001100111000010001101110011110101110101010110100111111011000...

output:

238088536

result:

ok 1 number(s): "238088536"

Test #12:

score: 5
Accepted
time: 2ms
memory: 7524kb

input:

11
1136928866896019455 954477066817884159 139540257629524991 920699090857753087 852006989960417247 557707207097472255 575228611095427007 1006976729003116287 709142041517850567 1136595818501773047 1006109764096082108
100001110101001011001100010000100000111110011110100011000011111011000001010001110001...

output:

770640307

result:

ok 1 number(s): "770640307"

Test #13:

score: 5
Accepted
time: 3ms
memory: 7496kb

input:

11
1152568556892716543 1152920608551467963 216135265528237819 1116892698712710517 1125524963696923135 990737955748133887 575754796832378359 959086400709851129 571809817905978127 391758946252877613 553053934827077551
100001001101100001010110011000000001110110100101011111010110001101000110111100110011...

output:

12490130

result:

ok 1 number(s): "12490130"

Test #14:

score: 5
Accepted
time: 14ms
memory: 7516kb

input:

13
431747275278769839 792173935971856335 842168688984356222 709201683711004463 1096549254077341383 432312541824942061 423302887995576278 1152284609275166700 1150353045444060639 858881033326555901 429385610205061119 394803803773730111 792573841785221941
11101010110000000010101000000011010001110011111...

output:

711924090

result:

ok 1 number(s): "711924090"

Test #15:

score: 5
Accepted
time: 15ms
memory: 7720kb

input:

13
384952197575497562 925188207794820790 819636358341950664 1008806169945307033 485498962656536575 576170342985224059 1152884825316839167 519602798379984887 1148271257506507710 864338725486642591 141147914734645085 945751520335947454 828363124049108987
10111011110011010100110001011011010100001001111...

output:

17257245

result:

ok 1 number(s): "17257245"

Test #16:

score: 5
Accepted
time: 13ms
memory: 7632kb

input:

13
812148678079544783 531352737042856447 360252648370171639 827797221788122302 1076354330155122647 571657826460300281 995857311985303518 576390067592282047 573059687658290935 1134130623250689782 573953435640528550 1148043723132895167 576443122223672059
11010001100111100001101001010010100111100000010...

output:

513017470

result:

ok 1 number(s): "513017470"

Test #17:

score: 5
Accepted
time: 619ms
memory: 11492kb

input:

18
557601891651940085 863281395625602303 810348831133032447 855679530581929974 1143340273566153982 1142779849869883883 495305789849593903 1141378831228050923 539285017652624765 1151477836095937523 968834653063196607 462735989800959869 567170978455011071 936570564589289083 1089862139502785535 1274543...

output:

905600077

result:

ok 1 number(s): "905600077"

Test #18:

score: 5
Accepted
time: 625ms
memory: 11012kb

input:

18
35461063007254983 250722149174607860 990787107658114938 521176448595639215 1142533318210222071 848423510290851199 936184673027902967 1035761934176939767 1152921455940040799 759980081052254206 841582125096893943 1105339004669119437 1071810531808477044 1072419334446896991 1152903339507575642 131161...

output:

946673491

result:

ok 1 number(s): "946673491"

Test #19:

score: 5
Accepted
time: 630ms
memory: 11476kb

input:

18
526745011001725941 995280101634205694 1150650377238908861 1152780629645981351 378291368993988607 754341611678006135 1133780828220553215 467476844077883365 998548842292821951 1125758065340935934 1074758391215161343 359069688757419477 863137999561424871 459006511440394231 856772308259666431 2832407...

output:

333911712

result:

ok 1 number(s): "333911712"

Test #20:

score: 5
Accepted
time: 624ms
memory: 11440kb

input:

18
1116852845721419519 564031047050710929 1152918474977164029 288041155646291455 647954749928207825 978368260719998815 1141854864204889983 1121382897240509261 576459613035256827 1134273717606465523 1124121994315404271 714513083207720351 1001083345502337005 642993847483219627 1143878547027000662 1139...

output:

437797272

result:

ok 1 number(s): "437797272"