1. 洛谷练习——P1579 哥德巴赫猜想(升级版)

题目描述:
现在请你编一个程序验证哥德巴赫猜想。
先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数。
输入格式:
仅有一行,包含一个正奇数n,其中9<n<20000
输出格式:
仅有一行,输出3个质数,这3个质数之和等于输入的奇数。相邻两个质数之间用一个空格隔开,最后一个质数后面没有空格。如果表示方法不唯一,请输出第一个质数最小的方案,如果第一个质数最小的方案不唯一,请输出第一个质数最小的同时,第二个质数最小的方案。
分析过程:
如果一个奇数能分为三个数和,则只有两种情况①偶数+偶数+奇数 ②奇数+奇数+奇数。如果在加上三个数必须是质数这个条件则①2+2+n−42 +2+n-42+2+n−4(偶质数只有222,如果n−4n-4n−4为质数则成立)②质数+质数+质数(这三个数为大于等于3的奇数)
代码:

#include<iostream>
#include<cmath>
using namespace std;
bool isPrime_3(int num);
int main()
{int n;cin >> n;if (isPrime_3(n - 4))//如果满足第一种情况直接输出返回{cout << 2 << " " << 2 << " " << n - 4 << endl;return 0;}elsefor (int i = 3; i < n; i += 2){if (isPrime_3(i)) //i必须是质数{for (int j = i; i < n; j += 2)//这里先判断n-j-i是不是奇数(因为判断奇数比较快) 另一种判断奇数(n-j-i)&1if ((n - j - i) % 2 == 1&& isPrime_3(j) && isPrime_3(n - j - i)){cout << i << " " << j << " " << n - j - i << endl;return 0;}}}
}
bool isPrime_3(int num)//优化后的判断质数 第一次洛谷刷题学到的(详细看【c++算法刷题笔记】——洛谷<1>)
{if (num == 2 || num == 3)return 1;if (num % 6 != 1 && num % 6 != 5)return 0;int tmp = sqrt(num);for (int i = 5; i <= tmp; i += 6)if (num % i == 0 || num % (i + 2) == 0)return 0;return 1;
}

总结:
这是看洛谷一个牛犇的想法,为什么可以这么做?题目中很明显只让输出一组解,所以只需要在iii和jjj都是质数的前提下判断n−j−in-j-in−j−i这个数是不是质数,如果是就输出!而且对于分析过程将题目简化值得学习

2. 关于取模运算的优化技巧——P1226 【模板】快速幂||取余运算

(A1+A2+A3+⋯+An)modX=(A1modX+A2modX+A3modX+⋯+AnmodX)modX(A_1+A_2+A_3+\cdots+A_n)modX=(A_1modX+A_2modX+A_3modX+\cdots+A_nmodX)modX(A1​+A2​+A3​+⋯+An​)modX=(A1​modX+A2​modX+A3​modX+⋯+An​modX)modX
(A1×A2×A3×⋯×An)modX=(A1modX×A2modX×A3modX×⋯×AnmodX)modX(A_1×A_2×A_3×\cdots×A_n)modX=(A_1modX×A_2modX×A_3modX×\cdots×A_nmodX)modX(A1​×A2​×A3​×⋯×An​)modX=(A1​modX×A2​modX×A3​modX×⋯×An​modX)modX

3.洛谷练习——P1032 字串变换.

题目描述:
已知有两个字串AAA,BBB及一组字串变换的规则(至多666个规则):
A1−>B1A_1->B_1A1​−>B1​
A2−>B2A_2->B_2A2​−>B2​
规则的含义为:在AAA中的子串A1A_1A1​可以变换成B1B_1B1​,A2A_2A2​可以变换成B2B_2B2​
输入格式:
AAA BBB
A1A_1A1​ B1B_1B1​
A2A_2A2​ B2B_2B2​
...............
所有字符串长度的上限为202020。
输出格式:
若在101010步(包含101010步)以内能将AAA变换为BBB,则输出最少的变换步数;否则输出"NO ANSWER!"
分析过程:
这里明显是个宽搜题BFS,如果拿到手里不知道怎么运用宽搜(字符串)。这题的难点:①字符串宽搜如何更新。②优化!用到map<string,int>map<string,int>map<string,int>
代码:

#include<iostream>
#include<queue>
#include<map>
#include<string>
using namespace std;
int main()
{map<string, int>mp;string a, b;cin >> a >> b;string x[7], y[7];int n = 0;while (cin >> x[n] >> y[n])n++;queue<string>Q;queue<int>s;Q.push(a);//记录字符串s.push(0);//记录布数while (!Q.empty()){if (Q.front() == b)//如果得到结果直接返回{cout << s.front() << endl;return 0;}if (s.front() == 10){cout << "NO ANSWER!" << endl;return 0;}string t = Q.front();if (mp.count(t)){Q.pop();s.pop();continue;}mp[t] = 1;//将字符串映射到mp中的一个位置for (int i = 0; i < n; i++){int p = 0;while (t.find(x[i], p) != -1)//查找成功返回位置否则返回-1{p = t.find(x[i], p);//在t字符串中从p这个位置开始查找x[i]字符串Q.push(t.substr(0, p) + y[i] + t.substr(p + x[i].length()));//字符串替换,substr(0,p)将字符串中0-p的字符取出来s.push(s.front() + 1);p++;}}Q.pop();s.pop();}cout << "NO ANSWER!" << endl;return 0;
}

总结:
本题是我参考b站一个up主的解答。用mapmapmap这个函数作为原来的visitvisitvisit记录已经遍历过的点优化BFS,而且学到了字符串的拼接更新。

4.洛谷练习——P1012 拼数

