![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题解
luozhichen
湘一立信实验学校
展开
-
P8177 「EZEC-11」等差数列
题目直通车题目大意:这道题就是问你这个等差数列能往里面加几个数字,使改动后的数列依然是等差数列。思路:思路很简单,就是看它的公差是否为偶数,是的话就继续,否则输出即可。具体解释看代码。代码如下:#include<bits/stdc++.h>#define int long long//记得long longusing namespace std;int t;int n,a,b;signed main(){ cin.tie(0),cout.tie(0); ios::sy原创 2022-03-04 21:55:43 · 199 阅读 · 0 评论 -
CF1130A Be Positive题解
题意:题目看起来要暴力但是还有一种更简单的方法。正数大于一半就输出 111 ,负数大于一半就输出 −1-1−1 ,否则就输出 000 。为什么正数大于一半输出 111 呢?其实任何数除以 111 都等于其本身,所以输出 111 ,除以 −1-1−1 等于它的相反数,所以负数多些时就输出 −1-1−1 ,否则输出 000 。代码:#include<bits/stdc++.h>using namespace std;int n;int a[10001];int zs,fs,l;int原创 2022-01-29 16:28:19 · 97 阅读 · 0 评论 -
CF299B Ksusha the Squirrel
这道题很水,暴力就可以出奇迹。如果前面有障碍,那就看能不能跳过去。用 mmm 来存储连续的石子的数量,当 mmm 超过 kkk 时就输出 NO\texttt{NO}NO,然后结束,否则就输出YES\texttt{YES}YES。坑点 : kkk 不能等于连续的石子的数量。(见样例3)代码:#include<bits/stdc++.h>using namespace std;int n,k,m;char a;int main(){ cin >> n >> k原创 2022-01-27 08:23:13 · 152 阅读 · 0 评论 -
CF239A题解
这题还是比较水的,但是我旁边的巨佬一开始竟然 TLE 了,所以还是不能小看这道题!题意:就是让你把 (x+y)mod k=0(x + y) \mod k = 0(x+y)modk=0 的各种 xxx 值算出来输出。但是如果直接从 1 开始每次加 1 搜的话 TLE 就会跑过来和你玩。那怎么做呢?首先找到 x+y=kx + y = kx+y=k 的情况然后 xxx 每次加上 kkk 这样子就可以过了。代码:#include<bits/stdc++.h>using namespace st原创 2022-01-27 08:22:47 · 51 阅读 · 0 评论 -
UVA10008 题解
题目链接这道题也很简单,只是有一些小坑点。要一行一行的读入字符串那就得用到 getline 了。然后把那些字母全部转换成大写字母。再拿个数组统计各个字母出现的数量,最后输出。getline用法:getline(cin,s);意思就是把那一行的输入放到 s 那个数组里面。ASCII码表:大写字母和对应的小写字母差是 323232。如果你忘记的话也可以拿小写字母减大写字母。代码:#include<bits/stdc++.h>using namespace std;int n;原创 2022-01-27 08:21:18 · 102 阅读 · 0 评论 -
P7817 [RC-05] 迷失自我
题目链接首先,我把目光放在了数据点上,一个 222 分,一个 989898 分。一看暴力就只能拿 222 分。但是我们把暴力程序打出来,然后自己手造数据发现,只要 nnn 大于 222 时,输出的都是 000。这是偶然吗?其实不是。接下来我们就来证明 n>2n > 2n>2 时答案都是 000。证明:一个长度大于 222 的串,一定存在一个数字(777 或 999)出现次数大于 111。那么,令 l1=r1=pos1l_1 = r_1 = pos_1l1=r1=pos1,l2原创 2022-01-27 08:20:49 · 158 阅读 · 0 评论 -
P7840 「PMOI-4」人赢
这道题我在打比赛时竟然没想到有这种做法。对于这道题,首先一看,可以暴力拿 303030 分。代码如下:#include<bits/stdc++.h>using namespace std;int n,m;long long k;int gw;int main(){ cin >> n >> m >> k; if(k == 1){ cout << n; return 0; }else if(k == 2){ cout &原创 2022-01-27 08:20:16 · 101 阅读 · 0 评论 -
UVA11608 No Problem 题解
题意一年有 12 个月,每个月有一场月赛。本来有 sss 道题。对于第 i 个月,当月的月赛需要 bbb 道题,而每个月会出 aaa 道题,每个月出的题必须要等到下个月才能用。问你每个月能不能举办月赛。思路暴力模拟。坑点1月开始时就是 SSS,其他月份都是上个月剩余的。那个月出的题目这个月竟然用不了,我猜是要审核。这是循环输入的,不要掉坑,样例上很难看出。代码#include<bits/stdc++.h>## using namespace std;int s,a[13],原创 2022-01-27 08:19:37 · 63 阅读 · 0 评论 -
P5551 Chino的树学
题目意思:给出一颗二叉树的先序遍历,规划一条路径,使得路径上经过的结点的权值之和最大。哇塞,这不简单?直接暴力 DP 即可。思路:你可以发现,一个节点以及它的子树加起来的最大的情况就两种,第一种就是自己加上他的右子树的最大值,第二种就是加上左子树的最大值。所以代码就出来了。(这题竟然没标签!!!建议管理加个贪心和 DP 的标签)代码:最重要的部分:inline int max(int a,int b){ return a > b ? a : b;}int dfs(int dep){原创 2022-01-27 08:18:22 · 146 阅读 · 0 评论 -
P7901 「PMOI-0」潇湘の雨
原题传送门看完这道题后,便觉得事情肯定不会只有暴搜这么简单。再看看数据范围,太大了吧!于是便知道事情真的没那么简单。进入正题:看到题目首先会想到这三种情况(图有点丑,请见谅!):发现只要没到完整的 2n×2n2n\times2n2n×2n 次,那就不会踩到终点。所以,代码如下:(注意数据范围)#include<bits/stdc++.h>using namespace std;long long n,k,x,y;//注意范围int main(){ cin >>原创 2022-01-27 08:18:54 · 123 阅读 · 0 评论 -
P4109 [HEOI2015]定价
题目直通车题目大意:让你在一个区间内选一个数,使得这个数荒谬度最小。荒谬度:把那个数的末尾的 0 全部消掉之后的长度的两倍。如果删完后的末尾是 5 的话,就再减个 1。思想:先看它的位数,让 ansansans 的初始值位 lll 的最高位,然后在后面加上很多 0(就是 cjcjcj ),直到和 lll 的位数相等。此时,让 ansansans 最高位持续加 1,如果到了 lll 到 rrr 中的话那就看一下除了 0 后最后一位能不能是 5。如果 ansansans 一次都加不了的话那就将 cjc原创 2022-01-26 15:10:48 · 507 阅读 · 0 评论 -
UVA11455 Behold my quadrangle 题解
这道题重点:如何判断一个图形是不是四边形:任意三条边之和大于第四条边。(其实和三角形判断方法没啥区别)如何判断一个图形是不是正方形:四条边长度相等。(这如果不知道就可以退役了!!!)如何判断一个图形是不是矩形:矩形的对边相等,所以只要给出的四条边里出现了两条长度相等的边,还有剩下的两条边长度也相等,那么它就是矩形。华丽的分割线代码:#include<bits/stdc++.h>using namespace std;long long t;long long a,b,c原创 2022-01-26 15:09:53 · 61 阅读 · 0 评论 -
P7933 [COCI2007-2008#5] PASCAL
题意:题面的代码转换成 c++ 就是#include <bits/stdc++.h>using namespace std;int n,cnt;int main() { cin >> n; for(int i=n-1;i>=1;--i) { cnt++; if(n%i==0) break; } printf("%d",cnt); return 0;}跳出循环的地方就是除 nnn 以外最大的因数。那我们就从 2 到 n\sqrt{n}n 模拟就原创 2022-01-26 15:09:03 · 185 阅读 · 0 评论 -
P7960 [NOIP2021] 报数
原题直通车大意:看输入的这个数是否和 7 有关(7的倍数和含有7的倍数),若有关,则输出 -1,否则输出大于这个数且第一个和 7 无关的数。思路:埃氏筛+判断本身埃氏筛:找到一个未被记过的数,把它的倍数都登记一遍。判断本身:把数字的每位都拆出来,判断是否含有 7。做完这两个后就能保证正确性。因为本身含有 7 的都被筛掉了,它的倍数也就没了,根据题目大意所有不满足要求的数就都被筛完了!代码:#include<bits/stdc++.h>using namespace std;i原创 2022-01-26 15:07:56 · 507 阅读 · 0 评论 -
P3182 [HAOI2016]放棋子
题目直通车大意:问你有多少种方法使 nnn 个棋子同一列,同一行。思路:错排和高精度此题就是将 P1595 加上了高精度。错排模板:f[0] = 1;f[1] = 0;for(int i = 2;i <= n;i++){ f[i] = (i - 1) * (f[i - 1] + f[i - 2]);}高精度模板:void add(int m){//高精乘和高精加,把f[i] = (i - 1) * (f[i - 1] + f[i - 2]) 高精化 int x =原创 2022-01-26 15:07:22 · 143 阅读 · 0 评论 -
UVA1149 装箱 Bin Packing 题解
题目直通车做法:贪心。怎么贪?(用手贪啊)我们首先把这个数组排一下序,然后看第一个(也就是最小的)能加上后面的吗?如果可以,就看最大能装到哪个。一直到数组内数字全部被包完。这样就能保证是最优的。或者从后面开始往前面,看能加到哪个最大的就可以了。代码:#include<bits/stdc++.h>using namespace std;int t;int main (){ cin >> t; for(int tt = 1;tt <= t;tt++){//t组数原创 2022-01-26 15:06:04 · 409 阅读 · 0 评论 -
UVA11987 Almost Union-Find 题解
题目大意:背景:在这个问题中,你将实现一个与之相似的数据结构,但不完全相同,您需要编写的数据结构也是并查集,支持以下三种操作:1 ppp qqq: 将包含 ppp 和 qqq 的集合进行合并,如果 ppp 和 qqq 已经在一个集合中,忽视此项操作。2 ppp qqq: 将 ppp 移动至包含 qqq 的集合中,如果 ppp 和 qqq 已经在一个集合中,忽视此项操作。3 ppp: 输出 ppp 所在集合的元素个数和总和。初始时共有 nnn 个集合,分别为 {1},{2}...{n}\{原创 2022-01-26 15:05:25 · 820 阅读 · 0 评论 -
SP7424 GIRLSNBS - Girls and Boys
题目翻译:一个即将毕业的班级里有 GGG 个女生和 BBB 个男生。你需要在毕业典礼上把它们排成一排。为了给人一种多样化的印象,你应该避免连续坐太多女孩或太多男孩。你决定安排学生是为了减少男女比例。排列的性别规律性是指连续出现的同性别学生(全是女生或全是男生)的最大数量。已知 GGG 和 BBB ,计算所有可能安排中最小的性别规律性。思路:把男生个数平均分成女生的个数份,然后向上取整,就是 ⌈BG+1⌉\left\lceil\dfrac{B}{G + 1}\right\rceil⌈G+1B⌉ 。这就原创 2022-01-26 15:04:42 · 242 阅读 · 0 评论