【洛谷P3414】 SAC#1 - 组合数

题目背景

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

寂月城网站是完美信息教室的官网。

题目描述

辣鸡蒟蒻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)

题解:

关于二项式定理的的知识可浏览360百科中的:https://baike.so.com/doc/5409658-5647689.html

由二项式定理可得:C(n,0)+C(n,1)+C(n,2)+…+C(n,n-2)+C(n,n-1)+C(n,n)=2^n

由于题目上说i只取偶数(包括0)所以最后的结果是2^(n-1)。

用O(n)算法效率低会超时的。

剩下的就是快速幂了,可以用迭代写,也可以用递归,那得看个人习惯了。

快速幂用位运算写效率可能更高:

这是百度百科中比较好的快速幂位运算算法:

int pow(int a,int b){
  int r=1,base=a;
  while(b){
    if(b&1) r*=base;
    base*=base;
    b>>=1;
  }
  return r;
}

百度百科中关于快速幂的讲解比较详细:https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E5%B9%82

本题在做的过程中要取余,下面贴出个人代码:

递归:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
ll n;
ll powmod(ll k,ll m)
{
    if(k==0) return 1;
    ll x=powmod(k/2,m);
    ll ans=(x*x)%m;
    if(k%2) ans=(ans*2)%m;
    return ans;
}
int main()
{
    scanf("%lld",&n);
    ll ans=powmod(n-1,6662333);
    printf("%lld\n",ans);
    return 0;
}

非递归:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
ll n;
ll powmod(ll a,ll b,ll c)
{
    ll ans=1%c; a%=c;
    while(b)
    {
        if(b%2==1) ans=ans*a%c;
        b=b/2; a=a*a%c;
    }
    return ans;
}
int main()
{
    scanf("%lld",&n);
    ll ans=powmod(2,n-1,6662333);
    printf("%lld\n",ans);
    return 0;
}
时间: 2024-09-29 18:25:15

【洛谷P3414】 SAC#1 - 组合数的相关文章

洛谷P3414 SAC#1 - 组合数

P3414 SAC#1 - 组合数 218通过 681提交 题目提供者ProjectWTA 标签 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 讨论区出bug了 题目错啦 其实是很简单的题 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 今天他萌上了组合数.现在他很想知道simga(C(n,i))

P3414 SAC#1 - 组合数 题解

https://www.luogu.org/problemnew/show/P3414(题目传送) 这道题提醒大家一定要认真审题.看清楚后发现n的数据范围稍微小于long long类型的范围(看不清被0吓到的估计都去写近百行高精度和运算符重载了吧...),又知道关于组合数的 一个定理: 卢卡斯定理:(求解C(n,m)%p)C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 一些公式: 这样,解题的核心就是求2^(n-1),这里可以用快速幂来做. AC代码: #include<ios

P3414 SAC#1 - 组合数

题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 今天他萌上了组合数.现在他很想知道simga(C(n,i))是多少:其中C是组合数(即C(n,i)表示n个物品无顺序选取i个的方案数),i取从0到n所有偶数. 由于答案可能很大,请输出答案对6662333的余数. 输入输出格式 输入格式: 输入仅包含一个整数n. 输出格式: 输出一个整数,即

l洛谷 P3926 SAC E#1 - 一道不可做题 Jelly

P3926 SAC E#1 - 一道不可做题 Jelly 题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢吃蒟蒻果冻.而SOL菌也很喜欢蒟蒻果冻. 有一天,他们在一起搓炉石,而SOL菌则要拿出蒟蒻果冻招待他的客人. 蒟蒻果冻一般在a度下保存在冰箱里.但是刚拿出来的时候太冰了,需要加热.SOL菌打算用一种神奇的电炉加热蒟蒻果冻.根据观察,它有一个特点: 1.蒟蒻果冻小于c度的时候,每p单位时间加热1单位温度: 2.当蒟蒻果冻等于c度的时候,需要q单位

洛谷——P1869 愚蠢的组合数

P1869 愚蠢的组合数 题目描述 最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题... 狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数. 狗狗想知道的是C(N,K)的奇偶性. 当然,这个整天都老是用竖式算123456789*987654321=?的人不会让你那么让自己那么轻松,它说:“N和K都可能相当大.” 但是狗狗也犯难了,所以它就找到了你,想请你帮他解决这个问题. 输入输出格式 输入格式: 第1行:一个正整数t,表示数据的组数. 第2~2+t-1行:两个非负整数N和K

洛谷—— P1869 愚蠢的组合数

https://www.luogu.org/problemnew/show/1869 题目描述 最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题... 狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数. 狗狗想知道的是C(N,K)的奇偶性. 当然,这个整天都老是用竖式算123456789*987654321=?的人不会让你那么让自己那么轻松,它说:“N和K都可能相当大.” 但是狗狗也犯难了,所以它就找到了你,想请你帮他解决这个问题. 输入输出格式 输入格式: 第1行:一个正整数

SAC#1 - 组合数

P3414 SAC#1 - 组合数 组合数的性质,求(1<<(n-1))%mod即可.其实要快速幂. #include<bits/stdc++.h> #define MOD 6662333 using namespace std; unsigned long long n; unsigned long long p(unsigned long long x) { unsigned long long t=2; while(x%2==0) { t*=t; t%=MOD; x>&

【洛谷P1641】[SCOI2010]生成字符串

题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? 输入输出格式 输入格式: 输入数据是一行,包括2个数字n和m 输出格式: 输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数 输入输出样例 输入样例#1: 2 2 输出样例#1:

洛谷 模拟城市2.0

一次洛谷月赛的T1,当时因为是信心赛,认为第一题应该不会太难,结果想了很久,直接额放弃正解选择暴力...简直就是巨坑的五维DP...mmd 题目背景 博弈正在机房颓一个叫做<模拟城市2.0>的游戏. 2048年,经过不懈努力,博弈终于被组织委以重任,成为D市市委书记! 他勤学好问,励精图治,很快把D市建设成富强民主文明和谐的美好城市.为了进一步深化发展,他决定在海边建立一个经济开发区. 题目描述 已知开发区的建筑地块是一个n×n的矩形,而开发区可以建造三种建筑: 商业楼,住宅楼,教学楼.这任何