题目描述:
设有nnn个正整数(n≤20)(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3n=3n=3时,333个整数13,312,34313,312,34313,312,343联接成的最大整数为:343312133433121334331213
又如:n=4n=4n=4时,444个整数7,13,4,2467,13,4,2467,13,4,246联接成的最大整数为:742461374246137424613
输入格式:
第一行,一个正整数nnn。
第二行,nnn个正整数。
输出格式:
一个正整数,表示最大的整数。
分析过程:
刚拿到这个题的时候,感觉简单啊,不就是个字符串比较,最大的放最前面如果是000不输出就ok了?其实这题远远没有那么容易如果不是测试点我可能跟不想不到哪里出了问题。比如a=32,b=321a=32,b=321a=32,b=321明显32321>3213232321>3213232321>32132但是如果你按字符串的比较方法得到的结果确实后者所以我们不是比较字符串aaa和bbb的大小,而是比较字符串a+ba+ba+b和b+ab+ab+a的大小!
代码:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{string arr[21];int n;cin >> n;for (int i = 1; i <= n; i++)cin >> arr[i];for (int i = 1; i <= n - 1; i++){for (int j = 1; j <= n - i; j++){if ((arr[j]+arr[j+1])<(arr[j+1]+arr[j])){string p = arr[j];arr[j] = arr[j + 1];arr[j + 1] = p;}}}if (arr[1] == "0")//注意:如果为0最终结果只需要输出一个0cout << 0 << endl;else{for (int i = 1; i <= n; i++)cout << arr[i];}return 0;
}

总结:
这一题我自己先用字符串比较硬凑条件怼出来了,我看了别的神犇的方法恍然大悟,柳暗花明。为什么我想不到呢?可能见得多了就知道了!所以记录下来方便复习

5.洛谷练习——P1538 迎春舞会之数字舞蹈

此代码来自b站up主——嘉持

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n, h, w;
string a;
string c[5] = {" -       -   -       -   -   -   -   -  ",
"| |   |   |   | | | |   |     | | | | | ",
"         -   -   -   -   -       -   -  ",
"| |   | |     |   |   | | |   | | |   | ",
" -       -   -       -   -       -   -  ",
};
char f(int x, int y)
{if (x >= 1)x = max(x - n + 1, 1);if (x >= 3)x = max(x - n + 1, 3);int m = y / (n + 3);y %= (n+3);if (y > 0)y = max(y - n + 1, 1);return c[x][y + (a[m] - '0')* 4];
}
int main()
{cin >> n>> a;h = 2 * n + 3;w = (n + 3) * (a.length());for (int i = 0; i < h; i++){for (int j = 0; j < w; j++)cout << f(i, j);cout << endl;}return 0;
}

总结:
这题把我心态搞崩了,啥也不想写,看上方老师的视频讲解吧。

2020/3/1第二次刷洛谷,前几天学习数据结构算法的知识比如dfs,bfs,然后又刷了几十道题不过现在有刷不懂了又开始看算法hhh

【c++算法刷题笔记】——洛谷2相关推荐

  1. 算法刷题【洛谷P1593】因子和(附等比数列求和公式推导)

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  2. 算法刷题【洛谷U193902】橡皮泥

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  3. Github最强算法刷题笔记.pdf

    资料一 昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙 ...

  4. 发现一位大佬的算法刷题笔记PDF

    昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看 ...

  5. 经典算法刷题笔记pdf

    昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看 ...

  6. 深度优先搜索dfs算法刷题笔记【蓝桥杯】

    其实网上已经有不少dfs的算法笔记,但我之所以还再写一篇,主要是因为我目前见到的笔记,都有些太偏向理论了. 对于基础薄弱的或是没有基础的人(like me),有点不合适,因为看了,也不能说自己会了. ...

  7. 字节大老耗时5年总结的算法刷题笔记(全彩漫画版)

    前言 王国维先生在<人间词话>中写道:古今之成大事业.大学问者,必经过三种境界:"昨夜西风凋碧树.独上高楼,望尽天涯路."此第一境也."衣带渐宽终不悔,为伊消 ...

  8. 一夜登顶GitHub!字节内网数据结构与算法刷题笔记,看完直呼卧槽

    网络上流传着一句段子"程序员两条腿,一条是算法,一条是英文,想跑的更远,这两条腿都不能弱".英文,我们暂且不谈,我们先来谈谈算法. 算法之难,在于将精巧的逻辑,通过合适的数据结构, ...

  9. 【c++算法刷题笔记】——洛谷1

    2020/2/14-2/16 1. 循环提取一个数的每一位数字 while (d > 0) //d=0跳出循环 {x=d%10; //x每次为d的个位数 d = d / 10; //相当于d每次 ...

最新文章

  1. oracle10gr2 x86,Oracle10gR2 On RHEL5 x86安装技术文档(英文原版)
  2. java基础专栏—CommonApi
  3. 转行数据分析师后悔了?脱颖而出才是关键!
  4. linux at自动挂化,linux的at定时任务的使用
  5. kafka_consumer_消费原理介绍
  6. 一次经典的tcp三次握手
  7. JavaScript技巧总结和本地存储(一)
  8. 李学斌:广告的罪恶与救赎
  9. npm i 报错 'match' of undefined 错误以及删除node_modules失败
  10. 自制QQ机器人插件笔记[nonebot2部署于ubuntu系统服务器]
  11. win10 WIFI连接无选项时的解决方法
  12. Matlab绘图模板
  13. 互联网人年底加薪指南
  14. 【NOIP 2011】 观光公交
  15. 求安慰,找java工作两个多月了
  16. Qt error: C2039: “staticMetaObject”: 不是“QXXX”的成员
  17. C# XML注释说明
  18. ROS SMACH示例教程(三)
  19. android 导航安全密码,您导航的v5.3.8 Android版本
  20. 网站接入第三方微博登录—PHP

热门文章

  1. python实验总结心得体会_Python,Pyvisa操作Agilent 86140x系列OSA
  2. mysql 表与表之间的条件比对_值得收藏 | 一份最完整的MySQL规范
  3. mysql数据聚合技术_Mysql 去重 聚合
  4. python os system_python中os. popen system的区别
  5. java中的线程不安全和实例解析
  6. [JavaWeb-HTTP]HTTP概念
  7. [蓝桥杯2018决赛]三角形面积-数论
  8. 堆初始化-二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2-icoding-void init_min_heap(PMinHeap pq, int
  9. Linux下Java环境变量配置
  10. 采蘑菇的克拉莉丝(树链剖分)