【题解】吃糖果
【题目描述】
【输入描述】
【输出描述】
对于每组数据,输出一行,包含一个“YES”或者“NO”。
【样例输入】
2 3 4 1 1 5 5 4 3 2 1
【样例输出】
NO YES
【题目描述】
【输入描述】
【输出描述】
对于每组数据,输出一行,包含一个“YES”或者“NO”。
【样例输入】
2 3 4 1 1 5 5 4 3 2 1
【样例输出】
NO YES
一、欧几里得算法
我们前面学过求最大公约数的算法:欧几里得算法(又叫辗转相除法) ,一般缩写是gcd,在C++中经常写成如下形式:
int gcd(int a,int b) { if(a%b==0) return b; else return gcd(b,a%b); }
原理就是代码中比较核心的 gcd(b,a%b),这个定理用文字描述就是:
用a除以b(这里是a>b,当然,在程序编程中,求两个数的最大公约数,可以不限a和b的大小,a<b也就是多一次循环)得到结果q和余数r,再用除数b除以余数r 再得到一个余数,再用除数除以余数,…如此循环,直到余数为0,那么此时的除数就是最大公因数。
想要证明gcd(a,b) = gcd(b,a%b),需要简单了解下面两个引理:
若d是a和b的公约数,那么d也是b和c的公约数(c为a%b)
若d是b和c的公约数(c为a%b),那么d也是a和b的公约数
这两个引理的是什么意思呢,拿第一个来说;
假设一个数d是a的因子,也就是a=m*d,同时也是b的因子,b=n*d,那么a%b = a-w*b = (m-w*n)*d;
由此可得,a的因子集合、b的因子集合和c的因子集合是相同的;
然后利用上述定理当余数为0的时候,除数就是最大公约数;
二、扩展欧几里得算法
从字面上看,扩展欧几里得算法就是把欧几里得算法进行了扩展,不仅能求a和b的最大公约数,还其他功能,比如:
求ax+by=m的任意一组解,最小整数解。
求模逆元(模反元素)
为了了解学习上面的公式,需要先了解一个裴属定理
【题目描述】
求m%n。
【输入描述】
两个数,m和n。
【输出描述】
m模n的值。
【样例输入】
3
【样例输出】
2
【数据范围】
对于30%的数据, 1<m<10^18
对于70%的数据, m>10^18
【题目描述】
求解 (2^0 + 2^1 + 2^2+ ... + 2^n) % 2333
【输入描述】
一行,一个整数n。
【输出描述】
一行,表达式的正确结果
【样例输入】
2
【样例输出】
7
【题目描述】
有n个非负整数,请从这n个非负整数中,选出m个数,在不改变m个数的顺序的情况下,构成一个新数列,要求该数列的中相邻两个数的差值绝对值的和尽可能小。
请问,这个最小的差值绝对值的和是多少?
比如:有5个数是2 1 8 5 9,如果从中选3个数,不改变顺序的情况下,要求相邻2个数的差值绝对值的和最小,选数方法可以是:2 1 5,差值绝对值的和是|1-2|+|5-1|=5。
【输入描述】
第1行输入2个整数,分别是n和m。(2≤m≤n≤100)
第2行,有n个非负整数,数字之间用空格隔开。
【输出描述】
按题意输出最小的差值绝对值的和。(本题保证计算出来的结果,在int的范围内)
【样例输入】
5 3 2 1 8 5 9
【样例输出】
5
【题目描述】
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹的枚数和导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,每个数据之间至少有一个空格),计算这套系统最多能拦截多少导弹。
【输入描述】
第1行有1个整数n,代表导弹的数量。(n<=1000)
第2行有n个整数,代表导弹的高度。(雷达给出的高度数据是不大于30000的正整数)
【输出描述】
第一行:最多能拦截的导弹数;
第二行:要拦截所有导弹最少要配备的系统数。
【样例输入】
8 389 207 155 300 299 170 158 65
【样例输出】
6
【题目描述】
小A在生日这天收到了哥哥送来的一盒糖果,这盒糖果共有M个,小A要把这盒糖果放到N个盘子中(允许有盘子不放),请问,有多少种不同的放法?
请注意:数值相同,顺序不同,我们视为是相同的放法,比如,1 1 6,和1 6 1、6 1 1,我们视为是同一种放法。
【输入描述】
输入包含多组测试样例。每组输入的第一行是一个整数t,表示数据有多少组。(t<=10)
接下来t行,每行输入两个整数M和N,代表有糖果的数量和盘子的数量。
(M和N均≥0,且≤20)
【输出描述】
对于每对输入的M和N,输出有多少种放法。
【样例输入】
1 7 3
【样例输出】
8