QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#277500#4283. Power of XORPetroTarnavskyi#TL 2034ms134300kbC++202.6kb2023-12-06 19:30:152023-12-06 19:30:16

Judging History

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

  • [2023-12-06 19:30:16]
  • 评测
  • 测评结果:TL
  • 用时:2034ms
  • 内存:134300kb
  • [2023-12-06 19:30:15]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second

typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;

const int mod = 1'000'000'007;

int add(int a, int b)
{
	return a + b < mod ? a + b : a + b - mod;
}
int sub(int a, int b)
{
	return a - b >= 0 ? a - b : a - b + mod;
}
int mult(int a, int b)
{
	return (LL)a * b % mod;
}
int binpow(int a, int p)
{
	int ans = 1;
	while (p)
	{
		if (p & 1) ans = mult(ans, a);
		a = mult(a, a);
		p /= 2;
	}
	return ans;
}
int inv(int a)
{
	return binpow(a, mod - 2);
}

void convXor(VI& a, int k)
{
	FOR(i, 0, k)
		FOR(j, 0, 1 << k)
			if((j & (1 << i)) == 0)
			{
				int u = a[j];
				int v = a[j + (1 << i)];
				a[j] = add(u, v);
				a[j + (1 << i)] = sub(u, v);
			}
}

const int MAX = 44;
const int MAXR = 19;
const int MAXL = 24;

VI cnt[2];

void f(int t, vector<LL> b)
{
	int n = SZ(b);
	FOR (mask, 0, 1 << n)
	{
		LL x = 0;
		FOR (j, 0, n)
		{
			if (mask & (1 << j))
				x ^= b[j];
		}
		int num = __builtin_popcountll(x >> MAXR);
		LL msk = x & ((1 << MAXR) - 1);
		msk += num << MAXR;
		cnt[t][msk]++;
	}
}


