![](https://img-blog.csdnimg.cn/direct/886bf729db7a4c528239ba2108770745.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
洛谷题解
在洛谷上打题的总结以及一些方法归纳。
Daniel Mui
八边形战士
展开
-
【洛谷】 P2670 [NOIP2015 普及组] 扫雷游戏
扫雷游戏是一款十分经典的单机小游戏。在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。现在给出 n 行 m 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。#include<bits/stdc++.h原创 2021-07-24 09:12:53 · 509 阅读 · 1 评论 -
【洛谷】P1012 [NOIP1998 提高组] 拼数
设有 n 个正整数a1 …an ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。#include<bits/stdc++.h>using namespace std;string a[1000];bool cmp(string a,string b){ return a+b>b+a; //利用字符串相加的特性判断大小 }int main(){ int n; cin>>n; for(int i=1;i<=n;i++)原创 2021-07-23 09:55:30 · 201 阅读 · 0 评论 -
【洛谷】 P1598 垂直柱状图
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。输入样例THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.THIS IS AN EXAMPLE TO TEST FOR YOURHISTOGRAM PROGRAM.HELLO!输出样例 *原创 2021-03-30 00:38:54 · 653 阅读 · 0 评论 -
【洛谷】 P1308 统计单词数
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。这题我还没弄懂,借鉴了大佬的题解,仅供参考。#include<bits原创 2021-03-29 13:30:31 · 203 阅读 · 0 评论 -
【洛谷】P1125 笨小猴
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。说明/提示【输入输出样例1解释】单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。【输原创 2021-03-28 10:57:23 · 635 阅读 · 0 评论 -
【洛谷】 P1597 语句解析
一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];。未赋值的变量值为 0输出 a、b、c 的值。记录一下这道题,看似简单,我却挠头想了半天……(可能确实简单,是我太菜了)其实,只需利用ASCII码来做就行,关键是定义一个全为0的数组来存储输出的数。注意:题目说赋值可以是数字或一个变量,所以不要漏了赋值为变量的情况。#include<bits/stdc+原创 2021-03-28 10:34:50 · 486 阅读 · 0 评论 -
【洛谷】P1321 单词覆盖还原
一个长度为 l(3≤l≤255) 的字符串中被反复贴有 boy 和 girl 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy 几个 girl?记录一道大水题,没啥可说的,思路很简单。#include<bits/stdc++.h>using namespace std;int main(){ string a; int count1=0,count2=0; getline(cin,a); for(int原创 2021-03-28 10:27:18 · 494 阅读 · 0 评论 -
【洛谷】 P3741 honoka的键盘
honoka 有一个只有两个键的键盘。一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK 这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内 VK 出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次 VK(只有当 V 和 K 正好相邻时,我们认为出现了 VK。)这题用了分类讨论思想,先遍历一次字符串,找到VK后将其赋值为AA,计数器加一,然后在另一个循环中重新遍历字符串,若找到前后两个相同的字符则原创 2021-03-25 23:40:26 · 796 阅读 · 0 评论 -
【洛谷】 P1765 手机
一般的手机的键盘是这样的:要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。这道题直接暴力好吧(别想其他花里胡哨的做法)。分为按1下、2下、3下、4下、按0这五种情况,定义5个计数器对每种情况分别计数就好。注意别漏了空格(按0)的情况。#include<bits/stdc++.h>usin原创 2021-03-25 23:24:51 · 519 阅读 · 0 评论 -
【洛谷】 P5734 文字处理软件
你需要开发一款文字处理软件。最开始时输入一个字符串(不超过 100 个字符)作为初始文档。可以认为文档开头是第 0 个字符。需要支持以下操作:1 str:后接插入,在文档后面插入字符串 str,并输出文档的字符串。2 a b:截取文档部分,只保留文档中从第 a 个字符起 b 个字符,并输出文档的字符串。3 a str:插入片段,在文档中第 a 个字符前面插入字符串 str,并输出文档的字符串。4 str:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 -1。为了简化问题原创 2021-03-25 14:22:21 · 553 阅读 · 1 评论 -
【洛谷】 P4414 ABC
三个整数分别为 A,B,CA,B,C . 这三个数字不会按照这样的顺序给你,但它们始终满足条件: A<B<CA<B<C . 为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。题目默认A<B<C,故这其实就是一道排序题。每个数字对应ABC就行。#include<bits/stdc++.h>using namespace std;int main(){ int x,y,z,a,b,c,sum; char n; cin>>x>>原创 2021-03-11 16:39:35 · 1666 阅读 · 1 评论 -
【洛谷】P1888 三角函数
输入一组勾股数a,b,c(a≠b≠c),用分数格式输出其较小锐角的正弦值。(要求约分)当时我在做这题的时候,自己试了几组数据,发现貌似只有6、8、10这一组数据需要约分啊(笑死)。发现这一个小漏洞之后,我就上手试了一下,将6、8、10这组数据的情况打表进行特殊判断,其余情况一样,竟然还AC了(洛谷有些题确实能水过去啊……)。去翻了一下题解,竟然有想法跟我一样的(捂脸哭)。言归正传,这只是侥幸通过,本人不推荐这种做法,先贴个代码看看:#include<bits/stdc++.h>u原创 2021-03-09 23:58:27 · 386 阅读 · 0 评论 -
【洛谷】 P1424 小鱼的航程(改进版)
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x(1≤x≤7) 开始算起,过了 n(n≤10^6) 天以后,小鱼一共累计游泳了多少公里呢?这道题当然用循环,若不是周末则sum自加250;若是周末则让x自加这题有个坑,就是如果从周日开始(x==7),则要让x归位到1(x=1),因为没有周八呀!#include<bits/stdc++.h>using namespace std;int main(){ int x,n,sum=0; cin>&g原创 2021-03-05 22:55:09 · 231 阅读 · 0 评论 -
【洛谷】 P5716 月份天数
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。判断闰年口诀:四年一润,百年不润,四百年再润。我当时的第一想法比较直接,疯狂用if枚举判断代码如下:#include<iostream>using namespace std;int main(){ int y,m; cin>>y>>m; if(y%4==0 && y%100!=0 || y%400==0) //闰年情况 { if(m==1) cout<原创 2021-03-05 19:41:04 · 1061 阅读 · 0 评论 -
【洛谷】 P5715 三位数排序
给出三个整数 a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。模拟,用swap( )排序。#include<iostream>using namespace std;int main(){ int a,b,c; cin>>a>>b>>c; if(a>b) swap(a,b); if(a>c) swap(a,c); if(b>c) swap(b,c); cout<<a<<原创 2021-03-03 23:32:10 · 415 阅读 · 1 评论 -
【洛谷】 P1425 小鱼的游泳时间
小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己从a时b分一直游泳到当天的c时d分,请你帮小鱼计算一下,它这天一共游了多少时间呢?把小时转化为分钟,然后运算就行。当计算结果数据很大时,用long long类型或者unsigned long long类型(后者更大)。#include<iostream>using namespace std;int main(){ int a,b,c,d,e,f; cin>>a>>b&g原创 2021-03-03 23:25:58 · 798 阅读 · 1 评论 -
【洛谷】 P5705 数字反转
输入一个不小于 100且小于 1000,同时包括小数点后一位的一个浮点数,例如 123.4 ,要求把这个数字翻转过来,变成 4.321 并输出。把数字当作一串字符串,使用函数a.size( )求其长度,最后用一个数组反转就行。#include<bits/stdc++.h>using namespace std;int main(){ string a; cin>>a; int length=a.size(); for(int i=length-1;i>=0;原创 2021-03-03 23:19:49 · 1514 阅读 · 4 评论 -
【洛谷】P5704 字母转换
输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。当时不知道我在想什么,第一遍打的时候写了一个巨长无比的代码。虽然AC了,但是很浪费时间QAQ。#include<iostream>#include<cstdio>using namespace std;int main(){ int i; char a; char str[100]; for(i=0;;i++) { a=getchar(); if原创 2021-03-03 23:13:01 · 619 阅读 · 1 评论 -
【洛谷】 P1914 小书童——凯撒密码
某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 n 位形成的。z 的下一个字母是 a,如此循环。他现在找到了移动前的原文字符串及 n,请你求出密码。内层循环很关键。有个坑点:当字母大于z时,要令数为a。#include<bits/stdc++.h>using namespace std;int main()原创 2021-03-22 22:31:20 · 1011 阅读 · 0 评论 -
【洛谷】 P5733 自动修正
大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。只是想记录一道水题而已。补充两个函数:toupper( )小写转大写tolower( )大写转小写#include<bits/stdc++.h>using namespace std;int main(){ string n; getline(cin,n); for(int i=1;i<=n.size();i++原创 2021-03-22 22:23:47 · 1117 阅读 · 0 评论 -
【洛谷】 P5730 显示屏
液晶屏上,每个阿拉伯数字都是可以显示成 3×5 的点阵的(其中 X 表示亮点,. 表示暗点)。现在给出数字位数(不超过 100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。这题归纳在数组的类别中,但我感觉它更像是侧重考查字符串,毕竟用到了字符串的一点小技巧。我的做法很粗暴,打表,把所有情况都枚举出来(一般没思路或者追求速度建议打表,不用想的)。不知道为啥数组b要定义成string类型,char不行(但是一般字符串数组要不是char a[10原创 2021-03-22 22:19:42 · 1113 阅读 · 0 评论 -
【洛谷】P2141 珠心算测验
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测验题,请你帮忙求出答案。(本题目为2014NOIP普及T1)说明/提示由1+2=3,1+3=41+2=3,1+3=4,故满足测试要求的答案为22。注意,原创 2021-03-21 17:16:22 · 213 阅读 · 0 评论 -
【洛谷】 P1319 压缩技术
设某汉字由N × N的0和1的点阵图案组成。我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数再接下来连续有几个0,第四个数接着连续几个1,以此类推……例如: 以下汉字点阵图案:0001000000100000011110001000000100000010001111111对应的压缩码是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第原创 2021-03-21 16:09:59 · 1879 阅读 · 0 评论 -
【洛谷】 P5732 杨辉三角
给出 n(n≤20),输出杨辉三角的前 n 行。如果你不知道什么是杨辉三角,可以观察样例找找规律。我相信各位一定都懂杨辉三角吧(但凡上过高中的都知道)。但是一定没几个人知道下面这个递推公式:有了这个公式,就不用想这么多了,直接写。#include<bits/stdc++.h>using namespace std;int a[1000][1000];int main(){ int n; cin>>n; a[1][1]=1; //第原创 2021-03-19 23:40:01 · 423 阅读 · 0 评论 -
【洛谷】 P5731 蛇形方阵
给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。这题我还没搞懂,以下是借鉴一个大佬的代码,仅供参考。#include<bits/stdc++.h>using namespace std;int a[100][100];int main(){ int n; cin>>n; int k=1,x=1,y=0; int sum=n原创 2021-03-19 23:26:43 · 857 阅读 · 0 评论 -
【洛谷】 P2911 Bovine Bones G
题意翻译贝茜喜欢玩棋盘游戏和角色扮演游戏,所以她说服了约翰开车带她去小商店.在那里她买了三个骰子。这三个不同的骰子的面数分别为 s1,s2,s3。对于一个有 S 个面的骰子每个面上的数字是 1,2,3,…,S。每个面(上的数字)出现的概率均等。贝茜希望找出在所有“三个面上的数字的和”中,哪个和的值出现的概率最大。现在给出每个骰子的面数,需要求出哪个所有“三个面上的数字的和”出现得最频繁。如果有很多个和出现的概率相同,那么只需要输出最小的那个。这题还挺人性的,给了hint,这样就容易理解了。首先原创 2021-03-19 23:09:47 · 796 阅读 · 0 评论 -
【洛谷】 P1614 爱与愁的心痛
最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。这题还是用数组(以后数组可以开全局),for循环的条件最关键(这个可以自己找规律,i一定只能循环到n-m+1的)。特别注意最后要令sum=0(归位),为了能够进行下一次循环,直至找出最小的和。为什么数组长度是i+j-1呢?把上面两个for的条件相加可以得到(n-m+1)+m=n+1,所以数组等价于a[n]。还有一点,min原创 2021-03-19 09:39:20 · 684 阅读 · 1 评论 -
【洛谷】 P1554 梦中的统计
Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0…9):每一个数码在计数的过程中出现过多少次?给出两个整数 M 和 N (1 ≤ M ≤ N ≤ 2 ×109 以及 N - M ≤ 5 × 105),求每一个数码出现了多少次。#include<bits/stdc++.h>using namespace std;int a[100];int main(){ int原创 2021-03-19 09:26:54 · 2210 阅读 · 1 评论 -
【洛谷】 P1047 校门外的树
某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,…,l,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。这题思路是定义一个数组(数原创 2021-03-18 23:36:40 · 329 阅读 · 0 评论 -
【洛谷】P5727 冰雹猜想
给出一个正整数 n(n≤100),然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2。经过若干次循环后,最终都会回到 1。经过验证很大的数字(7×1011)都可以按照这样的方式比变成 1,所以被称为“冰雹猜想”。例如当 n 是 20,变化的过程是 [20, 10, 5, 16, 8, 4, 2, 1]。根据给定的数字,验证这个猜想,并从最后的 1 开始,倒序输出整个变化序列。#include<bits/stdc++.h>using namespa原创 2021-03-18 23:07:54 · 515 阅读 · 0 评论 -
【洛谷】 P1217 回文质数 Prime Palindromes
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。写一个程序来找出范围 [a,b] (5≤a≤b≤100000000) ( 一亿) 间的所有回文质数。结构化做题,定义两个函数,一个判断是否回文,一个判断是否为质数,最后在main函数中直接调用即可。#include<bits/stdc++.h>using namespace std;bool huiwen(int num) //判断回文 { int原创 2021-03-18 22:44:09 · 384 阅读 · 0 评论 -
【洛谷】P5723 质数口袋
小 A 有一个质数口袋,里面可以装各个质数。他从 22 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过 L (1≤L≤105) 的质数。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。#include<bits/stdc++.h>using namespace std;bool prime(int k)原创 2021-03-12 18:22:47 · 1153 阅读 · 2 评论 -
【洛谷】P1420 最长连号
输入 n 个正整数,要求输出最长的连号的长度。连号指从小到大连续自然数。题目要求找最长的连号,所以要定义max=0来找出最长的,之后将count归位为1,继续循环,若有更大的count,将max重新赋值得到最长连号。#include<bits/stdc++.h>using namespace std;int main(){ int n,max=0,cnt=1; //max用来找到最长连号,count用来计数 cin>>n; int原创 2021-03-12 18:01:57 · 2098 阅读 · 1 评论 -
【洛谷】P1307 数字反转
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。代码虽然很短,但是内涵很丰富,有点难想。(就是数学的妙用……)要定义一个a=0的变量来实现中间过渡。注意:这道题不能用字符串反转思想,因为有删除前导0的操作,用字符串反转会保留前导0。#include<bits/stdc++.h>using namespace std;int main(){ int n,a=0;原创 2021-03-12 17:42:03 · 496 阅读 · 3 评论 -
【洛谷】 P1980 计数问题
试计算在区间 1 到 n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到11中,即在1,2,3,4,5,6,7,8,9,10,11中,数字 1 出现了 4 次。水题应该都看得出啦吧哈哈~我的思路很简单,先循环输出所有数字,然后开个内循环循环每个数字本身,在这之前要另外定义一个变量代替i,循环新变量即可。#include<bits/stdc++.h> using namespace std;int main(){ int n,x,a,count原创 2021-03-12 17:32:27 · 577 阅读 · 0 评论 -
【洛谷】 P5721 数字直角三角形
给出n(1≤n≤13),请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。#include<bits/stdc++.h>using namespace std;int main(){ int n,num=1; cin>>n; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) //j从i开始循环 { if(num<原创 2021-03-11 23:53:56 · 1305 阅读 · 1 评论