//容斥原理,c[i]表示i当前要算的次数,复杂度和第二层循环相关 O(nlogn~n^2)
LL in_exclusion(int n,int *c)
{
    for(int i=0;i<=n;i++) c[i]=1;    //不一定是这样初始化,要算到的才初始化为1
    LL ans=0;
    for(int i=0;i<=n;i++) if(i要算)
    {
        ans+=(统计数)*c[i];
        for(int j=i+1;j<=n;j++) if(i会算到j) c[j]-=c[i];//j要算的次数减去算i时已经算了的次数
    }
    return ans;
}
容斥原理伪代码

相关文章: