【c++算法刷题笔记】——洛谷2

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

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

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

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=(A1modX+A2modX+A3modX++AnmodX)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=(A1modX×A2modX×A3modX××AnmodX)modX

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

题目描述:
已知有两个字串AAABBB及一组字串变换的规则(至多666个规则):
A1−>B1A_1->B_1A1>B1
A2−>B2A_2->B_2A2>B2
规则的含义为:在AAA中的子串A1A_1A1可以变换成B1B_1B1A2A_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)(n20),将它们联接成一排,组成一个最大的多位整数。
例如: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=32b=321明显32321>3213232321>3213232321>32132但是如果你按字符串的比较方法得到的结果确实后者所以我们不是比较字符串aaabbb的大小,而是比较字符串a+ba+ba+bb+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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】7月10日精讲—矩阵取数游戏

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 帅帅经常跟同学玩一个矩阵取数游戏&…

【dfs】民生问题(2011特长生 T4)

题目大意 有n个问题&#xff0c;m个人&#xff0c;每个人可以解决一些问题&#xff0c;问最少选多少个人可以解决所有问题 解题思路 如果一个人解决的问题被别的人包括&#xff0c;那么可以把这个人丢掉 对于一个问题只能由一个人解决&#xff0c;那么直接选这个人 然后枚举…

张善友:自由之精神,中国之队长

张善友&#xff0c;毕业于兰州大学数学系&#xff0c;2006年开始连任微软最有价值专家&#xff08;MVP&#xff09;&#xff0c;一直在社区宣导.NET开源项目&#xff0c;从早期的Mono到.NET Core&#xff0c;在社区被尊称为张队长&#xff0c;在腾讯工作11年后&#xff0c;进行…

CF461D-Appleman and Complicated Task【并查集】

正题 题目链接:https://www.luogu.com.cn/problem/CF461D 题目大意 n∗nn*nn∗n的网格需要填上xxx或ooo&#xff0c;其中有kkk个格子已经固定&#xff0c;求有多少中填写方案使得每个格子的四周都有偶数个ooo。 解题思路 约束条件相当于一个格子周围的异或和都为000&#xff…

工科数学分析无穷级数总结

目录序言一.常数项级数概念1. 什么是常数项无穷级数&#xff1f;2. 级数的收敛性与和两个特别的级数级数的判别方法①常数项级数判别法②正项级数的审敛准则③变号级数的审敛准则④绝对收敛二.函数项级数概念1. 什么是函数项级数&#xff1f;2. 函数项级数处处收敛与和函数一致…

dump解析入门-用VS解析dump文件进行排障

突然有一天部署在服务器的一个应用挂掉了&#xff0c;没办法只能进入服务器打开【事件查看器】查看下&#xff0c;好不容易找到了打开后一脸懵逼事件查看器查到的内容根本对我们排障没有任何作用。在这个时候如果有对应的dump文件就能派上用场了&#xff0c;只要有dump文件就能…

关于__int128高精度运算

参考文章 使用__int128可以实现高精度运算&#xff0c;但是这种大整数无法使用函数printf输出结果&#xff0c;所以需要手写输出 #include <bits/stdc.h> using namespace std; inline __int128 read() {__int128 x0,f1;char chgetchar();while(ch<0||ch>9){if(ch…

【树链剖分】Disruption P(luogu 4374)

正题 luogu 4374 题目大意 给你一棵树&#xff0c;还有若干边&#xff0c;每条边有一定代价&#xff0c;问你删掉树中的每条边后&#xff0c;使其成为连通图的最小代价 解题思路 不难发现&#xff0c;一条边只对两个端点在树中的路径上的边有贡献&#xff08;即删去树中的这…

P4831-Scarlet loves WenHuaKe【组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P4831 题目大意 n∗mn*mn∗m的网格上放置2n2n2n个炮&#xff0c;要求互不能攻击。 数据满足n≤m≤2000n\leq m\leq 2000n≤m≤2000或n≤m≤105n\leq m\leq 10^5n≤m≤105且m−n≤10m-n\leq 10m−n≤10 解题思路 每行每列最多…

AtCoder Beginner Contest 172总结

A-calc 直接按照题目输出就行 #include<iostream> using namespace std; int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int a;cin>>a;cout<<aa*aa*a*a<<endl;return 0;}B-Minor Change 题中默认肯定能够从S替换到T那么直接不相…

一起开心2020暑假训练第二周 图论(模板题)

比赛链接&#xff1a; 文章目录A HDU 1285 一B HDU 1863 起C POJ 2387 开D POJ 1502 心E HDU 5922 图F HDU 2112 论A HDU 1285 一 拓扑排序模板题&#xff0c;记录每个点的入度&#xff0c;然后按照入度大小以及顺序进行输出 #include<iostream> #include<queue>…

.NET Core部署中你不了解的框架依赖与独立部署

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9703460.htmlNET Core项目发布的时候你有没有注意到这两个选项呢&#xff1f;有没有纠结过框架依赖与独立部署到底有什么区别呢&#xff1f;如果有的话那么这篇文章可以参考下&#xff01;为什么…

【树链剖分】旅游(luogu 3976)

正题 luogu 3976 题目大意 给你一棵树&#xff0c;每个点有一个权值s 现在给你一条路径&#xff0c;让你选择两个点x,y&#xff0c;使y在x后面&#xff0c;且sy−sxs_y-s_xsy​−sx​最大 然后该路劲上所有点权值加v 解题思路 树链剖分 在线段树上维护从左到右和从右到左…

P7276-送给好友的礼物【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7276?contestId39577 题目大意 nnn个点的一棵树&#xff0c;kkk个关键点&#xff0c;两个人从根出发分别走一段路径回到根。要求每个关键点至少被一个人经过&#xff0c;求最短时间。 解题思路 相当于求两个覆盖所有关键点…

dump文件解析之探索.Net的内存

前言&#xff1a;对于需要长时间运行的.net程序&#xff0c;有时需要我们查看内存的使用有没有内存泄露问题。我们可以从dump文件中找到答案。Dump的看点用dump文件来分析内存&#xff0c;到底我们需要关心哪些点呢&#xff1f;内存的使用情况 HeapSize/object的数量 也就是托管…

Codeforces Round #654 (Div. 2)

A.Magical Sticks 贪心凑长度为nnn的木棒 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; int n; int main() {IO;int T;cin>>T;while(T--){cin>>n;cout<<(n1)/…

P3307-[SDOI2013]项链【Burnside引理,莫比乌斯反演,特征方程】

正题 题目链接:https://www.luogu.com.cn/problem/P3307 题目大意 nnn个珠子的一个环形项链&#xff0c;每个珠子有三个1∼k1\sim k1∼k的整数。 两个珠子不同当且仅当它们不能通过翻转或者旋转得到两个项链不同当且仅当它们不能通过旋转得到珠子要求上面的数字互质项链要求相…

【树链剖分】Milk Visits G(luogu 5838)

正题 luogu 5838 题目大意 给你一棵树&#xff0c;和若干查询&#xff0c;每次查询一条路径上是否有点的权值为x 解题思路 离线处理&#xff0c;每次将树上权值为x的点附上1的值&#xff0c;然后询问就是求和&#xff0c;查询完后清零 代码 #include<cstdio> #includ…

2020牛客暑期多校训练营(第二场)

2020牛客暑期多校训练营&#xff08;第二场&#xff09; 最烦英语题 文章目录A All with PairsB BoundaryC Cover the TreeD DurationE Exclusive ORF Fake MaxpoolingG Greater and GreaterH Happy TriangleI IntervalJ Just ShuffleK Keyboard FreeA All with Pairs B Bound…

鸿蒙 - arkTs:状态管理

状态 State&#xff1a; 在声明式UI中&#xff0c;以状态驱动视图更新 状态&#xff08;State&#xff09;&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09;视图&#xff08;View&#xff09;&#xff1a;基于UI描述渲染得到的用户界面 使用示例…