SPOJ - INTSUB 组合数学

4人阅读 评论(0) 收藏 举报
分类:

题意:

给你一个集合{1,2,3,........,2n},问有多少个子集是有趣的。有趣的集合定义是,集合中两个不一样的数{a,b},其中a是集合里的最小值,b是a的倍数。

题解:

对于数字a,集合中存在x=2n/a-1个大于a的倍数,也存在y=2n-x-a个大于a但不是a的倍数的数。对于有趣的集合必须要出席那大于a的倍数,一共有2^x-1种可能(减去一个都不出现的情况),而不是倍数的数可出现可不出现,一共有2^y种可能,将两个值相乘,即为最小值为a的有趣的子集的个数。枚举所有a的情况,相加即为答案。


#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const LL MOD=1000000007;
LL pr[2005];
int main(){
    LL T,n;
    pr[0]=1;
    for(int i=1;i<=2000;i++)
        pr[i]=pr[i-1]*2%MOD;
    scanf("%lld",&T);
    for(LL t=1;t<=T;t++){
        scanf("%lld",&n);
        LL ans=0;
        for(LL i=1;i<=n;i++){
            LL x=2*n/i-1;
            LL y=2*n-i-x;
            ans=(ans+(pr[x]-1)*pr[y])%MOD;
        }
        printf("Case %lld: %lld\n",t,ans);
    }
}

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const LL MOD=1000000007;
LL po(LL x){
    LL ret=1,a=2;
    while(x){
        if(x&1) ret=ret*a%MOD;
        a=a*a%MOD;
        x>>=1;
    }
    return ret;
}
int main(){
    LL T,n;
    scanf("%lld",&T);
    for(LL t=1;t<=T;t++){
        scanf("%lld",&n);
        LL ans=0;
        for(LL i=1;i<=n;i++){
            LL x=2*n/i-1;
            LL y=2*n-i-x;
            ans=(ans+(po(x)-1)*po(y))%MOD;
        }
        printf("Case %lld: %lld\n",t,ans);
    }
}

查看评论

组合数学 SPOJ INTSUB

题目链接: https://vjudge.net/problem/SPOJ-INTSUB 题意:T组数据,每组数据一个数n,求集合{1,2,3,……,2n}中有趣子集的个数,有趣子集的...
  • KKnotAlone
  • KKnotAlone
  • 2017-01-19 19:45:25
  • 230

SPOJ 20654 INTSUB - Interesting Subset(水~)

Description 给出集合X={1,2,…,2n},问X有多少个子集满足该子集中有一个数b可以整除该子集的最小值a(b>a) Input 第一行一整数T表示用例组数,每组用例输入一整数n(...
  • V5ZSQ
  • V5ZSQ
  • 2017-04-10 15:01:56
  • 186

Wannafly2016-12-27 SPOJ-INTSUB 数学

题目链接:http://www.spoj.com/problems/INTSUB/题意:给定一个集合,该集合由1,2,3….2n组成,n是一个整数。问该集合中有趣子集的数目,答案mod1e9+7。 ...
  • yxg_123
  • yxg_123
  • 2017-03-18 17:32:26
  • 96

SPOJ INTSUB

Interesting Subset You are given a set X = {1, 2, 3, 4, … , 2n-1, 2n} where n is an integer. You hav...
  • black_miracle
  • black_miracle
  • 2017-01-15 15:01:34
  • 140

SPOJ - INTSUB - Interesting Subset (想法题)

题目链接:SPOJ - INTSUB 题意 给你一个n,让你求{1,2,3…2n-1,2n}这个集合里面有多少个子集满足:至少有两个元素a,b满足a%b==0且a小于b 思路 ...
  • qq_40513946
  • qq_40513946
  • 2018-04-17 20:25:22
  • 0

spoj 第42题 reverse

  • 2009年03月30日 14:45
  • 413B
  • 下载

SPOJ DIVCNT2(莫比乌斯反演+杜教筛)

题目传送门:http://www.spoj.com/problems/DIVCNT2/题目分析: 千古神题,这题想了我两天也没想出来…… 好吧,其实这题并没有用杜教筛,它并没有使用记忆化递归,也没...
  • KsCla
  • KsCla
  • 2017-06-01 22:02:25
  • 809

spoj做题表格

  • 2012年10月21日 19:58
  • 133KB
  • 下载

SPOJ QTREE 系列

QTREE Query on a tree 树链剖分:QTREE LCT:QTREE QTREE2 Query on a tree II 倍增LCA:QTREE2 PTO7J Query o...
  • u013654696
  • u013654696
  • 2015-08-04 00:14:26
  • 884

SPOJ简介

SPOJ是波兰最为出色的Online Judge之一,界面和谐,题目类型也非常丰富,适合有一定基础的选手练习,对高手而言也是个提高能力的良好平台。   SPOJ题目分类:classical,ch...
  • bat67
  • bat67
  • 2016-07-26 11:02:13
  • 2706
    个人资料
    持之以恒
    等级:
    访问量: 345
    积分: 467
    排名: 11万+
    文章存档