zoukankan      html  css  js  c++  java
  • 一些计数题

    可能是血(水)考前最后一篇题解了,不过还是写写题解吧。

    大部分来源51nod

    51nod1253 Kundu and Tree

    挺思博的一道题。首先黑色边没用,所以可以把其视为连通块,然后走出该连通块必然要经过至少一条红色边,于是就是总方案数减3个全在一个黑连通块再减去2个在一个黑连通块。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=5e4+7,mod=1e9+7;
    int n,ans,fa[N],sz[N];
    int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
    int C3(int x){return x<3?0:1ll*x*(x-1)*(x-2)/6%mod;}
    int C2(int x){return x<2?0:1ll*x*(x-1)/2%mod;}
    int main()
    {
        scanf("%d",&n);
        if(n<3){puts("0");return 0;}
        for(int i=1;i<=n;i++)fa[i]=i;
        for(int i=1,x,y;i<n;i++)
        {
            char op;scanf("%d%d %c",&x,&y,&op);
            if(op=='b')x=find(x),y=find(y),fa[x]=y;
        }
        for(int i=1;i<=n;i++)sz[find(i)]++;
        ans=C3(n);
        for(int i=1;i<=n;i++)ans=(ans-C3(sz[i])-1ll*C2(sz[i])*(n-sz[i])%mod+2*mod)%mod;
        printf("%d",ans);
    }
    View Code

     然后看看不那么思博的题吧

    51nod1149 Pi的递推式

    假设把题目改成fib数列,做法是小学组难度。然后可以考虑别的做法吗?答案是肯定的。用O(n)的另一种方法求,就是ΣC(a+b,a),其中a+2b=n,然后这题就可以把2改成π,加到的目标数在区间(n-4,n],然后若加到(n-4-π,n-4],则加π即可,加到(n-4-1,n-4],则加1即可。难点在于加到哪个区间。于是分别枚举加多少个1/π即可完成目标。类比下来,所有f[i]=f[i-a]+f[i-b]都能在O(n)复杂度解决问题。

    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int N=1e6+7,mod=1e9+7;
    const double pi=acos(-1);
    int n,m,ans,fac[N],inv[N];
    int qpow(int a,int b)
    {
        int ret=1;
        while(b)
        {
            if(b&1)ret=1ll*ret*a%mod;
            a=1ll*a*a%mod,b>>=1;
        }
        return ret;
    }
    int C(int a,int b){return 1ll*fac[a]*inv[b]%mod*inv[a-b]%mod;}
    int main()
    {
        scanf("%d",&n);
        if(n<4){puts("1");return 0;}
        fac[0]=1;for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;
        inv[n]=qpow(fac[n],mod-2);for(int i=n;i;i--)inv[i-1]=1ll*inv[i]*i%mod;
        for(int i=0;i<=n-4;i++)ans=(ans+C(i+(n-4-i)/pi,i))%mod;
        for(int i=0;i<=(n-4)/pi;i++)ans=(ans+C(i+n-4-i*pi,i))%mod;
        printf("%d",ans);
    }
    View Code
  • 相关阅读:
    Informatica 常用组件Aggregator之三 使用排序输入
    Informatica 常用组件Aggregator之二 分组依据端口
    Informatica 常用组件Aggregator之一 聚合表达式
    Informatica 常用组件Filter之四 优化
    Informatica 常用组件Filter之三 创建FIL
    Informatica 常用组件Filter之二 过滤条件
    Informatica 常用组件Filter之一 概述
    Ubuntu 16.04 升级 PHP 版本至 7.1
    Socket远程调试日志之 SocketLog的简单实用
    Tesseract-ocr
  • 原文地址:https://www.cnblogs.com/hfctf0210/p/11037393.html
Copyright © 2011-2022 走看看