UOJ Logo Universal Online Judge

UOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#650048#750. 【UNR #6】小火车Cry_For_theMoon10035430ms36240kbC++ 142.1kb2023-08-16 11:41:302023-08-16 11:41:31

测评历史

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

  • [2023-08-16 11:41:31]
  • 评测
  • 测评结果:100
  • 用时:35430ms
  • 内存:36240kb
  • [2023-08-16 11:41:30]
  • 提交

answer

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN = 40,MAXM = 20;

ll n,m,p,a[MAXN];

typedef array<ll,2> pr; //(val,mask)

pr L[(1<<MAXM)+10],R[(1<<MAXM)+10];

typedef array<ll,3> tr;

int x,y;

tr qry(ll l,ll r){ 
	ll ra = -1,rb = -1,cnt = 0;

	auto add = [&](ll mask){
		//printf("add %lld\n",mask);

		if(ra == -1)ra = mask;
		else rb = mask;
	};

	//a+b in [l,r]
	for(int i=1,pl=y,pr=y;i<=x;i++){
		while(pl && L[i][0] + R[pl][0] >= l)pl--;
		while(pr && L[i][0] + R[pr][0] > r)pr--;

		rep(j,pl+1,pr){
			ll mask = L[i][1] + (R[j][1] << m);
			add(mask);

			if(rb != -1)break;
		}
		cnt += max(0,pr-pl);
	}
	
	//a+b in [l+p,r+p]
	
	for(int i=1,pl=y,pr=y;i<=x;i++){
		while(pl && L[i][0] + R[pl][0] >= l+p)pl--;
		while(pr && L[i][0] + R[pr][0] > r+p)pr--;

		rep(j,pl+1,pr){
			ll mask = L[i][1] + (R[j][1] << m);
			add(mask);

			if(rb != -1)break;
		}
		cnt += max(0,pr-pl);
	}

	assert(ra != -1);
	return {ra,rb,cnt};
}

ll ans[MAXN];

int main(){

	cin>>n>>p;
	rep(i,0,n-1)cin>>a[i];

	if(n==1){
		cout<<"1";
		exit(0);
	}

	m = n/2; //[0,m) and [m,n)

	rep(mask,0,(1<<m)-1){
		ll sum = 0;
		rep(j,0,m-1)if(mask>>j&1)sum = (sum + a[j])%p;
		L[++x] = {sum,mask};
	}
	rep(mask,0,(1<<(n-m))-1){
		ll sum = 0;
		rep(j,0,n-m-1)if(mask>>j&1)sum = (sum + a[m+j])%p;
		R[++y] = {sum,mask};
	}
	sort(L+1,L+1+x);
	sort(R+1,R+1+y);

	ll L = 0,R = p-1;
	while(L<R){
		ll mid = (L+R)>>1;
		ll cnt = qry(L,mid)[2];


		if(cnt > mid-L+1){
			R = mid;
		}else{
			L = mid+1;
		}
	}

	tr res = qry(L,L);

	assert(res[0] != -1 && res[1] != -1);

	rep(i,0,n-1)if(res[0]>>i&1)ans[i]++;
	rep(i,0,n-1)if(res[1]>>i&1)ans[i]--;

	rep(i,0,n-1)cout<<ans[i]<<" ";

    return 0;
}

这程序好像有点Bug,我给组数据试试?

详细

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 20
Accepted
total time: 10ms
memory: 3484kb

Test #1:

score: 20
Accepted
time: 1ms
memory: 3484kb

input:

15 32767
32014 29755 20719 7668 31261 4190 15336 16007 8671 8380 3834 17342 30850 26743 2095

output:

-1 -1 -1 -1 -1 1 -1 -1 -1 1 -1 -1 1 -1 1 

result:

ok 

Test #2:

score: 0
Accepted
time: 1ms
memory: 3444kb

input:

15 32767
17111 21127 7828 9487 8681 2910 26947 31312 2295 15405 10362 1957 28853 20724 13793

output:

-1 -1 0 -1 0 0 -1 -1 1 0 -1 1 0 0 1 

result:

ok 

Test #3:

score: 0
Accepted
time: 1ms
memory: 3484kb

input:

15 32767
233 28386 17524 2281 8762 11740 14193 2102 29038 4562 14519 14916 29832 7458 9287

output:

0 0 0 0 0 0 0 -1 -1 -1 0 0 -1 0 0 

result:

ok 

Test #4:

score: 0
Accepted
time: 1ms
memory: 3376kb

input:

15 32767
30162 23080 26786 11962 29882 17826 27557 26997 13393 15081 23924 6146 22347 23854 20840

output:

-1 0 0 0 -1 1 -1 -1 0 -1 0 1 -1 -1 1 

result:

ok 

Test #5:

score: 0
Accepted
time: 1ms
memory: 3436kb

input:

15 32767
3271 19569 26225 26168 26396 29080 25393 13084 14748 12742 728 20089 18227 29132 25484

output:

0 1 0 0 0 0 0 0 -1 0 1 -1 -1 0 0 

result:

ok 

Test #6:

score: 0
Accepted
time: 1ms
memory: 3388kb

input:

15 32767
8930 20955 2953 18286 28113 25157 28302 14907 28962 30440 23624 23459 7398 11354 26861

output:

1 1 0 0 1 -1 1 -1 0 0 -1 1 -1 0 1 

result:

ok 

Test #7:

score: 0
Accepted
time: 1ms
memory: 3356kb

input:

15 32767
23035 14339 4866 23967 2433 1100 550 15167 15503 27310 8123 16246 28367 30567 20445

output:

0 1 1 0 0 1 0 1 -1 0 -1 -1 -1 0 0 

result:

ok 

Test #8:

score: 0
Accepted
time: 1ms
memory: 3388kb

input:

15 32767
30812 21722 10861 10953 1655 5878 32586 5465 9941 13994 22090 21860 4779 19116 6997

output:

0 0 0 0 0 -1 0 0 0 -1 1 0 1 0 -1 

result:

ok 

Test #9:

score: 0
Accepted
time: 1ms
memory: 3376kb

input:

15 32767
27695 28510 3302 12732 1447 31908 8482 12697 4862 27702 16031 18524 26772 10633 31145

output:

0 -1 0 0 0 0 0 0 1 0 1 0 -1 0 -1 

result:

ok 

Test #10:

score: 0
Accepted
time: 1ms
memory: 3364kb

input:

15 23869
1225 22519 11819 13062 3649 2271 7869 1529 11521 2130 12776 16407 14654 10619 19255

output:

1 0 0 1 1 0 0 -1 0 0 0 -1 0 0 0 

result:

ok 

Subtask #2:

score: 20
Accepted
total time: 8ms
memory: 3488kb

Test #11:

score: 20
Accepted
time: 1ms
memory: 3392kb

input:

20 1048575
564181 173924 775561 820558 961613 705758 136507 410279 242197 889001 43481 685634 645386...

output:

-1 1 -1 1 -1 -1 1 1 1 1 1 1 1 -1 -1 1 1 1 1 1 

result:

ok 

Test #12:

score: 0
Accepted
time: 1ms
memory: 3468kb

input:

20 1048575
164957 198949 599344 37459 424813 340114 973657 543017 650677 795796 680228 600452 609316...

output:

-1 0 0 -1 0 0 0 0 -1 1 -1 1 0 1 1 1 0 0 0 1 

result:

ok 

Test #13:

score: 0
Accepted
time: 1ms
memory: 3468kb

input:

20 1048575
813184 214022 521111 769948 641983 916709 263732 65933 50824 577793 1035869 101648 192487...

output:

0 1 1 1 1 -1 0 0 -1 1 1 -1 0 0 0 1 1 -1 -1 -1 

result:

ok 

Test #14:

score: 0
Accepted
time: 1ms
memory: 3400kb

input:

20 1048575
844138 173629 586921 677063 367661 626506 862819 923308 701317 92878 735322 694516 230827...

output:

-1 1 1 0 -1 1 0 -1 -1 0 -1 1 -1 -1 0 1 -1 1 1 0 

result:

ok 

Test #15:

score: 0
Accepted
time: 1ms
memory: 3464kb

input:

20 1048575
268568 269816 1022878 761593 511439 474611 452542 134284 842999 997181 33571 143491 50750...

output:

0 -1 -1 -1 0 0 1 0 0 0 -1 0 0 1 0 0 0 0 1 0 

result:

ok 

Test #16:

score: 0
Accepted
time: 1ms
memory: 3392kb

input:

20 1048575
680074 354269 515414 283952 743266 311573 977587 174466 480671 87233 850858 653141 103082...

output:

1 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 0 0 0 0 0 -1 

result:

ok 

Test #17:

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

input:

20 1048575
611362 977749 742894 270997 1013162 718682 348298 879293 710011 481967 874426 506581 3519...

output:

1 0 0 0 0 0 0 1 1 1 1 -1 1 0 -1 -1 0 -1 -1 1 

result:

ok 

Test #18:

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

