洛谷P3414 SAC#1 - 组合数

P3414 SAC#1 - 组合数

    • 218通过
    • 681提交
  • 题目提供者ProjectWTA
  • 标签
  • 难度普及/提高-
  • 时空限制1s / 128MB

  讨论  题解  

最新讨论更多讨论

  • 讨论区出bug了
  • 题目错啦
  • 其实是很简单的题

题目背景

本题由世界上最蒟蒻最辣鸡最撒比的SOL提供。

寂月城网站是完美信息教室的官网。地址:http://191.101.11.174/mgzd 。

题目描述

辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌!

今天他萌上了组合数。现在他很想知道simga(C(n,i))是多少;其中C是组合数(即C(n,i)表示n个物品无顺序选取i个的方案数),i取从0到n所有偶数。

由于答案可能很大,请输出答案对6662333的余数。

输入输出格式

输入格式:

 

输入仅包含一个整数n。

 

输出格式:

 

输出一个整数,即为答案。

 

输入输出样例

输入样例#1:
3
输出样例#1:
4

说明

对于20%的数据,n <= 20;

对于50%的数据,n <= 1000;

对于100%的数据,n <= 1 000 000 000 000 000 000 (10^18)

分析:先上结论:答案为2^(n-1),为什么是这个呢?如果i能取奇数,那么答案为2^n,因为我们从n个数中取0个,取1个,取2个...取n个,相当于取任意多个,每个位置可以取或者不去,那么根据乘法原理,答案就为2^n,如果i只能为偶数,就会有一半的位置取不了,答案就为原答案的1/2.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

long long n;

const int mod = 6662333;
typedef long long LL;

LL fun(LL x, LL n)
{
    LL res = 1;
    while (n > 0)
    {
        if (n & 1)
            res = (res*x) % mod;
        x = (x*x) % mod;
        n >>= 1;
    }
    return res % mod;
}

int main()
{
    scanf("%lld", &n);
    printf("%lld\n",fun(2, n - 1));

    return 0;
}

 

posted @ 2017-08-04 12:24 zbtrs 阅读(...) 评论(...) 编辑 收藏