int main()
{
	ios::sync_with_stdio(0); 
	cin.tie(0);
	cout << fixed << setprecision(15);
	
	int n, k;
	cin >> n >> k;
	vector<LL> a(n);
	FOR (i, 0, n)
	{
		cin >> a[i];
	}
	vector<LL> basis;
	FOR (i, 0, n)
	{
		FOR (j, 0, SZ(basis))
		{
			if ((a[i] ^ basis[j]) < a[i])
				a[i] ^= basis[j];
		}
		if (a[i] != 0)
			basis.PB(a[i]);
		sort(ALL(basis), greater());
	}
	
	vector<LL> b[2];
	FOR (i, 0, SZ(basis))
	{
		int idx = basis[i] >= (1 << (MAXR));
		b[idx].PB(basis[i]);
	}
	FOR (t, 0, 2)
	{
		cnt[t].resize(1 << MAXL);
		f(t, b[t]);
	}
	
	
	int ans = 0;
	int two = 2;
	two = binpow(two, n - SZ(basis));
	
	
	VI res(MAX + 1);
	
	convXor(cnt[0], MAXL);
	convXor(cnt[1], MAXL);
	FOR(j, 0, 1 << MAXL)
		cnt[1][j] = mult(cnt[1][j], cnt[0][j]);
	convXor(cnt[1], MAXL);
			
	FOR (j, 0, 1 << MAXL)
	{
		int i = j >> MAXR;
		int x = i + __builtin_popcount(j - (i << MAXR));
		res[x] = add(res[x], cnt[1][j]);
	}
	
	FOR(x, 0, MAX + 1)
	{
		int coef = mult(res[x], inv(1 << MAXL));
		coef = mult(coef, binpow(x, k));
		coef = mult(coef, two); 
		ans = add(ans, coef);

	}
	
	cerr << db(clock()) / CLOCKS_PER_SEC << '\n';
	cout << ans << '\n';
	
	
	
	
	
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1072ms
memory: 134252kb

input:

3 2
1 2 3

output:

12

result:

ok 1 number(s): "12"

Test #2:

score: 0
Accepted
time: 1093ms
memory: 134252kb

input:

2 1000000000
1 2

output:

140625003

result:

ok 1 number(s): "140625003"

Test #3:

score: 0
Accepted
time: 1062ms
memory: 134268kb

input:

3 4
21 31 15

output:

1076

result:

ok 1 number(s): "1076"

Test #4:

score: 0
Accepted
time: 1078ms
memory: 134224kb

input:

4 10
21 16 23 30

output:

3504120

result:

ok 1 number(s): "3504120"

Test #5:

score: 0
Accepted
time: 1062ms
memory: 134228kb

input:

5 795325759
23 18 18 15 24

output:

398580583

result:

ok 1 number(s): "398580583"

Test #6:

score: 0
Accepted
time: 1075ms
memory: 134296kb

input:

6 425010546
15190825693299 11021868218180 10853490476696 16489831131502 15731786397897 1859285400474

output:

226806798

result:

ok 1 number(s): "226806798"

Test #7:

score: 0
Accepted
time: 1080ms
memory: 134208kb

input:

7 376524109
14035202899482 10047025581205 744778190838 10085364176616 17517303536898 10648638998430 4344258259221

output:

909089159

result:

ok 1 number(s): "909089159"

Test #8:

score: 0
Accepted
time: 1067ms
memory: 134272kb

input:

8 849112677
12651182249229 2557626671152 16190796268614 7679451552477 1419165382365 16010747922241 1877804892046 6782866140038

output:

60890703

result:

ok 1 number(s): "60890703"

Test #9:

score: 0
Accepted
time: 1074ms
memory: 134216kb

input:

9 874735099
10148022499611 4300816040299 6425463859799 11220407430827 16167481816769 5361425691648 9036180330515 1461806017525 5752555300268

output:

371891946

result:

ok 1 number(s): "371891946"

Test #10:

score: 0
Accepted
time: 1093ms
memory: 134272kb

input:

10 466547903
14475814446599 10414899512095 8279261110485 15402964537241 12059977291235 14960757658011 15642794803423 176456760404 8544855584093 939455648117

output:

705005476

result:

ok 1 number(s): "705005476"

Test #11:

score: 0
Accepted
time: 1069ms
memory: 134300kb

input:

11 587282176
2381973819369 7896756717881 3605049079058 3476202500557 8161539414084 4107261754597 4052905214220 13489145138694 14249896320133 4915388559035 946556082447

output:

221771132

result:

ok 1 number(s): "221771132"

Test #12:

score: 0
Accepted
time: 1094ms
memory: 134244kb

input:

12 416671000
12040275816251 17062751464343 7135252213488 464175530141 1680797265108 8088672081270 15974373338891 2807308701611 10474875618229 14385428199760 7217460885705 14772837072591

output:

888526388

result:

ok 1 number(s): "888526388"

Test #13:

score: 0
Accepted
time: 1099ms
memory: 134248kb

input:

13 555186260
16812780767710 10577402574202 14435021461484 7629604678144 2685467464476 6345623360274 243420234591 10035113157523 3422776077242 10218637237089 14851966122299 403170012001 9905420122107

output:

990043010

result:

ok 1 number(s): "990043010"

Test #14:

score: 0
Accepted
time: 1100ms
memory: 134252kb

input:

14 509328299
8353561750434 10104176798819 6443583453798 16526745760567 11644429218948 7613211796505 14675590153019 16014035780673 8977332980184 8018462423140 10321575146167 3765866187251 951943560884 16567591980900

output:

554786244

result:

ok 1 number(s): "554786244"

Test #15:

score: 0
Accepted
time: 1079ms
memory: 134216kb

input:

15 608613602
13478763858236 3740903255952 1077573334827 10777446313857 9164622625061 3532139720401 10581691792868 227725402800 1100326438302 11314744041629 5716533742148 13171916589439 3380813371904 4280184438172 3241608634862

output:

451055479

result:

ok 1 number(s): "451055479"

Test #16:

score: 0
Accepted
time: 1088ms
memory: 134248kb

input:

16 940201087
10256426323317 3262426443677 11042930351118 9509672586143 6874576733055 17425354233945 44840572217 271060611230 5160013582892 940549858628 3460145241956 1911512043119 6262508016313 15998335209279 4331486722244 1174379722227

output:

609521624

result:

ok 1 number(s): "609521624"

Test #17:

score: 0
Accepted
time: 1087ms
memory: 134280kb

input:

17 224938820
17119676032384 14016470814638 9555327895162 4956367760197 14164877522334 11840938437493 196922732084 1117964651219 15662255500985 6799149377748 2081570899516 8101318468846 6806038800783 8481897921532 14327689591834 3468429675406 707483765694

output:

952629882

result:

ok 1 number(s): "952629882"

Test #18:

score: 0
Accepted
time: 1093ms
memory: 134260kb

input:

18 572144592
1034330548675 7466761131151 5479486866730 5805192559012 2072047969997 14094135393106 3957442001455 9636000453501 6359658906102 13786563194342 12655202300227 17497546480004 15210614567784 5757118085432 3507806179905 4092815624732 2831474245754 8905127237409

output:

711094061

result:

ok 1 number(s): "711094061"

Test #19:

score: 0
Accepted
time: 1096ms
memory: 134244kb

input:

19 655059034
10160251337230 17368680333349 7582672215712 15170782424265 11091464398448 3468569802147 12985801017272 11885768849226 2042891901510 5816113601266 17200614913667 3230577285683 6122037312518 4476865090037 17458280591698 8087876238641 12295868407218 14891985681505 9046310739642

output:

444845559

result:

ok 1 number(s): "444845559"

Test #20:

score: 0
Accepted
time: 1133ms
memory: 134212kb

input:

20 230956009
5657766305333 6062575310370 15139059764699 15999531683504 8700249448570 8496370986569 11931362029342 16808274736949 6582914043608 3148217142903 623248093777 2603754608083 16741237934194 11551777078922 17177864498497 147568049427 2693939410255 11977553059228 14614351055705 11790115139758

output:

618103113

result:

ok 1 number(s): "618103113"

Test #21:

score: 0
Accepted
time: 1186ms
memory: 134284kb

input:

21 991001581
13505588614813 8588095735948 6076766289787 11667017057163 7602334689492 3100571431902 16456031754497 17012042226760 2298783364823 2292586959243 16484353107729 6379611127333 2309984518512 17222120007066 15742378844056 10137340715213 11581793910964 6058313717190 9891627922923 939856806688...

output:

340865032

result:

ok 1 number(s): "340865032"

Test #22:

score: 0
Accepted
time: 1300ms
memory: 134236kb

input:

22 793915239
14683316686425 5162188247000 7429819452817 16611661938749 11084135813793 13856133740403 13108004035448 13856666274966 9461726048738 5612503807810 15177562338647 5006352927897 15216557346760 8527880141821 15843683785466 7692179013817 127553824751 5234432790248 6453714209319 1152804933059...

output:

669154856

result:

ok 1 number(s): "669154856"

Test #23:

score: 0
Accepted
time: 1336ms
memory: 134216kb

input:

23 46024280
7514210736994 16544433148860 5457306548546 5030077832970 10322997084235 5669909500374 8381456993928 10988407597025 8111544042162 10588037243918 12116378947678 13379626855924 10216405913667 9728737199159 12487637411090 11957321472850 15722206258699 17236861929685 15970454160165 2302405750...

output:

560027727

result:

ok 1 number(s): "560027727"

Test #24:

score: 0
Accepted
time: 2034ms
memory: 134292kb

input:

24 987331368
17225443429613 10254751679227 3710337795354 9960878278886 3536301339395 8181058117864 15108863858942 3302198449417 6902193486641 8347347537914 8639500195933 3284177408604 9417624777639 5862512932466 10643916118422 14918257011693 8684158391259 10231904191169 17423403571877 13578583210490...

output:

902893141

result:

ok 1 number(s): "902893141"

Test #25:

score: 0
Accepted
time: 2024ms
memory: 134220kb

input:

25 6356342
633691957112 12691686740693 2837615772764 12061807109950 14923133272874 14814883481961 15999555715426 13555874031521 6459210859425 556162071453 8417793517180 3701478570933 2799170553419 4135575419616 8116459391381 584184726086 12797443971069 16036119552969 1578981557574 7989957867379 1096...

output:

314404834

result:

ok 1 number(s): "314404834"

Test #26:

score: -100
Time Limit Exceeded

input:

26 928302018
15796444138481 11937355225779 6149665857421 3432433989770 2307410764687 17243936548925 6178469381919 8828731666077 3415993426130 1036426554693 14386104368478 13448264214939 12599370135462 16273290761628 7852195291114 16757484794229 2980400729227 11047051074570 5685198104638 421391190008...

output:

591376981

result: