
算法学习
HeyRena
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】矩形结构代码笔记摘录
摘录自:team-learning-programpublic class Rectangle{ public float Length; public float Width; public Rectangle(float length, float width) { Length = length > 0 ? length : 0f; Width = width > 0 ? width : 0f; } pu原创 2020-10-15 22:06:39 · 258 阅读 · 0 评论 -
【力扣刷题】217. 存在重复元素
题目来源:217. 存在重复元素 - 力扣(LeetCode)思路:先给数组进行排序,cnt为慢指针,i为快指针,当数组当前元素等于前一个元素时,说明存在重复元素,return true;否则慢指针右移一位,继续查找重复元素;如果循环结束仍未return true,return false。AC代码:class Solution {public: bool containsDuplicate(vector<int>& nums) { int len=n原创 2020-08-18 22:14:35 · 256 阅读 · 0 评论 -
【力扣刷题】274. H 指数
题目来源:274. H 指数 - 力扣(LeetCode)思路:(1)令cnt等于数组长度,并用其来计数作为最终输出的答案;(2)对数组进行排序后,逆序循环比较,如果当前论文被引用次数大于cnt,说明超出引用指标,符合要求,cnt+1;(3)输出cnt。AC代码:class Solution {public: int hIndex(vector<int>& citations) { int len=citations.size();原创 2020-08-16 20:45:46 · 258 阅读 · 0 评论 -
【力扣刷题】134. 加油站
题目来源:134.加油站 - 力扣(LeetCode)思路:参考学习了两个思路的解法:(1)官方题解:在我看到第二种就是(2)用图的思想分析时,我觉得官方和大佬的想法在本质上不谋而合,共同点且核心都是利用油量的变化,只不过官方题解使用了两个变量——总油量和当前油量进行比较判断,微观上用当前油量判断,如果行驶到下一个加油站当前油量小于0,说明排除从这个加油站开始环绕一周的可能,ans=i+1;宏观上用总油量判断,如果行驶一周后总油量小于0,说明无法成功环绕一周。代码运行时间相比(2)较长。加油站原创 2020-08-16 19:55:31 · 267 阅读 · 0 评论 -
【菜鸟进阶之路】P2955 [USACO09OCT]Even? Odd? G - 洛谷
一、题目部分选自洛谷:P2955 [USACO09OCT]Even? Odd? G二、解题过程思路因为数的大小最大可以达到10^60,所以用字符串存储数,并在输出时对字符串末位的数与2求余即可进行奇偶数的判断。提交AC答案#include<bits/stdc++.h> using namespace std; int n;struct Num{ string a; int len;}num[101];int main() { scanf("%d",&a原创 2020-08-15 18:45:08 · 405 阅读 · 0 评论 -
【菜鸟进阶之路】P4327 [COCI2006-2007#1] Okviri - 洛谷
一、题目部分选自洛谷:P4327 [COCI2006-2007#1] Okviri二、解题过程思路for循环+根据题目要求进行条件判断,具体细节见代码。提交AC答案#include<bits/stdc++.h> using namespace std; string wd;int main() { cin>>wd; int len=wd.length(); for(int i=1;i<=5;i++) { for(int j=1原创 2020-08-15 17:59:46 · 603 阅读 · 0 评论 -
【力扣刷题】299. 猜数字游戏
题目来源:299. 猜数字游戏 - 力扣(LeetCode)思路:参考了这位大佬的解题思路要点:先找公牛,再找母牛;用过的做标记。学到了一个很棒的函数C++中string::find()函数和string::npos函数的使用AC代码:class Solution {public: string getHint(string secret, string guess) { int bulls=0; int cows=0; f原创 2020-08-15 16:43:21 · 259 阅读 · 0 评论 -
【力扣刷题】41. 缺失的第一个正数
题目来源:41. 缺失的第一个正数 - 力扣(LeetCode)思路:参考了大佬的方法三(将数组视为哈希表),整体的思路是每一个正整数i对应的下标为i-1,通过for及while循环将每个正整数交换到正确的位置,然后从第0位开始循环查找,如果出现数&位不匹配则输出该下标本该对应的正数,即为缺失的第一个正数。原地哈希(哈希函数为:f(nums[i]) = nums[i] - 1)AC代码:class Solution {public: void swap(vector<原创 2020-08-14 12:23:16 · 197 阅读 · 0 评论 -
【力扣刷题】189. 旋转数组
题目来源:189. 旋转数组 - 力扣(LeetCode)思路:运用reverse函数C++ reverse函数的用法AC代码:class Solution {public: void rotate(vector<int>& nums, int k) { int len=nums.size(); k=k%len; reverse(nums.begin(),nums.end()); reverse(&原创 2020-08-13 21:59:55 · 186 阅读 · 0 评论 -
【菜鸟进阶之路】P1897 电梯里的爱情 - 洛谷
一、题目部分选自洛谷:P1897 电梯里的爱情二、解题过程思路sort排序,从低层到高层按题目要求计算时间。提交AC答案#include<bits/stdc++.h> using namespace std;int n,ans,a[100001]; int main(){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(i原创 2020-08-13 21:06:46 · 495 阅读 · 0 评论 -
【力扣刷题】80. 删除排序数组中的重复项 II
题目来源:80. 删除排序数组中的重复项 II - 力扣(LeetCode)思路:特殊情况:数组的长度为0,直接输出0;一般情况:j为慢指针,i为快指针,当数组当前元素不等于前一个元素/等于前一个元素a的次数为1(特殊之处:下一个元素比较时仍与a比较,因为至多只能出现两个重复项)时复制nums[i]到nums[j](用cnt计数(小于等于1的情况均成立),最后返回数组长度。AC代码:class Solution {public: int removeDuplicates(vecto原创 2020-08-13 15:52:15 · 195 阅读 · 0 评论 -
【力扣刷题】26. 删除排序数组中的重复项
力扣上的第一篇题解原创 2020-08-13 15:20:59 · 198 阅读 · 0 评论 -
【力扣刷题】27. 移除元素(题解笔记)
在力扣上刷的第一道题 记录下大佬的题解原创 2020-08-13 12:32:05 · 317 阅读 · 0 评论 -
【菜鸟进阶之路】P2084 进制转换 - 洛谷
一、题目部分选自洛谷:P2084 进制转换二、解题过程思路(1)因为要进行进制转换的数数位很大,所以以字符串的形式进行存储,然后将每一位存储在整型数组中;(2)当系数为0时,单项式省略,所以跳过输出;(3)当系数不为0时,分两种情况,数尾不全为0时,按格式带加号输出,数尾全为0时,进行判断后不带加号输出,作为多项式的末尾。提交AC答案#include<bits/stdc++.h> using namespace std;int m,len,a[1001];string原创 2020-08-12 17:06:56 · 867 阅读 · 0 评论 -
【菜鸟进阶之路】P4326 [COCI2006-2007#1] Herman - 洛谷
一、题目部分选自洛谷:P4326 [COCI2006-2007#1] Herman二、解题过程思路如下。提交AC答案#include<bits/stdc++.h> using namespace std;int n;#define PI acos(-1) int main(){ scanf("%d",&n); printf("%6lf\n%6lf",n*n*PI,n*n*2.000000); return 0;原创 2020-08-09 16:50:21 · 265 阅读 · 0 评论 -
【菜鸟进阶之路】高精度相关算法模板笔记
两非负数相加#include<bits/stdc++.h>using namespace std;char ch1[20005],ch2[20005];int len1,len2,len,jw;int f1[20005],f2[20005],f[50000];int main(){ cin>>ch1; len1=strlen(ch1); cin>>ch2; len2=strlen(ch2); for(int i=0;i<len1;i.原创 2020-08-08 17:59:52 · 174 阅读 · 0 评论 -
【菜鸟进阶之路】P1177 【模板】快速排序 - 洛谷
一、题目部分选自洛谷:P1177 【模板】快速排序二、解题过程思路快速排序算法void qs(),无须赘述。提交AC答案#include<bits/stdc++.h> using namespace std;int n,a[10000000];void qs(int *a,int l,int r){ int m=a[(l+r)/2],i=l,j=r; do{ while(a[i]<m) i++; while(a[j]>m) j--; if(原创 2020-08-03 13:55:20 · 557 阅读 · 0 评论 -
【菜鸟进阶之路】P1830 轰炸III - 洛谷
一、题目部分选自洛谷:P1830 轰炸III二、解题过程思路对于每个关键点,对每次轰炸的范围进行循环读入,若关键点处于轰炸范围内,说明该关键点被轰炸过,轰炸次数+1,并设置整型变量end存储最后一次轰炸的轮次,赋值为循环次数i即可保证轰炸的轮次为最后一次。提交AC答案#include<bits/stdc++.h> using namespace std;int n,m,x,y,x1[101],yy[101],x2[101],y2[101],mp[101][101];st原创 2020-08-01 20:48:07 · 585 阅读 · 0 评论 -
【菜鸟进阶之路】P6367 [COCI2006-2007#6] PRASE - 洛谷
一、题目部分选自洛谷:P6367 [COCI2006-2007#6] PRASE二、解题过程思路设当前总共取走了i份食物,其中一个孩子取走的食物为temp份,若2倍的temp超过i时,说明该小孩拿了超出总份数一半的食物,这时候他的妈妈提醒他的次数+1。提交AC答案#include<bits/stdc++.h> using namespace std;int n,temp,ans;string a[101]; int main(){ scanf("%d",&原创 2020-07-31 19:19:42 · 593 阅读 · 0 评论 -
【菜鸟进阶之路】P1067 多项式输出 - 洛谷
一、题目部分选自洛谷:P1067 多项式输出二、解题过程思路根据题目给的要求,按照不同条件进行判断并对多项式进行输出:(1)当系数等于0时,直接跳过不输出该项式;(2)当系数大于0时,分为该项为最高次的项时、该项为0次项、该项为1此项和其他项进行讨论;(3)当系数小于0时,同理。(细节见“提交AC答案”部分代码)提交AC答案#include<bits/stdc++.h> using namespace std;int n;//表示一元多项式的次数int a[102原创 2020-07-30 17:13:31 · 332 阅读 · 0 评论 -
【菜鸟进阶之路】P1205 [USACO1.2]方块转换 Transformations - 洛谷
一、题目部分选自洛谷:P1205 [USACO1.2]方块转换 Transformations二、解题过程思路见“提交AC答案”部分给出的注释提交AC答案#include <bits/stdc++.h>using namespace std;int n;char a[10][10],b[10][10];char c[10][10],d[10][10];bool pd(){ for(int i=0;i<n;i++) { for(int j=0;j<原创 2020-07-30 14:47:42 · 590 阅读 · 0 评论 -
【菜鸟进阶之路】 P4924 [1007]魔法少女小Scarlet - 洛谷
一、题目部分选自洛谷:P4924 [1007]魔法少女小Scarlet二、解题过程思路见“提交AC答案”部分给出的注释提交AC答案#include<bits/stdc++.h> using namespace std;int n,m;//n和m分别表示方阵大小和魔法施放次数int x[501],y[501],r[501],z[501];//把以第x行第y列为中心的2r+1阶矩阵按照某种时针方向旋转//z=0表示顺时针,z=1表示逆时针 int a[501][501]原创 2020-07-30 14:39:07 · 490 阅读 · 0 评论 -
【菜鸟进阶之路】P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two - 洛谷
一、题目部分选自洛谷:P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two二、解题过程思路见“提交AC答案”部分给出的注释提交AC答案#include<bits/stdc++.h> using namespace std;char mp[11][11];//存储输入的地图 int cx,cy,fx,fy;//记录两头牛和Farmer John的位置int dc,df;//记录两头牛和Farmer John的行动方向int ans;//存储相原创 2020-07-29 17:37:52 · 491 阅读 · 0 评论 -
【菜鸟进阶之路】P1328 生活大爆炸版石头剪刀布 - 洛谷
一、题目部分二、解题过程思路(1)按照输入样例的格式对将要处理的数据进行输入;(2)根据猜拳次数及小A、小B的出拳规律对数组进行更新和填充,这里的更新和填充指对猜拳次数i求余,求余数为出拳的周期长度;(3)然后按照表格里猜拳的输赢规则循环比较,统计比分,详见AC答案里的compare()函数;(4)最后输出小A、小B的比分。提交AC答案#include<bits/stdc++.h> using namespace std;int n,na,nb,a[201],b[201]原创 2020-07-28 23:30:12 · 337 阅读 · 0 评论 -
【菜鸟进阶之路】P1042 兵乓球 - 洛谷
一、题目部分题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。原创 2020-07-28 17:46:40 · 516 阅读 · 0 评论 -
【菜鸟进阶之路】P2089 烤鸡 - 洛谷
很好的一道回溯题被我打成了循环...面壁思过(看来功力还不够深厚)原创 2020-07-20 11:51:38 · 473 阅读 · 0 评论 -
【菜鸟进阶之路】P1051 谁拿了最多奖学金 - 洛谷
期末考结束 继续加油coding~原创 2020-07-19 11:45:25 · 171 阅读 · 0 评论 -
【菜鸟进阶之路】P1553 数字反转(升级版)- 洛谷
#include<bits/stdc++.h>using namespace std;int t1,t2,t3,t4,t11,t12,t21,t22,t23,t31;string a,str;int main(){ cin>>a; for(int i=a.length()-1;i>=0;i--) { if(a[i]=='.') { t1=i; break; } else if(a[i]=='/') { t2=i原创 2020-06-23 12:16:53 · 344 阅读 · 0 评论 -
【菜鸟进阶之路】P1217 [USACO1.5]回文质数 Prime Palindromes - 洛谷
一、题目部分题目描述因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。写一个程序来找出范围 [a,b] (5≤a<b≤100,000,000)( 一亿)间的所有回文质数。输入格式第 1 行: 二个整数 a 和 b .输出格式输出一个回文质数的列表,一行一个。输入输出样例输入 #15 500输出 #15711101131151181191313353373383二、解题过程思路(1)输入整数a和b,因为原创 2020-06-02 12:29:47 · 333 阅读 · 0 评论 -
【菜鸟进阶之路】P5461 赦免战俘 题解笔记(持更)
耐下心来看56篇来自大佬们的题解,获益匪浅,为不枉此行,决定积累些对自己以后打题有用的知识点。原创 2020-05-27 22:30:41 · 631 阅读 · 0 评论 -
【菜鸟进阶之路】P3741 honoka的键盘 - 洛谷
一、题目部分题目描述honoka 有一个只有两个键的键盘。一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK 这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内 VK 出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次 VK(只有当 V 和 K 正好相邻时,我们认为出现了 VK。)输入格式第一行给出一个数字 n,代表字符串的长度。第二行给出一个字符串 s。输出格式第一行输出一个整数代表所求答原创 2020-05-24 11:57:03 · 1052 阅读 · 1 评论 -
【菜鸟进阶之路】P2141 珠心算测验 - 洛谷
一、题目部分题目描述珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测验题,请你帮忙求出答案。(本题目为2014NOIP普及T1)输入格式共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。第二原创 2020-05-24 10:10:40 · 456 阅读 · 0 评论 -
【菜鸟进阶之路】P2615 神奇的幻方 - 洛谷
一、题目部分题目描述幻方是一种很神奇的 N∗N 矩阵:它由数字1,2,3,⋯⋯,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。当 N 为奇数时,我们可以通过下方法构建一个幻方:首先将 1 写在第一行的中间。之后,按如下方式从小到大依次填写每个数 K(K=2,3,⋯,N×N) :若 (K-1) 在第一行但不在最后一列,则将 K 填在最后一行,(K−1) 所在列的右一列;若 (K-1) 在最后一列但不在第一行,则将 K 填在第一列,(K−1) 所在行的上一行;若 (K-1) 在第一行原创 2020-05-22 10:34:04 · 650 阅读 · 0 评论 -
【菜鸟进阶之路】P1765 手机 - 洛谷
一、题目部分题目描述一般的手机的键盘是这样的:(九宫格)要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。输入格式一行句子,只包含英文小写字母和空格,且不超过 200 个字符。输出格式一行一个整数,表示按键盘的总次数。输入输出样例输入 #1i have a dream输出 #123二、解题过原创 2020-05-20 19:20:16 · 2453 阅读 · 0 评论 -
【菜鸟进阶之路】P5723 【深基4.例13】质数口袋 - 洛谷
一、题目部分题目描述小A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过 L(1≤L≤100000) 的质数。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。输入格式无输出格式无输入输出样例输入 #1100输出 #1235711131719239二、解题过程原创 2020-05-10 11:44:39 · 2428 阅读 · 0 评论 -
【菜鸟进阶之路】P1307 数字反转 - 洛谷
一、题目部分题目描述给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。输入格式一个整数 N输出格式一个整数,表示反转后的新数。输入输出样例输入 #1123输出 #1321输入 #2-380输出 #2-83二、解题过程思路(1)输入整数n;(2)如果n等于0直接输出;(3)如果n不等于零,因为反向输出的数字首位不能为0,所以先做除10操作排除掉数末的0,之后分情况原创 2020-05-09 23:32:03 · 963 阅读 · 0 评论 -
【菜鸟进阶之路】P4956 [COCI2017-2018#6] Davor - 洛谷
一、题目部分题目描述After successfully conquering the South Pole, Davor is preparing for new challenges. Next up is the Arctic expedition to Siberia, Greenland and Norway. He begins his travels on 31 December...原创 2020-05-07 22:54:32 · 1067 阅读 · 1 评论 -
【菜鸟进阶之路】P2669 金币 - 洛谷
一、题目部分题目描述展开题目描述国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。请计算在前K天里,骑士一共获得...原创 2020-05-07 22:24:30 · 644 阅读 · 2 评论 -
【菜鸟进阶之路】P5725 【深基4.习8】求三角形 - 洛谷
一、题目部分题目描述模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。输入格式输入矩阵的规模,不超过 9。输出格式输出矩形和正方形输入输出样例输入 #14输出 #101020304050607080910111213141516 01 0203 040506 07080910二、解题过程思路和 P5721 【深基...原创 2020-05-07 20:44:49 · 1552 阅读 · 0 评论 -
【菜鸟进阶之路】P5721 【深基4.例6】数字直角三角形 - 洛谷
一、题目部分题目描述给出n(1≤n≤13),请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。输入格式无输出格式无输入输出样例输入 #15输出 #1010203040506070809101112131415二、解题过程思路(1)找直角三角形输出的规律,算出该倒三角“最后一层”的数字m;(2)用k去存储每...原创 2020-05-07 17:36:06 · 2109 阅读 · 0 评论