B - Barcode Kattis - barcode (组合数)(模意义下的组合数模板)

题目链接:

https://cn.vjudge.net/problem/Kattis-barcode

题目大意:

让你安排红球和篮球的个数,使得题目所给的条件至少有一个是满足的,问你一共有多少种情况。

具体思路:

对于条件2,dp[i][1]代表第i个为蓝色的合法序列数,dp[i][0]表示第i个为红色的合法序列个数。

对于条件1,只有是偶数的情况符合,这个时候是C(n,n/2)。

然后去重,既满足条件1有满足条件2,也就是没有两个蓝色的接触并且蓝色和红色的个数是相等的。C(n/2+1,n/2)。

注意点:https://www.cnblogs.com/GerynOhenz/p/8506859.html

模板:

 1 ll fact[maxn];
 2 ll qsm(ll t1,ll t2,ll mod)
 3 {
 4     ll ans=1ll;
 5     while(t2)
 6     {
 7         if(t2&1)
 8             ans=ans*t1%mod;
 9         t2>>=1;
10         t1=t1*t1%mod;
11     }
12     return ans%mod;
13 }
14 ll mod_fact(ll n, ll p, ll &e)
15 {
16     if (n<=1)
17         return 1;
18     ll ret=mod_fact(n/p, p, e);
19     e+=n/p;
20     if ((n/p) &1)
21         return ret*(fact[n%p]*(p-1)%p)%p;
22     else
23         return ret*fact[n%p]%p;
24     /* (p-1)!=-1(mod p) */
25 }
26 ll calc_C(ll n, ll k, ll p)
27 {
28     ll e1=0, e2=0, e3=0;
29     ll a1=mod_fact(n, p, e1);
30     ll a2=mod_fact(k, p, e2);
31     ll a3=mod_fact(n-k, p, e3);
32     if (e1-(e2+e3)>0)
33         return 0;
34     return (a1*qsm(a2*a3%p, p-2, p)%p);
35 }
36 void init(int n,int p)
37 {
38   fact[1]=fact[0]=1ll;
39         for(ll i=2; i<=n; i++)
40         {
41             fact[i]=(fact[i-1]*i)%p;
42         }
43 }
View Code

 

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 # define inf 0x3f3f3f3f
 5 # define LL_inf (1ll<<60)
 6 const int maxn = 2e6+100;
 7 ll dp[maxn][2];
 8 ll fact[maxn];
 9 ll qsm(ll t1,ll t2,ll mod)
10 {
11     ll ans=1ll;
12     while(t2)
13     {
14         if(t2&1)
15             ans=ans*t1%mod;
16         t2>>=1;
17         t1=t1*t1%mod;
18     }
19     return ans%mod;
20 }
21 ll mod_fact(ll n, ll p, ll &e)
22 {
23     if (n<=1)
24         return 1;
25     ll ret=mod_fact(n/p, p, e);
26     e+=n/p;
27     if ((n/p) &1)
28         return ret*(fact[n%p]*(p-1)%p)%p;
29     else
30         return ret*fact[n%p]%p;
31     /* (p-1)!=-1(mod p) */
32 }
33 ll calc_C(ll n, ll k, ll p)
34 {
35     ll e1=0, e2=0, e3=0;
36     ll a1=mod_fact(n, p, e1);
37     ll a2=mod_fact(k, p, e2);
38     ll a3=mod_fact(n-k, p, e3);
39     if (e1-(e2+e3)>0)
40         return 0;
41     return (a1*qsm(a2*a3%p, p-2, p)%p);
42 }
43 int main()
44 {
45     int T;
46     scanf("%d",&T);
47     while(T--)
48     {
49         ll n,p;
50         scanf("%lld %lld",&n,&p);
51         fact[1]=fact[0]=1ll;
52         for(ll i=2; i<=n; i++)
53         {
54             fact[i]=(fact[i-1]*i)%p;
55         }
56         dp[1][0]=1ll;
57         dp[1][1]=1ll;
58         for(int i=2; i<=n; i++)
59         {
60             dp[i][0]=(dp[i-1][0]+dp[i-1][1])%p;
61             dp[i][1]=dp[i-1][0]%p;
62         }
63         ll ans=(dp[n][0]+dp[n][1])%p;
64         if(n%2==0)
65         {
66             ans+=calc_C(n,n/2,p)%p;
67             ans%=p;
68             ans-=calc_C(n/2+1,n/2,p);
69         }
70         while(ans<0)
71             ans+=p;
72         ans%=p;
73         printf("%lld\n",ans);
74     }
75     return 0;
76 }

 

转载于:https://www.cnblogs.com/letlifestop/p/11050028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jquery-barcode是一个jQuery插件,用于生成条码。它可以根据给定的参数选项生成不同类型的条码,如Code 128、Code 39、EAN-13等。该插件提供了丰富的参数选项,可以自定义条码的样式和属性。 以下是一个使用jquery-barcode生成Code 128条码的示例: ```html <!DOCTYPE html> <html> <head> <title>jquery-barcode示例</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="jquery-barcode.min.js"></script> </head> <body> <div id="barcode"></div> <script> $(document).ready(function() { var barcodeSettings = { barWidth: 1, barHeight: 50, moduleSize: 5, showHRI: true, addQuietZone: true, marginHRI: 5, bgColor: "#FFFFFF", color: "#000000", fontSize: 10, output: "css", posX: 0, posY: 0 }; $("#barcode").barcode("123456789", "code128", barcodeSettings); }); </script> </body> </html> ``` 在上述示例中,我们首先引入了jQuery库和jquery-barcode插件的脚本文件。然后,在页面中创建一个`<div>`元素,用于显示生成的条码。接下来,我们使用`$(document).ready()`函数来确保页面加载完成后执行代码。在函数内部,我们定义了一个名为`barcodeSettings`的对象,其中包含了生成条码所需的参数选项。最后,我们通过调用`$("#barcode").barcode()`函数来生成Code 128条码,传入条码的内容和参数选项。 你可以根据需要修改`barcodeSettings`对象中的参数值,以实现不同样式和属性的条码生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值