洛谷题解
CUCKyrie
中国传媒大学智能媒体计算实验室IMC硕士研究生
展开
-
Luogu P1591 阶乘数码
题目描述:在n!的数位中存在多少个正整数m?题解:首先n的取值范围是1000肯定爆炸…必须上高精度看一看就是高精度 * 单精度的操作了。AC代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxn = 1e6 + 13;int a[max原创 2020-08-14 12:23:08 · 152 阅读 · 0 评论 -
Luogu P1372 又是毕业季
题目描述:给出你1~n这n个数,找出k个数使他们的gcd最大。并输出这个gcd。题解:如果这k个数的最大公因数是x,那么就需要满足:x∗1,x∗2,x∗3.....x∗k∈nx * 1,x*2,x*3.....x*k ∈ nx∗1,x∗2,x∗3.....x∗k∈n那么我们希望x * k无限靠近n,所以就有了答案n / kAC代码:#include<iostream>#include<cstdio>#include<cstring>#include&l原创 2020-08-13 14:54:03 · 75 阅读 · 0 评论 -
Luogu P1143 进制转换
题目描述:给出一个n进制数,要求你将其转换成m进制数。题解:裸的板子题,进制转换套个板子就行,我是用的十进制作为中间值转换的。AC代码#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#define ll long longusing namespace std;char a[50];int main()原创 2020-08-13 12:04:16 · 113 阅读 · 0 评论 -
Luogu P1595 信封问题
题目描述:有n封信和n个信封,现在这n封信全部放错了,请问一共有多少种放置方法?题解:典型的错排问题。我们用dp的思维去解答:我们假设dp[i]表示i封信错排的方法:1.我们先放第n封信,这样就有(n - 1)种放法。2.我们假设第n封信放在了第k个信封里,那么我们继续放第k封信。3.如果第k封信放在第n个信封里,那么对于剩下的n - 2封信就是有dp[n - 2]种方法。4.如果没有放在第n个信封里,就是dp[n - 1]种方法了。所以最后的式子就是:dp[n]=(n−1)∗(dp[n原创 2020-08-13 11:34:15 · 274 阅读 · 0 评论 -
Luogu P1044 栈
题目描述:给出一个输入序列一个中间操作栈,以及一个输出序列,现在需要你求出给定的1 ~ n的输入序列通过栈出栈入栈操作后可以得到多少种不同的输出序列。题解:这个题需要一个数论知识储备:卡特兰数什么意思呢,我们定义:h(0) = 1;h(1) = 1,那么满足:h(n)=h(0)∗h(n−1)+h(1)∗h(n−2)+......h(n−1)∗h(0) h(n) = h(0) * h(n - 1) + h(1) * h(n -2) + ......h(n - 1)*h(0)h(n)=h(0)∗h(n原创 2020-08-12 21:57:41 · 112 阅读 · 0 评论 -
Luogu P1029 最大公约数和最小公倍数
题目描述:现在给你两个整数:x和y,现在需要你找出这样的一对数据P,Q满足:gcd(P,Q)=x gcd(P,Q) = xgcd(P,Q)=x lcm(P,Q)=y lcm(P,Q) = ylcm(P,Q)=y现在问你最多可以找出多少对。题解:这个题需要一点数论知识:gcd(x,y)∗lcm(x,y)=x∗y gcd(x,y) * lcm(x,y) = x*ygcd(x,y)∗lcm(x,y)=x∗y所以接下来我们需要的就是枚举P * Q的所有约数,然后判断是否满足gcd(P,Q) = x即可原创 2020-08-12 18:53:53 · 165 阅读 · 0 评论 -
Luogu P1497题解
题目描述:有一个n * n的方形区域,同时你有k个木牛流马,同时这k个木牛流马有h种颜色,现在规定两个木牛流马不能同时存在于一行或者一列里面,现在问有几种放置方法?题解组合数学问题,这个题目整体的思想还是分步骤进行1.先认为是一种颜色,找出有几种选择位置的方法。2.再对这些木牛流马涂色。如果我们先选择列,那就是有C(n,k)种方法,如果选择列的基础上再去选择就有A(n,k)种方法,然后我们再去选择...原创 2020-08-02 18:13:03 · 133 阅读 · 0 评论 -
Luogu P2607题解
题目描述:给出一个n * n的图形,这个图形由0,1,x组成,其中x表示石子的位置,0表示空地,1表示坐标轴。现在需要你求出两个石子所连成直线在指定坐标轴下的一次函数方程。题解:这个题其实最大的问题是,情况多不好分析。都有哪几种情况呢?我们简单说明一下:1.两点位于坐标轴上。2.两点中一点位于坐标轴上,另一点不在坐标轴上。3.两点都不在坐标轴上。当然这里面又要分斜率和常数项的正负问题…而且这个题目还不好找坐标。我们可以看出这样的一件事:当图上的一条线上全部都是1或者x的时候,说明原点的位原创 2020-07-30 22:39:42 · 118 阅读 · 0 评论 -
Luogu P1755题解
题目描述:已知任意一个正整数都可以拆分成有限个斐波那契数列之和。现在需要你编写程序证明。要求从小到大输出,若有多组数据,以个数最小的为准,若仍有多组,输出右边尽量大的一组。题解:这个题首先打表无疑,但是斐波那契数列...原创 2020-07-29 21:28:59 · 451 阅读 · 1 评论 -
Luogu P1024题解
题目描述:对于一个一元三次方程,我们给出各个项的系数,现在需要你找出这个一元三次方程的三个根,保证根的大小-100~100且根于根之间差的绝对值大于1。题解:已经知道了每个根的限制条件,我们就可以把-100~100这个区间按区间长度1来分,每个区间上二分查询一次答案,这里注意,我们是在实数域上进行二分,所以要有精度的要求。题中说明结果取小数点后2位,那么我们放到后三位即可。AC代码:#include<iostream>#include<cstdio>#include&l原创 2020-07-28 23:19:20 · 184 阅读 · 0 评论 -
Luogu P1887乘数最大3题解
题目描述:给了你两个数N和M,现在需要你找出M个数满足其和为N且乘积要尽可能大,如果答案相同输出字典序最小的那一个。题解:如果要求M个数和相同,乘积最大,那么只有当这M个数相同时满足,这一点可以从基本不等式上归纳出来。那么如果M不能被N整除呢?那我们为了满足乘积最大原则,我们把N对M的模数拆成有限个1,分别从后往前加到这M个数上(因为要满足字典序最小),如果加完以后模数还有剩余,就把剩余的模数给最末位的数(还是要满足字典序最小),这样这个题的结果就有了AC代码:#include<iostre原创 2020-07-28 20:35:21 · 214 阅读 · 0 评论 -
Luogu P1851题解
题目描述:小可可和所有其他同学的手腕上都戴有一个射频识别序列号码牌,这样老师就可以方便的计算出他们的人数。很多同学都有一个“好朋友” 。如果 A的序列号的约数之和恰好等于 B 的序列号,那么 A 的好朋友就是 B。在这里,一个数的约数不包括这个数本身。因为一些同学的号码约数和大于其他任何同学的号码,所以这些同学没有好朋友。一些同学有一个“非常好友” 。当两个同学互为“好朋友”时,他们就是一对“非常好友” 。注意在这道题中,忽略那些自己是自己的“非常好友”的情况。题解:首先这个题目肯定不能暴力遍历,但是原创 2020-07-28 15:58:30 · 379 阅读 · 0 评论 -
Luogu P1876题解
题目描述:基本思路和之前做过的开灯问题很相似。首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的灯开的关上,关的开起来……直到第N个人为止。给定N,求N轮之后,还有哪几盏是开着的。题解:这里还是补充一个数学知识:任何一个正整数,如果它的约数是奇数个,那它只能是一个完全平方数!证明一下:对于一个正整数n,如果i是它的约数,那么n / i也是它的约数,那也就是说,我们确定一个约数,总能找到另一个与它相对原创 2020-07-25 09:50:46 · 390 阅读 · 0 评论 -
Luogu P1304
题目描述:输入一个偶数 N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想:任一大于 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10,10=3+7=5+5,则 10=5+5 是错误答案。题解:先用素数筛子筛一下素数,我筛的是1e4的素数应该是够用的。然后要找第一个数的加法比起它分发最小的方案,所以我们可以从i = 2开始遍历,这样我们找到的第一个数一定是最小的。AC代码:#include<iostream>原创 2020-07-24 21:39:58 · 116 阅读 · 0 评论 -
Luogu P2669金币题解
题目描述:国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。请计算在前K天里,骑士一共获得了多少金币。题解:数学模拟题,找到天数大于k的时候一天的金币数是多少,再用当前累计的天数减去k就是差的值。(看代码)AC代码:#in原创 2020-07-24 17:51:08 · 461 阅读 · 0 评论 -
Luogu P2043题解
题目描述:对N!进行质因子分解。题解:N的取值范围到了1e4,那么如果硬算的话肯定会爆掉的。但是我们知道N! = 1 * 2 * 3 * 4 * .... * N,所以对N!进行质因子分解,从某种程度上讲就是对1~N分别进行质因子分解然后统计。AC代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>usi原创 2020-07-24 16:06:41 · 170 阅读 · 0 评论 -
Luogu P1615西游记公司题解
题目描述:现在的情况是这样:猪八戒要去偷沙和尚的电脑,同时孙悟空也要来偷猪八戒的平底锅,现在给了你猪八戒偷电脑的时间和悟空去偷平底锅的时间,以及猪八戒每秒可以拿多少电脑,现在需要你计算八戒在不丢锅的情况下能拿到多少电脑。题解:这个题可以用scanf的自定义输入格式来实现时间格式输入,那么对于八戒可以偷电脑的时间,其实就是两个时间时、分、秒分别做差后转换成秒数求和,因为我们注意到,悟空进来的时间总是比八戒晚,那么对于两者的时间,我们就可以分别对时、分、秒做差然后折合成秒数再求和,就是八戒可以偷电脑的总原创 2020-07-24 14:33:40 · 211 阅读 · 0 评论 -
Luogu P1554题解
题目描述:某个兄得做梦还在统计数据,现在给了你两个数表示序列范围,现在问你这个序列中0~9各出现了多少次。题解:首先这个题目满足了N - M <= 5e5所以可以直接暴力枚举,当然有的做法是先把N~M之间的整数数据转换成字符串然后再统计出现的数字个数。但是整体思路大差不差了。AC代码:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<原创 2020-07-24 11:47:06 · 249 阅读 · 0 评论 -
Luogu P1482题解
题目描述:给了一个Cantor表,现在给你两个分数(不一定是最简形式),现在需要你求出这两个分数的积在Cantor表中的位置位于几列几行?题解:首先补充一个数学知识:分数的分母表示Cantor表上的行号,分子表示Cantor表上的列号。其实就是一个gcd的问题,先不要去管他有没有整除或者化成最简,我们就直接相乘然后取分子分母gcd就完事儿了。AC代码:#include<iostream>#include<cstring>#include<cstdio>#原创 2020-07-23 23:44:05 · 230 阅读 · 0 评论 -
Luogu P1146题解
题目描述:按照数学方法,每次翻(n - 1)个硬币相当于是每次翻一个硬币证明:定义翻某n-1个为A类操作。定义B操作,是把所有的硬币全部翻面。定义C操作,是翻某一个硬币。题主的问题是若干次A操作之后能否达到某个状态,而一个A操作等同于做一次B一次C,注意到B和C操作是可交换的,因此可以理解为先做若干次数的C操作,然后再做相同次数的B操作。而做若干次C操作相当于一个一个硬币地翻,所以第i次翻转就是翻转除了第i个硬币以外的所有硬币。所以只需要翻硬币翻n次,第i次翻硬币翻除了第i个硬币...原创 2020-07-23 22:53:30 · 164 阅读 · 0 评论 -
Luogu P2524题解
题目描述:这个题目和P2525很相似,但是问法不同,这个题问的是给你一个既定序列,问这个序列是所有排列中的第几小的。题解:这个题目有两种思路,其中一个是STL的prev_permutation(a,a+n)来不断求解上一个字典序,如果返回值为0,那就说明这个序列已经是字典序最小的。但是如果用组合数学的知识呢?康托展开式!~~康托展开式的公式为X=a[n] * [(n-1)!] +a[n-1]*[(n-2)!]+....+a[1] * [0!]。其中X代表当前排列小的排列的个数,a[i]代表原创 2020-07-23 10:53:49 · 161 阅读 · 0 评论 -
Luogu P2525题解
题目描述:给了一个序列现在询问他是不是字典升序,不是的话就输出他前一个字典序的序列题解:STL伟大!!!!直接一波prev_permutation函数解决!AC代码:#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn = 1e6 + 19;int a[maxn] = {};int main(){ int n;原创 2020-07-22 23:56:37 · 168 阅读 · 0 评论 -
Luogu P2181对角线
题目描述:给了你一个n边形,现在需要你求它所有对角线得到的交点的个数。题解:还是排列组合的知识,我们可以发现对于两条对角线相交的点,其对应的就是n边形上的4个顶点,所以反过来想,就是四个顶点确定一个交点,所以四个顶点的选择就成了排列组合的问题了。我们很容易写出n * (n - 1) * (n - 2) * (n - 3)但是我们也注意到,这样的选择需要去除重复问题,也就是不考虑顺序的,所以需要再除以一个4! = 24。同时,对于上式有爆LL的可能,所以我们可以把24分为2,3,4,其合理性在于,对原创 2020-07-22 23:38:27 · 156 阅读 · 1 评论 -
LuoguP2241统计方形加强版
题目描述:给了你一个n * m的棋盘,现在问你这个棋盘里面有多少个正方形和长方形。每个小方形的边长我们默认为1.思路:首先这个题目需要的知识点有:对于一个n * m的棋盘,其中包含的矩形个数有(n + 1) * (m + 1) * n * m / 4,所以这里面就包括了所有的正方形和长方形。解释一下,我们知道两个对角线上的点确定一个矩形,所以对于一个n * m的棋盘,共有(n + 1) * (m + 1)个顶点,也就是说我们可以在这些顶点中任意选一个。但是接下来第二个顶点的位置就需要一点限制了。因为原创 2020-07-22 20:34:16 · 76 阅读 · 0 评论 -
洛谷P1217 [USACO1.5]回文质数 Prime Palindromes
题目描述:因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。写一个程序来找出范围 a,b间的所有回文质数。个人思路:这个要把握两点:1.偶数一定不满足条件。2.最大的回文质数是9989899。AC代码:#include<iostream>#include<cstdio>#include<cstrin...原创 2020-01-27 15:51:40 · 272 阅读 · 0 评论 -
洛谷P1149火柴棒
题目描述:注意:加号与等号各自需要两根火柴棍如果A≠B,则A+B=C与B+A=C视为不同的等式(A,B,C>=0)n根火柴棍必须全部用上个人思路:本来想开个结构体然后暴力一下,结果突然发现了可以有两位数三位数就放弃了这个想法…这个思路参考了官方的一些题解,其中不乏有大神不用DFS直接写的,这里还是给出一个DFS的写法,注意代码中A,B两个数组的利用,一个是统计火柴棒数目,另一...原创 2020-01-26 15:11:02 · 174 阅读 · 0 评论 -
洛谷P1036 选数
题目简述:从N个整数中选择K个数求和,求出和为素数的组合数。个人思路:题中给了20组数据,直接暴力DFS,注意DFS的时候用每次选的数据往后再选,比如第一次选的3,后面可以选7,12,19,选完之后继续往后选以此类推。AC代码:#include<iostream>#include<algorithm>#include<cstdio>#includ...原创 2020-01-25 22:02:46 · 94 阅读 · 0 评论 -
洛谷P1028数的计算
题目描述:我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:1.不作任何处理;2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.输入:6输出6个人思路:基本思路是递归应该没啥好说的。但是提交过程中有这样的情况:#includ...原创 2020-01-19 08:55:10 · 469 阅读 · 0 评论 -
洛谷P1914小书童——密码
题目描述某蒟蒻(是我没错)迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇(zlsnb!)。输入1qwe输出rxf个人思路:约瑟夫环原理循环求解代码如下#include<cstdio>#include<iostream>#include<cstring>#include<algorith...原创 2020-01-18 11:44:58 · 352 阅读 · 0 评论 -
洛谷P1598垂直柱状图题解
题目描述写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。输入THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.THIS IS AN EXAMPLE TO TEST FOR YOURHISTOGRAM PROGRAM.HELLO!...原创 2020-01-18 11:05:02 · 548 阅读 · 0 评论 -
洛谷P1553(数字反转升级版)
题目:给定一个数,请将该数各个位上数字反转得到一个新数。这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数只改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原...原创 2020-01-17 23:21:22 · 287 阅读 · 0 评论 -
洛谷P1308个人题解
#P1308 统计单词数(题源洛谷)问题描述:给你两个字符串,让后让你找出第一个字符串在第二个字符串中出现的次数,并记录最小位置。我的思路:首先把所有的大写字母转化成小写,空格也一块转化了这样在判断条件的时候就不用加上空格的情况。大写字母+32就变成小写,空格+32后就是@,然后分别判断第一个字符串出现的位置:开头或字符串内。同时判断第一个串独立(也就是不是出现在单词组成部分中),代码如下:...原创 2020-01-15 12:55:06 · 489 阅读 · 0 评论