考试T1总结(又CE?!)
考试T1CE...
最近不适合考试
T1
扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题。
歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海
棠,但是如今都已枯萎,只剩下那一株,寄托着对他深深的思念。
沿着墙一共有 n 个位置可以种下海棠花,主人公记得自己当年和他一共种下了 m
朵,由于花的特性,海棠不能紧挨着种植,也就是两朵海棠花之间最少间隔一个不种花
的空位置。但是她记不清当时海棠花具体是怎么摆放的了,所以她想知道一共有多少方
案使得 m 朵海棠花都被种下且两两之间不是相邻的。我们将这 m 朵海棠花按照
1,2,3…m 的顺序编号,两个种花的方案不同当且仅当它们被种下的位置不同或者从左向
右数花的编号序列不同。
为了避免输出过大,答案对一个参数 p 取模
这道题一看就是DP嘛...
是个数学题
就是有n个位置,m个不同物品,问m个物品都不相邻的摆法有几种,其中m小于ceil(n/2),就是n/2上取整
思路分析:
思路一:
骗分输出最小的良心防爆零样例
思路二:
打神搜,其实T2,T3也可以这样操作,时间不够了...只拿了十分
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef unsigned int ui;
ui type,n,m,p;
inline ui arr(const ui &k){
ui ans=;
for(ui i=;i<=k;i++)
ans=(ans*(i%p))%p;
return ans;
}
int ans;
inline void search(const int &step,const int &pos){
if(step==m){
ans++;
return;
}
for(int i=;i<=n;i++){
if(pos+i<=n&&step+<=m) //没有上下界剪枝
search(step+,pos+i);
}
}
int main(){
freopen("ilove.in","r",stdin);
freoprn("ilove.out","w",stdout); //大家注意这一行的freopen!!!!!!(目力呐喊!!!)
scanf("%d%d%d%d",&type,&n,&m,&p);
for(int i=;i<=n-(m-)*;i++) //遍历每个可能的点找可能的路线,所以非常慢,只能处理范围在20以内的点
search(,i);
cout<<ans*arr(m);
return ;
}
思路三(正经思路):
一开始的思路是考虑n个位置选m个位置再减去相邻情况,然而这并不好代码实现,而且最大数据范围是n<=2000000,m<=1000000,然而组合数最广为人知的求法要么是前缀和(杨辉三角),要么是公式计算,
前缀和算法会因为数据范围而时间爆炸,公式计算因为取模运算的存在而正确性爆炸...
双倍爆炸,双倍快乐,算法两开花!!!
前缀和的爆炸原因不解释,有目共睹...
下面讲下关于组合数取模的错误的原因:
现给出组合数计算公式(并不想百度百科...):

本式值即为在n个互不相同的东西中取m个的方案总数
并且可以直观的看出该值的直接公式运算需要除法的参与,
已知四则运算中的加减乘满足“一边算一边模还保证正确性”定律(瞎起的名字)
除可不可以?
那么现在考虑如下式子:
15/21 (mod 20)
15/7 (mod 3)
14/6 (mod 3)
如果把分子分母分别进行模运算再除,得到的值显然不正确,
那么现在就要考虑乘法逆元了
整除也不行(考虑15/5 (mod 7))
所以要么把乘法逆元板子搬过来,要么就把运算全都变成乘运算
现在考虑推一个保证正确的式子再将其尽可能的化简
现有m个不同物品摆在n个位子,那么就有n-m个空位
现在保证正确的方案就是把这几个空位固定,在它们之间插空摆物品,以保证每两个物品之间至少有一个空位
如图:

每两点的中间(包括最边上的两点之外那两条线)就是合法方案的可选位置
那么就是n-m+1个位置中选择m个位置摆物品,在考虑物品的排列顺序就好了
就是这样:

又知:


辣么它们的乘机化简下,就是这样滴:

那么剩下的只有乘法运算辣!
最后说一点,由于模数最大好像是109,所以要开long long,并且由于本题经过分析后数据范围就相当于很小了,所以不用专门写函数加上inline加速,根本没必要...
代码(及其简短):
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long n,m,p;
long long type; //当时type为什么要开long long
int main(){
scanf("%d%d%d%d",&type,&n,&m,&p); //type变量用来判别测试点类型(骗分的)
long long ans=;
for(int i=n-*m+;i<=n-m+;i++)
ans=ans*i%p;
printf("%d\n",ans);
return ;
}
考试T1总结(又CE?!)的更多相关文章
- 某考试T1 game
题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n− ...
- 某考试 T1 arg
题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...
- 某考试 T1 lcm
把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n). 因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b) ...
- 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...
- 2019.2.14 考试T1 FFT
\(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...
- 某考试 T1 fair (18.5.1版)
转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n. 然后可以发现这是一个经典题,随便推一下公式发现等于 C(n,n/2)/2 ...
- 某考试 T1 str
一开始死磕sam,发现根本没法做...... 后来想了想,反正匹配子串的大部分不是sam就是 二分+hash啊,,,于是就想了想二分+hash,发现好像可以做啊! 就是假设我们要让 s1[1] 映射到 ...
- 某考试 T1 monopoly
可以很容易的发现,如果选了最高的房子,那么就不能再选了:否则在左边选一坨合法的,在右边选一坨合法的,拼起来还是合法的. 所以我们可以处理出,每个数的控制区间[L,R] (保证这个区间是其他数都小于它的 ...
- 某考试 T1 Hello my friend
Discription
随机推荐
- 《Java设计模式》之解释器模式
解释器模式是类的行为模式.给定一个语言之后,解释器模式能够定义出其文法的一种表示,并同一时候提供一个解释器. client能够使用这个解释器来解释这个语言中的句子. 解释器模式的结构 以下就以一个示意 ...
- python基础练习-猜年龄、编写登陆接口小程序
python基础练习: 一.猜年龄 , 可以让用户最多猜三次! age=40 count = 1 while count <=3 : user_guess=int(input("i ...
- linux C函数之strdup函数分析【转】
本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: #i ...
- AngularJS2.0 一个表单例子——总体说来还是简化了1.x 使用起来比较自然
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- AJAX异步实现
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容. <head> <meta charset="utf-8"> & ...
- PCB genesis大孔加小孔(即卸力孔)实现方法
一.为什么 大孔中要加小孔(即卸力孔) 这其实跟钻刀的排屑有关了,当钻刀越大孔,排屑量也越大(当然这也得跟转速,下刀速的参数有关系),通常当钻刀越大,转速越慢,下刀速也越慢(因为要保证它的排屑通畅). ...
- Linux分区方式 及 Xshell远程连接排错
第1章 远程连接 1.1 Linux远程连接软件 Windows: Xshell/SecureCRT/Putty mac: 终端ssh命令或iterm2 Android: ...
- 洛谷P1726 上白泽慧音(Tarjan强连通分量)
P1726 上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村 ...
- Akka源码分析-FSM
akka还有一个不常使用.但我觉得比较方便的一个模块,那就是FSM(有限状态机).我们知道了akka中Actor模型的具体实现之后,就会发现,Akka的actor可以非常方便的实现FSM.其实在akk ...
- SpringBoot2.0整合SpringSecurity实现WEB JWT认证
相信很多做技术的朋友都做过前后端分离项目,项目分离后认证就靠JWT,费话不多说,直接上干活(写的不好还请多多见谅,大牛请绕行) 直接上代码,项目为Maven项目,结构如图: 包分类如下: com.ap ...