[组合数取模] BZOJ 4830 [Hnoi2017]抛硬币

1668人阅读 评论(2) 收藏 举报
分类:

习惯性交换abba
首先特判a=b
这时答案为22aCa2a2
其实就是所有情况减去平局的情况 剩下的不是A赢就是B赢 且是对称的 那么除以2
CinCin=CinCnin=Cn2n

然后如果b>a
我们考虑如果B扔出了 x 个1 y 个0 A扔出了 z 个1 w 个0
如果某一次B没赢 也就是xz 那么 翻转过来必然是B赢了 y>w
现在我们要求的就是本来B赢 翻转后还是B赢的情况 S
答案就是2a+b+S2

S=i=0aCiaj=1ba1Ci+jb=i=0aj=1ba1CaiaCi+jb=j=1ba1Ca+ja+b=j=a+1b+1Cja+b

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> abcd;

inline ll Pow(ll a,ll b,ll P){
  ll ret=1; a%=P;
  for (;b;b>>=1,a=a*a%P)
    if (b&1)
      ret=ret*a%P;
  return ret;
}

const int N=2000005;

ll P1,P2,P;
ll pow1[N],pow2[N],pw1[N],pw2[N];

ll a,b; int K;

ll p,p_a,*_pow,*pw,phi;
inline abcd Find(ll x){  
  if (!x) return make_pair(1,0);  
  ll tmp=pw[x/p_a%phi]*_pow[x%p_a]%p_a;
  abcd ret=Find(x/p);
  return abcd(tmp*ret.first%p_a,x/p+ret.second);  
}  

inline ll C(ll n,ll m,bool div=0){
  p=2; p_a=P1; _pow=pow1; pw=pw1; phi=P1/2;
  abcd t1=Find(n),t2=Find(m),t3=Find(n-m);
  t1.second-=t2.second+t3.second;
  t1.first=t1.first*Pow(t2.first,phi-1,p_a)%p_a*Pow(t3.first,phi-1,p_a)%p_a;
  if (div) t1.second--;
  ll a1=Pow(2,t1.second,P1)*t1.first%P1;
  p=5; p_a=P2; _pow=pow2; pw=pw2; phi=P2/5*4;
  t1=Find(n),t2=Find(m),t3=Find(n-m);
  t1.second-=t2.second+t3.second;
  t1.first=t1.first*Pow(t2.first,phi-1,p_a)%p_a*Pow(t3.first,phi-1,p_a)%p_a;
  if (div) t1.first=t1.first*((P2+1)>>1)%P2;
  ll a2=Pow(5,t1.second,P2)*t1.first%P2;
  return (a1*P2%P*Pow(P2,P1/2-1,P1)+a2*P1%P*Pow(P1,P2/5*4-1,P2))%P;
}

int main(){
  freopen("t.in","r",stdin);
  freopen("t.out","w",stdout);
  pow1[0]=pow2[0]=1; P1=Pow(2,9,1LL<<60),P2=Pow(5,9,1LL<<60);
  for (int i=1;i<=512;i++) pow1[i]=pow1[i-1]*(i%2?i:1)%P1;  
  for (int i=1;i<=1953125;i++) pow2[i]=pow2[i-1]*(i%5?i:1)%P2;
  while (~scanf("%lld%lld%d",&a,&b,&K)){
    P1=Pow(2,K,1LL<<60),P2=Pow(5,K,1LL<<60); P=P1*P2;
    pw1[0]=pw2[0]=1;
    for (int i=1;i<=P1/2;i++) pw1[i]=pw1[i-1]*pow1[P1]%P1;
    for (int i=1;i<=P2/5*4;i++) pw2[i]=pw2[i-1]*pow2[P2]%P2;

    ll ans;
    if (a==b)
      ans=(Pow(2,2*a-1,P)+P-C(2*a,a,1))%P;
    else{
      swap(a,b);
      ans=Pow(2,a+b-1,P);
      if (~(a+b)&1)
    ans+=C(a+b,(a+b)/2,1);
      for (ll j=(a+b)/2+1;j<b;j++)
    ans+=C(a+b,j);
      ans%=P;
    }
    char buf[10];
    sprintf(buf,"%%0%dd\n",K);
    printf(buf,ans);
  }
  return 0;
}
查看评论

4830: [Hnoi2017]抛硬币

4830: [Hnoi2017]抛硬币Time Limit: 30 Sec Memory Limit: 128 MB Submit: 220 Solved: 73 [Submit][Statu...
  • CRZbulabula
  • CRZbulabula
  • 2017-05-03 16:03:52
  • 723

HNOI2017 抛硬币

题解实际上就是要求∑a+bi=b+1Cia+b\sum_{i=b+1}^{a+b}C_{a+b}^i,组合数取模即可。
  • Akak__ii
  • Akak__ii
  • 2017-04-23 09:06:26
  • 789

[BZOJ4830][HNOI2017]抛硬币-扩展Lucas定理

抛硬币Description小A和小B是一对好朋友,他们经常一起愉快的玩耍。最近小B沉迷于**师手游,天天刷本,根本无心搞学习。但是已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生。勤勉的小...
  • zlttttt
  • zlttttt
  • 2017-05-18 00:25:00
  • 533

[HNOI&AHOI2017] NOIP考挂蒟蒻的一篇游记 && 部分题解

NOIP考挂蒟蒻的省选游记 && 部分题解
  • whzzt
  • whzzt
  • 2017-04-15 14:36:37
  • 3136

[ FFT ] [ HNOI2017 ] BZOJ4827

先断环为链。 假设将 aa 数组右移 xx 位并加 yy ,那么答案就是 ∑(ai+x+y−bi)\sum (a_{i+x}+y-b_i) 化简后发现 yy 可以枚举求最小值。然后就是求 ∑ai...
  • gjghfd
  • gjghfd
  • 2018-01-22 13:26:18
  • 61

[BZOJ4828][Hnoi2017]大佬-DP+DFS

大佬Description人们总是难免会碰到大佬。他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语。你作为一个OIER,面对这样的事情非...
  • zlttttt
  • zlttttt
  • 2017-05-17 23:20:08
  • 268

(带讲解)bzoj 4830 抛硬币 组合式推导+拓展lucas

卡常!!!题意:有两个人,第一个人要扔a次硬币,第二个人扔b次硬币(a>b),如果第一个人的正面朝上比b多则a获胜,求a获胜的话有多少种方案。要求a-b的范围是1e5,但是a和b都很大,所以复杂度要和...
  • thchuan2001
  • thchuan2001
  • 2017-07-02 21:01:32
  • 346

HNOI2017滚粗记

day -inf 停课集训,机房大佬开始学数学,但我孤陋寡闻,认为HN比较少考数学题。day0 晚上最后时刻背了背各式模板,希望会考吧。day1 早上起来莫名被花洒喷了个...
  • Rushfinen
  • Rushfinen
  • 2017-04-16 19:54:18
  • 577

几个重要的排列组合定理公式

1.排列的几个定理公式 .排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement)。特别地,当m=n时,这个排列...
  • ccDLlyy
  • ccDLlyy
  • 2017-02-01 16:29:17
  • 1779

洛谷3723 [AH2017/HNOI2017]礼物

标签:FFT 题目 题目传送门 题目描述 我的室友最近喜欢上了一个可爱的小女生。马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她。每个手环上各有 n 个装饰物,并且每个装饰...
  • qwerty1125
  • qwerty1125
  • 2018-02-26 15:05:24
  • 56
    个人资料
    持之以恒
    等级:
    访问量: 40万+
    积分: 1万+
    排名: 1228
    文章分类
    最新评论