input:

20 1048575
793652 897637 602861 103687 301876 664793 314294 417202 767564 603752 317858 889646 85668...

output:

1 -1 1 0 -1 1 1 1 -1 0 -1 0 -1 0 -1 1 0 1 -1 0 

result:

ok 

Test #19:

score: 0
Accepted
time: 1ms
memory: 3324kb

input:

20 1048575
723913 13015 261644 113553 162325 393331 327668 643147 436055 962262 870594 1020796 50563...

output:

0 -1 0 1 -1 1 1 0 0 -1 0 0 1 0 1 -1 1 0 -1 -1 

result:

ok 

Test #20:

score: 0
Accepted
time: 1ms
memory: 3488kb

input:

20 345610
160327 330346 310103 172961 102527 119742 31402 280595 124514 11689 102900 257956 294388 2...

output:

0 -1 0 0 0 -1 0 0 0 0 0 0 -1 0 -1 -1 -1 0 0 -1 

result:

ok 

Subtask #3:

score: 20
Accepted
total time: 1484ms
memory: 11640kb

Test #21:

score: 20
Accepted
time: 294ms
memory: 11556kb

input:

36 68719476735
8192421667 51149053040 39112633235 24879277471 25450137171 33635199054 15502186378 15...

output:

0 -1 0 1 1 0 0 0 1 1 -1 -1 1 -1 1 0 -1 1 -1 -1 -1 0 0 -1 -1 0 0 1 0 0 0 1 1 -1 1 0 

result:

ok 

Test #22:

score: 0
Accepted
time: 299ms
memory: 11552kb

input:

36 68719476735
57264797044 65622980792 19214399229 34484083431 17363298458 3010377807 11975833361 50...

output:

0 1 -1 1 -1 1 0 -1 0 -1 -1 0 -1 0 0 0 0 -1 0 0 0 0 0 -1 0 1 0 1 -1 0 -1 0 0 1 -1 1 

result:

ok 

Test #23:

score: 0
Accepted
time: 295ms
memory: 11484kb

input:

36 68719476735
60410405069 48545194888 51250850407 64509639515 23536012825 46776176922 6036236054 61...

output:

1 0 0 -1 0 0 -1 0 -1 0 1 0 -1 0 -1 0 0 0 0 0 1 -1 1 0 1 0 0 1 0 0 0 1 -1 0 1 0 

result:

ok 

Test #24:

score: 0
Accepted
time: 300ms
memory: 11620kb

input:

36 68719476735
54412684975 35163749063 67213968182 50133693508 39573341818 1702174868 18150260382 48...

output:

0 0 -1 0 -1 0 1 0 0 -1 0 -1 0 0 0 1 0 1 1 -1 1 1 0 -1 0 0 1 -1 -1 -1 -1 -1 1 0 1 1 

result:

ok 

Test #25:

score: 0
Accepted
time: 296ms
memory: 11640kb

input:

36 60934165625
32804472007 26897296013 30488480303 20419148761 10216675572 48813912353 55380068102 6...

output:

1 0 1 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 -1 1 -1 0 1 -1 0 -1 0 0 -1 0 0 0 1 -1 0 0 

result:

ok 

Subtask #4:

score: 40
Accepted
total time: 33928ms
memory: 36240kb

Test #26:

score: 40
Accepted
time: 1349ms
memory: 36232kb

input:

40 1099511627775
34582838498 1045960865072 992410102369 772072667122 1092372423614 130745108134 1856...

output:

-1 -1 -1 1 1 -1 1 1 1 -1 1 1 -1 -1 1 1 1 -1 1 -1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 1 1 -1 -1 -1 -1 

result:

ok 

Test #27:

score: 0
Accepted
time: 1345ms
memory: 36232kb

input:

40 1099511627775
200872975621 697765676533 774415476926 997128021938 558940758895 933955418899 92143...

output:

0 0 1 0 -1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 -1 0 -1 0 0 0 1 1 1 0 0 0 -1 1 -1 

result:

ok 

Test #28:

score: 0
Accepted
time: 1341ms
memory: 36132kb

input:

40 1099511627775
1089825943781 893655875192 420034084192 140255923457 1009368588251 721144316192 259...

output:

-1 0 0 1 -1 -1 1 -1 -1 1 0 0 -1 0 0 0 1 -1 1 0 0 -1 0 -1 1 0 0 0 1 -1 0 -1 1 -1 0 0 0 1 -1 -1 

result:

ok 

Test #29:

score: 0
Accepted
time: 1337ms
memory: 36192kb

