HDU 4869 求逆元,反转硬币题
2014-07-23 22:39
567 查看
题解: 可以直接看别人的。。
= = 多学了个 inv 写法。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<cmath>
using namespace std;
const int N = 111111;
int n,m;
const int MOD = 1000000009;
long long P
,inv
,RP
;
void pre(){
inv[0] = inv[1] = 1;
P[0] = RP[0] = P[1] = RP[1] = 1;
for(int i = 2;i < N; i++){
inv[i] = ((MOD - MOD / i) * inv[MOD % i]) % MOD;
P[i] = P[i-1] * i % MOD;
RP[i] = RP[i-1] * inv[i] % MOD;
}
}
long long C(long long n,long long m){
return ((P
*RP[m]%MOD)*RP[n-m]%MOD + MOD) % MOD;
}
int x;
int main(){
pre();
while(cin >> n >> m){
int i=0,j=0 , p,q; // i <= j
while(n--){
scanf("%d",&x);
if(i >= x) p = i-x;
else if(x <= j) p = ((x&1)==(j&1))?0:1;
else p = x-j;
if(i + x >= m) q = m - (i+x-m);
else if(j+x <= m) q = j+x;
else q = (((i+x)&1)==(m&1))?m:m-1;
i=p, j = q;
}
long long ans = 0;
for(int z = i; z <= j; z+=2){
ans += C(m , z);
ans %= MOD;
}
ans = (ans+MOD)%MOD;
cout << ans << endl;
}
return 0;
}
= = 多学了个 inv 写法。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<cmath>
using namespace std;
const int N = 111111;
int n,m;
const int MOD = 1000000009;
long long P
,inv
,RP
;
void pre(){
inv[0] = inv[1] = 1;
P[0] = RP[0] = P[1] = RP[1] = 1;
for(int i = 2;i < N; i++){
inv[i] = ((MOD - MOD / i) * inv[MOD % i]) % MOD;
P[i] = P[i-1] * i % MOD;
RP[i] = RP[i-1] * inv[i] % MOD;
}
}
long long C(long long n,long long m){
return ((P
*RP[m]%MOD)*RP[n-m]%MOD + MOD) % MOD;
}
int x;
int main(){
pre();
while(cin >> n >> m){
int i=0,j=0 , p,q; // i <= j
while(n--){
scanf("%d",&x);
if(i >= x) p = i-x;
else if(x <= j) p = ((x&1)==(j&1))?0:1;
else p = x-j;
if(i + x >= m) q = m - (i+x-m);
else if(j+x <= m) q = j+x;
else q = (((i+x)&1)==(m&1))?m:m-1;
i=p, j = q;
}
long long ans = 0;
for(int z = i; z <= j; z+=2){
ans += C(m , z);
ans %= MOD;
}
ans = (ans+MOD)%MOD;
cout << ans << endl;
}
return 0;
}
相关文章推荐
- HDU 4869 Turn the pokers 逆元
- HDU 4869 Turn the pokers 逆元
- hdu 5976 Detachment(逆元+贪心+数论+前缀和+二分 待整理)
- HDU 5145 NPY and girls 莫队+逆元
- HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法
- HDU 4869 Turn the pokers(思维+组合公式+高速幂)
- HDU 5793 A Boring Question (找规律 : 快速幂+逆元)
- HDU 5976 贪心+逆元
- HDU4869:Turn the pokers(费马小定理+高速幂)
- hdu 2566 统计硬币
- hdu 5685 Problem A(逆元)
- hdu 4642 Fliping game 翻硬币游戏 抓住特征变量
- ☆HDU 2209 翻纸牌游戏(反转、开关问题)
- HDU 3537 Daizhenyang's Coin(博弈,翻硬币)
- hdu_4869(费马小定理+快速幂)
- Counting Binary Trees - HDU 3240 卡特兰数+逆元
- 【HDU - 4196】Remoteland 【逆元+算数基本定理】
- hdu1576 A/B 扩展欧几里得求逆元
- HDU 5651 xiaoxin juju needs help 逆元
- hdu 4869 Turn the pokers(数学)