首页 > 其他 > 详细

【洛谷P2270】奶牛的运算

时间:2019-10-07 09:52:29      阅读:75      评论:0      收藏:0      [点我收藏+]

题目链接

不难发现,每加一个括号,就相当于把括号内一段区间中的符号反转,于是就是看n-1个符号经过k次区间反转后的状态数,用插板法搞一搞就可以了

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

int n,k;
struct Big_int{
    int v[1000],len;
}C[110][110],ans,_0,_1;

inline Big_int add(Big_int a,Big_int b){
    Big_int c=_0;
    int len=max(a.len,b.len);
    for(int i=1;i<=len;++i){
        c.v[i]+=a.v[i]+b.v[i];
        if(c.v[i]>9){
            c.v[i+1]+=c.v[i]/10;
            c.v[i]%=10;
        }
    }
    while(c.v[len+1]) ++len;
    c.len=len;
    return c;
}

void print(Big_int x){
    for(int i=x.len;i>=1;--i)
        printf("%d",x.v[i]);
    puts("");
}

signed main()
{
    scanf("%lld%lld",&n,&k);
    _1.len=1; _1.v[1]=1;
    C[0][0]=_1;
    for(int i=1;i<=100;++i){
        C[i][0]=_1;
        for(int j=1;j<=i;++j)
            C[i][j]=add(C[i-1][j],C[i-1][j-1]);
    }
    int M=min(n-3,k*2-1);
    for(int i=0;i<=M;++i)
        ans=add(ans,add(C[n-3][i],C[n-3][i]));
    if(k*2<=n-3) ans=add(ans,C[n-3][k*2]);
    print(ans);
    return 0;
}

【洛谷P2270】奶牛的运算

原文:https://www.cnblogs.com/yjkhhh/p/11629314.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!