input:

40 1099511627775
317119094176 374022242599 675858995716 595098900461 184364977838 368729955676 50897...

output:

-1 -1 0 0 0 1 -1 0 1 -1 1 1 0 0 -1 1 -1 0 0 1 -1 1 0 -1 0 0 1 1 1 1 0 0 0 0 0 0 1 -1 0 0 

result:

ok 

Test #30:

score: 0
Accepted
time: 1372ms
memory: 36188kb

input:

40 1099511627775
592386363451 541764655147 264665958257 820638141461 912711765863 1035582357851 4769...

output:

0 -1 0 0 0 0 0 -1 0 0 -1 -1 1 0 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 0 1 0 -1 0 -1 0 0 0 0 0 

result:

ok 

Test #31:

score: 0
Accepted
time: 1369ms
memory: 36124kb

input:

40 1099511627775
104362198981 580763969459 1011981622496 851446383203 969824713196 505990811248 4105...

output:

-1 -1 0 -1 0 1 1 1 1 0 1 0 0 1 0 -1 -1 0 0 1 0 0 -1 -1 0 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 

result:

ok 

Test #32:

score: 0
Accepted
time: 1341ms
memory: 36228kb

input:

40 1099511627775
903606864929 664352310707 974316721981 891083453269 1063195719004 808984357607 1036...

output:

0 0 0 -1 0 -1 0 0 0 0 -1 0 1 0 0 0 0 1 0 1 0 -1 1 0 0 0 -1 1 0 0 1 0 -1 -1 0 0 0 -1 0 1 

result:

ok 

Test #33:

score: 0
Accepted
time: 1359ms
memory: 36212kb

input:

40 1099511627775
23582097052 1005183239567 540316559085 880993501886 268905577882 689769044222 24070...

output:

1 -1 0 -1 -1 0 0 -1 -1 1 -1 0 -1 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 -1 1 -1 1 -1 0 -1 0 1 0 0 -1 

result:

ok 

Test #34:

score: 0
Accepted
time: 1331ms
memory: 36240kb

input:

40 1099511627775
269160056618 538320113236 617045828042 459035797436 623547988756 790988713754 18297...

output:

0 0 1 1 0 0 1 0 1 -1 -1 0 0 -1 0 0 1 1 0 0 0 1 1 0 -1 0 0 0 0 1 1 0 0 1 1 1 1 -1 -1 -1 

result:

ok 

Test #35:

score: 0
Accepted
time: 1328ms
memory: 36148kb

input:

40 1099511627775
884656633679 568413717293 226004433343 502458718799 881134829167 1004917437598 4520...

output:

1 -1 1 1 -1 1 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 1 1 0 -1 -1 1 -1 1 0 -1 1 -1 -1 -1 1 -1 0 0 1 0 

result:

ok 

Test #36:

score: 0
Accepted
time: 1380ms
memory: 36144kb

input:

40 1099511627775
458617235764 734957315281 450259545938 870203009893 463598688181 857779811434 78881...

output:

-1 0 0 0 0 1 -1 -1 -1 1 0 0 1 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 -1 0 1 -1 0 0 -1 -1 1 0 

result:

ok 

Test #37:

score: 0
Accepted
time: 1374ms
memory: 36204kb

input:

40 1099511627775
481597323346 922477348867 395104787464 788199663064 354068557816 708137115632 52762...

output:

1 0 -1 0 0 0 -1 0 -1 1 -1 -1 0 1 -1 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 -1 1 -1 0 0 1 0 1 -1 0 

result:

ok 

Test #38:

score: 0
Accepted
time: 1343ms
memory: 36156kb

input:

40 1099511627775
372359631286 626995238342 663922290404 998809712018 383032810283 490922994967 35823...

output:

0 -1 1 0 0 1 0 0 1 0 -1 1 0 0 -1 0 0 0 0 -1 -1 1 0 1 0 0 0 0 1 1 -1 -1 0 0 1 0 1 0 1 1 

result:

ok 

Test #39:

score: 0
Accepted
time: 1399ms
memory: 36232kb

input:

40 1099511627775
380775691717 1006780980397 638058344608 426273572040 545791968589 207779873622 9137...

output:

-1 0 0 1 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 -1 0 -1 -1 -1 0 0 1 0 1 0 1 0 1 

result:

ok 

Test #40:

score: 0
Accepted
time: 1390ms
memory: 36188kb

input:

40 893003785191
688393354592 86638261984 674867487957 392067041443 451529276781 232273102534 9975309...

output:

