QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#65783#4843. Infectious DiseaseKaibadAC ✓1405ms222364kbC++201.2kb2022-12-03 16:53:392022-12-03 16:53:43

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-12-03 16:53:43]
  • 评测
  • 测评结果:AC
  • 用时:1405ms
  • 内存:222364kb
  • [2022-12-03 16:53:39]
  • 提交

answer

#include<stdio.h>
#define int long long

int n,p[14000010],dp[16][16385];
int ny[14000010];
const int mod=1e9+7;

int max(int a,int b){
	if(a>b) return a;
	return b;
}

int qpow(int a,int b){
    int ans=1;
    while(b){
        if(b&1) ans=ans*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return ans;
}

int inv(int x){
	return qpow(x,mod-2);
}

int c(int n,int m){
	if(m>n) return 0;
	return (p[n]*ny[m]%mod)*ny[n-m]%mod;
}

void solve(){
	scanf("%lld",&n);
	dp[0][1]=1;
	p[0]=1;
	for(int i=1;i<=n+5;i++) p[i]=p[i-1]*i%mod;
	ny[n+5]=qpow(p[n+5],mod-2);
	for(int i=n+5-1;i>=0;i--){
		ny[i]=(ny[i+1]*(i+1))%mod;
	}
	for(int i=1;i<=15;i++){
		int sheng=n-qpow(3,i-1),xuan=qpow(3,i)-qpow(3,i-1);
		if(sheng<=xuan){
			for(int j=1;j<=(1<<(i-1));j++){
				dp[i][0]=(dp[i][0]+dp[i-1][j])%mod;
			}
			break;
		}
		int all=inv(c(sheng,xuan));
		for(int j=0;j<=(1<<i);j++){
			for(int k=max(1ll,(j+1)>>1);k<=(1<<(i-1));k++){
				int gan=2*k-j;
				dp[i][j]=(dp[i][j]+dp[i-1][k]*c(2*k,gan)%mod*c(sheng-2*k,xuan-gan)%mod*all)%mod;
			}
		}
	}
	int ans=0;
	for(int i=1;i<=15;i++) ans=(ans+dp[i][0]*i)%mod;
	printf("%lld",ans);
}

signed main(){
	int T=1;/*
	cin>>T;//*/
	while(T--) solve();
	return 0;
}


Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 5656kb

input:

2

output:

1

result:

ok 1 number(s): "1"

Test #2:

score: 0
Accepted
time: 3ms
memory: 5628kb

input:

114

output:

505208013

result:

ok 1 number(s): "505208013"

Test #3:

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

input:

14000000

output:

44565093

result:

ok 1 number(s): "44565093"

Test #4:

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

input:

12345678

output:

123143093

result:

ok 1 number(s): "123143093"

Test #5:

score: 0
Accepted
time: 87ms
memory: 19636kb

input:

776777

output:

764022068

result:

ok 1 number(s): "764022068"

Test #6:

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

input:

3

output:

1

result:

ok 1 number(s): "1"

Test #7:

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

input:

4

output:

666666673

result:

ok 1 number(s): "666666673"

Test #8:

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

input:

5

output:

833333341

result:

ok 1 number(s): "833333341"

Test #9:

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

input:

6

output:

300000004

result:

ok 1 number(s): "300000004"

Test #10:

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

input:

7

output:

533333339

result:

ok 1 number(s): "533333339"

Test #11:

score: 0
Accepted
time: 3ms
memory: 5668kb

input:

8

output:

952380961

result:

ok 1 number(s): "952380961"

Test #12:

score: 0
Accepted
time: 3ms
memory: 5652kb

input:

9

output:

964285723

result:

ok 1 number(s): "964285723"

Test #13:

score: 0
Accepted
time: 3ms
memory: 5624kb

input:

10

output:

416666672

result:

ok 1 number(s): "416666672"

Test #14:

score: 0
Accepted
time: 2ms
memory: 5616kb

input:

26

output:

990086590

result:

ok 1 number(s): "990086590"

Test #15:

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

input:

27

output:

528360342

result:

ok 1 number(s): "528360342"

Test #16:

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

input:

28

output:

273239648

result:

ok 1 number(s): "273239648"

Test #17:

score: 0
Accepted
time: 347ms
memory: 79996kb

input:

4782967

output:

332194401

result:

ok 1 number(s): "332194401"

Test #18:

score: 0
Accepted
time: 354ms
memory: 82572kb

input:

4782968

output:

362625027

result:

ok 1 number(s): "362625027"

Test #19:

score: 0
Accepted
time: 337ms
memory: 80064kb

input:

4782969

output:

971032452

result:

ok 1 number(s): "971032452"

Test #20:

score: 0
Accepted
time: 845ms
memory: 81216kb

input:

4782970

output:

452836984

result:

ok 1 number(s): "452836984"

Test #21:

score: 0
Accepted
time: 772ms
memory: 81032kb

input:

4782971

output:

349324970

result:

ok 1 number(s): "349324970"

Test #22:

score: 0
Accepted
time: 773ms
memory: 80772kb

input:

4782972

output:

46862963

result:

ok 1 number(s): "46862963"

Test #23:

score: 0
Accepted
time: 10ms
memory: 8608kb

input:

114514

output:

972669965

result:

ok 1 number(s): "972669965"

Test #24:

score: 0
Accepted
time: 302ms
memory: 37336kb

input:

1919810

output:

482430785

result:

ok 1 number(s): "482430785"

Test #25:

score: 0
Accepted
time: 1308ms
memory: 146236kb

input:

8877877

output:

486769120

result:

ok 1 number(s): "486769120"