时间限制 : - MS   空间限制 : - KB 
评测说明 : 1s,256m
问题描述

一年一度的ioiAKer大赛即将来临,何老板打算让信竞队的同学们组队参赛。信竞队共n名队员,他们的CF积分分别是1、2、3、...... 、n,CF积分体现了选手的能力水平,积分越高,能力越强。
按照赛会方的要求,每个学校只能派两只队伍参赛,分别对应提高组和提高组。为体现不同组别能力的区分度,要求提高组队伍中积分最低的选手必须大于普及组队伍中积分最高的选手。每组队伍的参赛人数不能为0。
何老板想知道,总共有多少种合法的组队方案。结果可能很大,mod m后再输出。

输入格式

一行,两个整数n和m

输出格式

一个整数,表示计算结果

样例输入

3 10

样例输出

5

提示

对于100%的数据:1<=n<=1018 1<=m<=1018

合法的组队方案如下: 提高组 普及组 {3,2} {1} {3} {1,2} {3} {2} {3} {1} {2} {1}

【题目分析】
设i在普及组中,且CF分数最高,显然,∑i=1n {2i - 1 * (2n - i - 1)} % m 就是答案。
即ans = ∑i=1n {2i - 1 * (2n - i - 1)} % m = ∑i=1n {2n - 1 - 2i - 1} % m = {∑i=1n 2n - 1 - ∑i=1n 2i - 1} % m
由等比数列求和公式,可化简为ans = (n * 2n - 1 - (2n - 1)) % m = (n * 2n - 1 - 2n + 1) % m,然后把模运算分配进括号里即可。
但是鉴于n范围过大,我们借用O(1)快速乘,此题解决。
以下安利O(1)快速乘模板:
ll Mul(ll a, ll b, ll c) {
return (a * b - (ll)((long double)a / c * b) * c + c) % c;
}
 
【参考代码】
 #include<cstdio>
#define ll unsigned long long
ll n, m, ans, temp;
namespace Ironclad_Programming {
#define R register int
#define For(i, s, n) for (R i = s; i <= n; ++ i)
void ini() {
scanf("%lld%lld", &n, &m);
}
ll Mul(ll a, ll b, ll c) {
return (a * b - (ll)((long double)a / c * b) * c + c) % c;
}
ll Montgomery(ll a, ll b, ll c) {
ll ans = ;
a %= c;
while (b) {
if ((b & ))ans = Mul(ans % c, a % c, c);
b >>= ;
a = Mul(a % c, a % c, c);
}
return ans;
}
void solve() {
temp = Montgomery(, n - , m);
ans = Mul(n % m, temp % m, m);
temp = Montgomery(, n, m);
ans = (ans - temp + + m) % m; // 千万记得加一次模数,防负数
printf("%lld", ans);
}
void Main() {
ini();
solve();
}
#undef R
#undef For
}
int main() {
Ironclad_Programming::Main();
return ;
}

A 组队参赛的更多相关文章

  1. VK-Cup 2017 qualification 1

    VK-Cup,cf里面只有切成俄文才能看到,题目也都是俄文的(百度翻译成英文和中文). 两人组队参赛的,赛期1天,乐多赛赛制(和时间基本无关,交上去挂了扣分).这次是第一场资格赛. 这次又和ditol ...

  2. swusec的构想,顺便送开学福利——校园网一号多登录演示

    前言: 我不是什么大牛,我只想通过我的努力,打造swu网络安全爱好者的圈子.期待你加入. swusec是什么? swusec (SouthWestUniversity SecurityTeam),西南 ...

  3. 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

    先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 不多说,直接上代码. 编写代码 运行 <!DOCTYPE html><html><head& ...

  4. Android小游戏:功夫蛇 团队开发经验总结

    前言 曾经没有代码管理的习惯,不用回版本控制工具.这种陋习虽然让原来千穿百孔的代码远离了实现,但这种逃避未必就是一件好事吧;). 于是从博客中挖出了原来的文章,并千辛万苦找到了最早的代码贴出来. 这篇 ...

  5. 欢迎参加3月活动:AWS 在线研讨会与阿里云 RISC-V 应用创新大赛

    3月份我们在帮合作云厂商 Amazon Web Services(AWS) 与阿里云推广2个活动,欢迎感兴趣的园友参加. 活动一:亚马逊云科技在线研讨会:借助 DGL 实现实时欺诈检测 博客园专属报名 ...

  6. 微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!

    微信小程序黑客马拉松正式启动 近日,小程序斩获一项世界级殊荣--作为一项全新的技术和应用创新,小程序首次获选世界互联网领先科技成果.目前小程序应用数量已超过 100 万,覆盖了 200 多个细分行业, ...

  7. CCPC比赛与算法学习的个人分享

    大赛简介 中国大学生程序设计竞赛(China Collegiate Programming Contest,简称CCPC)是工业和信息化部教育与考试中心主办的 "强国杯"技术技能大 ...

  8. BITED数学建模七日谈之六:组队建议和比赛流程建议

    今天进入数学建模经验谈第六天:组队建议和比赛流程建议 数学模型的组队非常重要,三个人的团队一定要有分工明确而且互有合作,三个人都有其各自的特长,这样在某方面的问题的处理上才会保持高效率. 三个人的分工 ...

  9. 我的ACM参赛故事

    从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...

随机推荐

  1. PHP sprintf() 函数详解

    PHP中,sprintf()的作用是把字符串进行多种类型的格式化一般用法如下: sprintf ( string $format [, mixed $... ] ) : string 返回一个按要求格 ...

  2. Java 抽象类 抽象方法 使用说明

    知识点 什么是抽象类 抽象类与普通类主要两点不同: 1.在类的修饰符后面多了一个abstract关键字 2.抽象类是不允许通过new来实例化的 由于抽象类不能通过new来实例化,所以基本上是在继承中当 ...

  3. hibernate中cascade属性以及inverse属性

    级联操作 cascadecascade的常用属性值 none 默认值 不做任何变动 save-update 保存或修改 delete 删除 all 包含save-update 和delete等行为 c ...

  4. oracle根据特定字符拆分字符串的方法

    清洗数据需要将某个字段内以空格分隔的字符串拆分成多行单个的字符串,百度了很多种方法大概归结起来也就这几种方法最为有效,现在把贴出来: 第一种: select regexp_substr('1 2 3' ...

  5. 第一篇博客 C+++知识点总结一

    1.成员 1.比较特殊的成员类型:protected. 保护成员在本类中和private类型的成员作用一模一样.区别在于保护成员可以由本类的派生类的成员函数访问,但是私有成员在其派生类中无法访问. 2 ...

  6. si4745 FM-AM-SW 音量控制芯片 驱动详解

    在论坛上看到有人发这个dsp 芯片,仔细看了下,发现功能正合我意,网上能找到的资料(源码)不多 软件环境:linux4.1.36  arm-linux-gcc 4.3.2 实现功能:自动搜台,上一台, ...

  7. Go 的 http 包的源码,通过代码我们可以看到整个的 http 处理过程

    func (srv *Server) Serve(l net.Listener) error {defer l.Close() var tempDelay time.Duration // how l ...

  8. 基于linux下的NIST数字测试包安装过程

    基于linux下的NIST数字测试包安装过程 1. 首先解决windows文件不能粘贴到Ubuntu的问题 选择利用VMware Tools进行解决 打开虚拟机VMware Workstation,启 ...

  9. 简说Python之Jupyter Notebook

    目录 简说Python之Jupyter Notebook 1.Jupyter Notebook 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Py ...

  10. Natas34 Writeup(闯关结束!)

    Natas34: 登录什么都不用做,闯关结束!撒花~~~