0 -1 -1 0 0 -1 0 0 0 0 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 0 -1 -1 -1 -1 -1 0 -1 0 0 0 0 0 0 0 

result:

ok 

Test #41:

score: 0
Accepted
time: 1364ms
memory: 36232kb

input:

40 1099511627775
719866795061 108013482646 1041900316186 419067703081 173599045327 868033482163 6287...

output:

1 -1 0 -1 0 0 -1 -1 1 0 -1 1 0 -1 0 1 0 1 0 0 1 1 1 1 0 1 -1 0 1 -1 0 0 0 -1 0 1 -1 1 0 -1 

result:

ok 

Test #42:

score: 0
Accepted
time: 1398ms
memory: 36200kb

input:

40 1099511627775
545867738489 708887826302 1064788086812 93133464328 745067714624 577688289106 23283...

output:

0 0 -1 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 1 1 0 0 0 1 1 -1 0 0 -1 1 -1 1 0 0 -1 0 0 0 -1 0 -1 

result:

ok 

Test #43:

score: 0
Accepted
time: 1323ms
memory: 36116kb

input:

40 1099511627775
12718811461 174489256757 170076597236 1044404600452 25437622922 803109201494 340153...

output:

1 1 -1 0 1 -1 -1 1 1 1 0 1 -1 -1 1 1 1 -1 1 1 1 -1 1 1 0 0 1 0 -1 1 1 1 -1 -1 1 0 0 -1 -1 1 

result:

ok 

Test #44:

score: 0
Accepted
time: 1363ms
memory: 36156kb

input:

40 1099511627775
340935262342 571052784589 1008444349193 36053587252 433625314312 417641103091 72107...

output:

0 -1 0 1 1 1 0 -1 0 1 1 -1 0 1 1 -1 1 1 -1 0 1 1 0 -1 0 0 0 -1 -1 0 0 0 0 0 1 -1 1 1 -1 0 

result:

ok 

Test #45:

score: 0
Accepted
time: 1330ms
memory: 36052kb

input:

40 1099511627772
344972156246 267020585482 113490740698 504008624069 560753994418 308255480129 97379...

output:

0 -1 0 -1 0 0 -1 -1 0 0 0 -1 1 1 0 1 -1 -1 0 1 0 0 -1 0 0 -1 0 1 0 1 0 1 1 1 -1 -1 -1 0 0 -1 

result:

ok 

Test #46:

score: 0
Accepted
time: 1327ms
memory: 36232kb

input:

40 1099511627771
993350889206 696089931608 956456772706 212321477138 310641620711 506250193162 25312...

output:

0 -1 1 -1 -1 -1 0 0 0 0 1 1 0 -1 0 0 -1 1 0 0 0 1 0 -1 -1 1 0 1 0 0 -1 -1 1 1 -1 0 1 1 -1 1 

result:

ok 

Test #47:

score: 0
Accepted
time: 1321ms
memory: 36056kb

input:

40 1099511627769
1078397308358 537102056213 50615030698 503609629826 1057282988941 101230061396 6261...

output:

-1 0 0 -1 1 0 -1 0 -1 1 0 0 -1 1 0 1 -1 1 0 1 1 1 1 -1 -1 -1 -1 -1 0 -1 -1 0 0 -1 -1 0 1 0 -1 1 

result:

ok 

Test #48:

score: 0
Accepted
time: 1405ms
memory: 36156kb

input:

40 1099511627775
32588024866 450157339046 1062972581516 584624740144 260704198928 557902820104 56694...

output:

1 1 0 0 1 1 -1 0 0 -1 0 0 0 1 0 -1 1 0 1 0 1 -1 1 1 0 1 1 1 1 -1 0 -1 0 0 -1 0 -1 1 0 0 

result:

ok 

Test #49:

score: 0
Accepted
time: 1354ms
memory: 36152kb

input:

40 1099511627765
451752441053 658813147694 315484645099 770105053928 599791310006 192526263482 87245...

output:

-1 1 -1 0 1 1 0 -1 1 0 -1 0 1 0 1 0 -1 0 0 0 -1 -1 -1 0 0 0 -1 1 -1 1 -1 -1 1 0 0 0 0 0 1 0 

result:

ok 

Test #50:

score: 0
Accepted
time: 1385ms
memory: 36156kb

input:

40 1099511627775
59284320584 108188359673 480573178397 150962498431 176122606558 1063176400492 83371...

output:

0 0 0 0 0 1 -1 0 0 0 0 1 0 -1 0 0 -1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 

result:

ok 

Extra Test:

score: 0
Extra Test Passed