QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#878335 | #9690. Iron Warrior | ucup-team3646# | AC ✓ | 129ms | 9216kb | Python3 | 3.9kb | 2025-02-01 14:49:48 | 2025-02-01 14:49:49 |
Judging History
answer
S=4
def mul(A,B):
C=[[0]*S for i in range(S)]
for i in range(S):
for k in range(i,S):
for j in range(k,S):
C[i][j]+=A[i][k]*B[k][j]
return C
E=[[0]*S for i in range(S)]
for i in range(S):
E[i][i]=1
def matpow(A,k):
if k==0:
return E
if k&1:
return mul(A,matpow(A,k-1))
B=matpow(A,k//2)
return mul(B,B)
MA=[[int(i==j) for j in range(S)] for i in range(S)]
MB=[[int(i==j) for j in range(S)] for i in range(S)]
MC=[[int(i==j) for j in range(S)] for i in range(S)]
MD=[[int(i==j) for j in range(S)] for i in range(S)]
MA[2][3]=5
MB[1][3]=11
MC[0][3]=10
MC[1][2]=1
MD[0][1]=1
MD[1][2]=1
M_CBA=mul(MA,mul(MB,MC))
M_CBD=mul(MD,mul(MB,MC))
M_ABA=mul(MA,mul(MB,MA))
M_AD=mul(MD,MA)
M_CD=mul(MD,MC)
M_BD=mul(MD,MB)
POW_CBA=[M_CBA]
for i in range(1,60):
POW_CBA.append(mul(POW_CBA[-1],POW_CBA[-1]))
POW_CBD=[M_CBD]
for i in range(1,60):
POW_CBD.append(mul(POW_CBD[-1],POW_CBD[-1]))
def calc_CBA(turn):
X=E
for i in range(60):
if (turn>>i)&1:
X=mul(X,POW_CBA[i])
return X
def calc_CBD(turn):
X=E
for i in range(60):
if (turn>>i)&1:
X=mul(X,POW_CBD[i])
return X
def calc(x,y):
return mul(calc_CBD(y),calc_CBA(x))
for _ in range(1):
n=int(input())
if n==1:
print(20)
exit()
ans=0
for t in range(3):
if t!=0 and n>20:
continue
if t==0:
M_ABA=mul(MA,mul(MB,MA))
elif t==1:
M_ABA=mul(MD,mul(MB,MA))
else:
M_ABA=mul(MB,mul(MD,MA))
if n%2==1:
ans=max(ans,mul(MD,mul(calc_CBA(n//2),M_ABA))[0][3])
else:
ans=max(ans,mul(MD,mul(calc_CBA(n//2),M_AD))[0][3])
if n%2==1:
L=-1
R=n//2+1
while R-L>2:
nL=(L+L+R)//3
nR=(L+R+R)//3
vL=mul(calc(nL,n//2-nL),M_ABA)[0][3]
vR=mul(calc(nR,n//2-nR),M_ABA)[0][3]
if vL>vR:
R=nR
else:
L=nL
for i in range(max(0,L),min(R+1,n//2+1)):
ans=max(ans,mul(calc(i,n//2-i),M_ABA)[0][3])
L=-1
R=n//2+1
while R-L>2:
nL=(L+L+R)//3
nR=(L+R+R)//3
vL=mul(M_CD,mul(calc(nL,n//2-nL),M_AD))[0][3]
vR=mul(M_CD,mul(calc(nR,n//2-nR),M_AD))[0][3]
if vL>vR:
R=nR
else:
L=nL
for i in range(max(0,L),min(R+1,n//2+1)):
ans=max(ans,mul(M_CD,mul(calc(i,n//2-i),M_AD))[0][3])
L=-1
R=n//2+1
while R-L>2:
nL=(L+L+R)//3
nR=(L+R+R)//3
vL=mul(M_BD,mul(calc(nL,n//2-nL),M_AD))[0][3]
vR=mul(M_BD,mul(calc(nR,n//2-nR),M_AD))[0][3]
if vL>vR:
R=nR
else:
L=nL
for i in range(max(0,L),min(R+1,n//2+1)):
ans=max(ans,mul(M_BD,mul(calc(i,n//2-i),M_AD))[0][3])
else:
L=-1
R=n//2+1
while R-L>2:
nL=(L+L+R)//3
nR=(L+R+R)//3
vL=mul(calc(nL,n//2-nL),M_AD)[0][3]
vR=mul(calc(nR,n//2-nR),M_AD)[0][3]
if vL>vR:
R=nR
else:
L=nL
for i in range(max(0,L),min(R+1,n//2+1)):
ans=max(ans,mul(calc(i,n//2-i),M_AD)[0][3])
L=-1
R=n//2
while R-L>2:
nL=(L+L+R)//3
nR=(L+R+R)//3
vL=mul(M_CD,mul(calc(nL,n//2-nL-1),M_ABA))[0][3]
vR=mul(M_CD,mul(calc(nR,n//2-nR-1),M_ABA))[0][3]
if vL>vR:
R=nR
else:
L=nL
for i in range(max(0,L),min(R+1,n//2)):
ans=max(ans,mul(M_CD,mul(calc(i,n//2-i-1),M_ABA))[0][3])
L=-1
R=n//2
while R-L>2:
nL=(L+L+R)//3
nR=(L+R+R)//3
vL=mul(M_BD,mul(calc(nL,n//2-nL-1),M_ABA))[0][3]
vR=mul(M_BD,mul(calc(nR,n//2-nR-1),M_ABA))[0][3]
if vL>vR:
R=nR
else:
L=nL
for i in range(max(0,L),min(R+1,n//2)):
ans=max(ans,mul(M_BD,mul(calc(i,n//2-i-1),M_ABA))[0][3])
print(ans)
这程序好像有点Bug,我给组数据试试?
詳細信息
Test #1:
score: 100
Accepted
time: 10ms
memory: 8960kb
input:
1
output:
20
result:
ok answer is '20'
Test #2:
score: 0
Accepted
time: 11ms
memory: 9088kb
input:
3
output:
72
result:
ok answer is '72'
Test #3:
score: 0
Accepted
time: 12ms
memory: 9216kb
input:
4
output:
105
result:
ok answer is '105'
Test #4:
score: 0
Accepted
time: 11ms
memory: 9088kb
input:
5
output:
145
result:
ok answer is '145'
Test #5:
score: 0
Accepted
time: 12ms
memory: 9088kb
input:
6
output:
208
result:
ok answer is '208'
Test #6:
score: 0
Accepted
time: 12ms
memory: 9216kb
input:
7
output:
248
result:
ok answer is '248'
Test #7:
score: 0
Accepted
time: 12ms
memory: 9216kb
input:
8
output:
343
result:
ok answer is '343'
Test #8:
score: 0
Accepted
time: 20ms
memory: 9088kb
input:
486036
output:
13810882446441423
result:
ok answer is '13810882446441423'
Test #9:
score: 0
Accepted
time: 21ms
memory: 9216kb
input:
857503
output:
75842693981321486
result:
ok answer is '75842693981321486'
Test #10:
score: 0
Accepted
time: 25ms
memory: 9088kb
input:
459087
output:
11638561802272893
result:
ok answer is '11638561802272893'
Test #11:
score: 0
Accepted
time: 22ms
memory: 9216kb
input:
326354
output:
4181111331905669
result:
ok answer is '4181111331905669'
Test #12:
score: 0
Accepted
time: 24ms
memory: 9216kb
input:
755041
output:
51774938180590304
result:
ok answer is '51774938180590304'
Test #13:
score: 0
Accepted
time: 26ms
memory: 9216kb
input:
1000000
output:
120283726342420340
result:
ok answer is '120283726342420340'
Test #14:
score: 0
Accepted
time: 39ms
memory: 9216kb
input:
562451495
output:
21401951468280078633294014
result:
ok answer is '21401951468280078633294014'
Test #15:
score: 0
Accepted
time: 33ms
memory: 9088kb
input:
100214615
output:
121057415160393160185480
result:
ok answer is '121057415160393160185480'
Test #16:
score: 0
Accepted
time: 38ms
memory: 9216kb
input:
726997959
output:
46216571009844858875968944
result:
ok answer is '46216571009844858875968944'
Test #17:
score: 0
Accepted
time: 42ms
memory: 9216kb
input:
883477562
output:
82943950684199531529718356
result:
ok answer is '82943950684199531529718356'
Test #18:
score: 0
Accepted
time: 37ms
memory: 9088kb
input:
456878752
output:
11470993586298146794567272
result:
ok answer is '11470993586298146794567272'
Test #19:
score: 0
Accepted
time: 39ms
memory: 9216kb
input:
1000000000
output:
120281308501417045326995605
result:
ok answer is '120281308501417045326995605'
Test #20:
score: 0
Accepted
time: 128ms
memory: 9216kb
input:
151798318021627311
output:
420725672820572820226091469784149314525410684999074
result:
ok answer is '420725672820572820226091469784149314525410684999074'
Test #21:
score: 0
Accepted
time: 126ms
memory: 9088kb
input:
466154514052238226
output:
12183941850211915347991952173009567537536253846445099
result:
ok answer is '12183941850211915347991952173009567537536253846445099'
Test #22:
score: 0
Accepted
time: 117ms
memory: 9216kb
input:
262261097390039057
output:
2169700342816432479937347535029836266637820523889883
result:
ok answer is '2169700342816432479937347535029836266637820523889883'
Test #23:
score: 0
Accepted
time: 114ms
memory: 9088kb
input:
409768988622482114
output:
8275903133852517858111731626726122320253985666412809
result:
ok answer is '8275903133852517858111731626726122320253985666412809'
Test #24:
score: 0
Accepted
time: 129ms
memory: 9088kb
input:
361773749401383499
output:
5695204039674250675619463634360070429230287130689713
result:
ok answer is '5695204039674250675619463634360070429230287130689713'
Test #25:
score: 0
Accepted
time: 125ms
memory: 9088kb
input:
1000000000000000000
output:
120281306081172036692984324273260313737335405903162447
result:
ok answer is '120281306081172036692984324273260313737335405903162447'
Extra Test:
score: 0
Extra Test Passed