
pat
coder_Kim
这个作者很懒,什么都没留下…
展开
-
A1082 Read Number in Chinese (25) 字符串处理
本题是字符串转换问题,在设计计算的时候很明显是以四个数字为一节进行计算,所以可以每次分成四个数字一组进行判断,用left和right来表示边界,设计千百十计算,最后利用len和right来设计万和亿的计算就好了。#include<cstdio>#include<cstring>char num[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};char wei[5][5]={"Shi","Bai",原创 2020-07-11 10:47:40 · 131 阅读 · 0 评论 -
A1040 Longest Symmetric String (25) 动态规划
一个注意点,本题的动态规划内容是在长度大于等于3的时候展开的,那么在此之前处理1,2长度的时候,记得不要忘记ans的值的变化#include<cstdio>#include<iostream>#include<string>using namespace std;const int maxn=1010;int d[maxn][maxn]={0};int main(){ string str; getline(cin,str); int len=st原创 2020-07-11 09:13:36 · 151 阅读 · 0 评论 -
A1045 Favorite Color Stripe (30) 动态规划
本题注意的点是可能出现不需要的颜色,提前就应该剔去这个点,也可以使这个点的值最大,这样也能将它并入其中。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=10010;int d[maxn]={0},a[maxn],index[maxn]={0};int main(){ int n,m,k,ans=-1,temp,num=1; c原创 2020-07-10 14:47:31 · 122 阅读 · 0 评论 -
A1007 Maximum Subsequence Sum (25) 动态规划
注意输出的是对应的数值,而不是下标#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=100010;struct node{ int st; int ed; int data;}a[maxn];int d[maxn]={0};bool cmp(node b,node c){ if(b.data!=c.data)re原创 2020-07-10 12:04:25 · 130 阅读 · 0 评论 -
A1087 All Roads Lead to Rome (30) 最短路径 dikstra+DFS算法
设计多重复杂判断,最好还是用dijkstra+DFS的写法,比较容易理解且设置的变量也不是很多,刚开始只想用dijkstra写,结果在判断的时候被绕进去了,多一个DFS就比较好写了,另外遇到字符串转换成数字的时候是要用到map的。本题是较为常见的写法,所以要牢牢掌握住#include<cstdio>#include<iostream>#include<map>#include<vector>using namespace std;const int原创 2020-07-04 17:57:25 · 170 阅读 · 0 评论 -
A1072 Gas Station (30) 最短路径djkstra算法
解决此类问题首先是要读题目,本题有一个重点,在都满足的情况下选择离加油站最近的那个居民点的距离要尽量远。如果没有读题清楚可能这里会出错,另外注意本题的输出,最小的那个距离是double形式的,所以要么设置要同一。最后dev和cb两种开发环境下结果不同,如果在dev下的结果为3.2也不用慌,最后在在线提交上去的时候就是3.3了。#include<cstdio>#include<string>#include<iostream>#include<vector&g原创 2020-07-04 14:35:29 · 257 阅读 · 0 评论 -
A1018 Public Bike Management (30) 最短路径DFS+dijkstra
本题是DFS+dijkstra算法的典型应用题,做本题前,需要认真读完题目(注意输出要求也会给出相应的判断)因为带去自行车,和拿回来的动作的都是实时发生的,不能用简单的加减计算,所以采用的使DFS+dijkstra的算法。最后判断部分条件,又因为此时是一半的容量为基准,所以可以考虑开始就将容量除以二#include<cstdio>#include<iostream>#include<vector>#include<cmath>const int ma原创 2020-07-03 21:32:26 · 3593 阅读 · 0 评论 -
A1030 Travel Plan (30) 最短路径(dijkstra写法和dijkstra+DFS写法)
本题来说,d+DFS的算法其实很没有必要,但是还是要学会。dijkstra#include<cstdio>#include<iostream>using namespace std;const int maxn=1010;const int inf=0x3fffffff;int path[maxn],G[maxn][maxn],d[maxn],c[maxn],cost[maxn][maxn],n,m,st,ed;bool vis[maxn]={false};void原创 2020-07-03 19:40:31 · 213 阅读 · 0 评论 -
A1003 Emergency (25) 最短路径 --dijkstra算法
狄杰斯特拉算法需要注意,最开始的节点往往需要提前处理,不要忘记处理该节点。最后考虑有几条最短路径的时候,是继承上一节点的值的。#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn=1010;const int inf=0x3ffffff;int n,m,w[maxn],G[maxn][maxn],d[maxn],num[maxn]={0},原创 2020-07-03 16:21:49 · 240 阅读 · 1 评论 -
A1021 Deepest Root (25) 图的遍历DFS******
注意,在考虑选节点使树最高的时候,采用的是先随便选取一个节点,这个节点到各叶子节点最高的设为集合a,集合a中任意一节点再次遍历,找到的使树最高的叶子节点结合b。ab并集为所求节点集合。首先必须明确,所有节点都是双向可访问的,当考虑到是非图时,必须保证是单向进行的,所以必须设置vis的数组,每次DFS之后,必须采用memset,将vis设置为false值。#include<cstdio>#include<iostream>#include<vector>#inclu原创 2020-07-03 12:04:39 · 116 阅读 · 0 评论 -
A1013 Battle Over Cities (25) DFS
本题思路,考虑到真正删除给出的城市节点很麻烦,我们可以考虑在dfs时,如果访问到该节点就返回,这样就避免选中与该节点相连接的节点,本题可以转化为求最大连通子图的个数问题。#include<cstdio>#include<iostream>#include<vector>#include<cstring>using namespace std;const int maxn=1010;vector<int> G[maxn];bool原创 2020-07-02 15:27:36 · 112 阅读 · 0 评论 -
A1076 Forwards on Weibo (30) 图的遍历BFS
本题思路考虑转发,且有层数(即转发最多通过几个非直接follows),所以考虑用BFS,因为BFS不涉及递归之类的,所以要用Node设置layer值。#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<cstring>using namespace std;const int maxn=1010;struct node{ int l原创 2020-07-02 12:14:39 · 184 阅读 · 0 评论 -
A1034 Head of a Gang (30) 图的遍历 DFS
本题解起来比较复杂思路如下:首先明确最后输出的是两个相关数据,考虑用strcut定义该结果节点,并用vector存储相关数据输入有字符串,本题是图相关问题,所以考虑用map来解决先把相关节点转换为整型,利用整型变量分别记录边长和节点本身的通话时长;利用DFS依次遍历,遍历的过程需注意和树的区别,不是同时取得条件,而是先考虑是否有边,再考虑是否有点(即是否能参与下一次遍历);#include<cstdio>#include<iostream>#include<al原创 2020-07-02 11:27:50 · 131 阅读 · 0 评论 -
A1098 Insertion or Heap Sort (25) 与1089题型类似(重点******)
掌握堆排序的含义以及写法,关于排序题需要再整理一下写法一:#include<cstdio>#include<algorithm>using namespace std;const int maxn=101;int origin[maxn],a[maxn],b[maxn];void downAdjust(int A[],int low,int high){ int i=low,j=i*2; while(j<=high) { if(j+1<=high原创 2020-07-02 09:41:26 · 140 阅读 · 0 评论 -
A1107 Social Clusters (30) 并查集(重要模板应用)
本题是非常典型的并查集问题,在考虑并查集方面比之前的题目要上了一个难度,并查集问题要考虑在输入时对所需数据进行处理(重要),考虑当前课程的人为0时,当前学生就是第一个人,如果不是,那么将该课程指向的第一个学生和当前学生合并,合并操作即为并查集常规操作,之后考虑isroot,即第一次是0时,那么说明该集合第一次被访问num数量加1,isroot下面的个数加1。本题看起来比较复杂,需要认真思考#include<cstdio>#include<iostream>#include<原创 2020-06-29 22:51:53 · 135 阅读 · 0 评论 -
A1066 Root of AVL Tree (25) 平衡二叉树的一般结题思路
注意点,在更新L和R操作中,应先更新root(此时为低位置)的高度,再更新temp(此时为高位置)的高度,由于本题输入的数据有限。可以考虑测试相关数据,因为输出的只有最顶端的数据,根据平衡二叉树的性质,此时的节点必定为中间的数值。先排序解决#include<cstdio>#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn=1原创 2020-06-25 22:55:50 · 148 阅读 · 0 评论 -
A1060 Are They Equal (25) string的常见用法(本题关于数据测试部分需要再看)
说一下本题可能误会的点,这个给定的数值是以浮点数形式表示的。所以出现0.000也是有的,不考虑这个最后一个测试点会出错,此外本问题中需要考虑前导0的问题出现000123这种也很正常。。。不注意这个同样部分测试点会不过#include<cstdio>#include<iostream>#include<string>#include<algorithm>using namespace std; string str1,str2,str3,str4;原创 2020-06-02 23:42:26 · 120 阅读 · 0 评论 -
A1064 Complete Binary Search Tree (30) 二叉查找树 完全二叉树
二叉排序树,中序序列一定是有序的,而完全二叉树在非最第端都是满的,可以用序号表示,即设根节点为i那么它的孩子如果存在,那么一定是2i和2i+1;基于此,我们考虑,利用中序序列填充层序的序号问题#include<cstdio>#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn=1010;int n,a[maxn],b[maxn原创 2020-06-25 12:15:17 · 136 阅读 · 0 评论 -
A1106 Lowest Price in Supply Chain (25) 树的遍历
注意本题接收数据和前面的不同,注意不要想当然混淆题目意思#include<cstdio>#include<iostream>#include<vector>#include<cmath>using namespace std;const int maxn=100010;int n,k,c,num;double r,p,mindepth=maxn;struct node{ int data; vector<int> child原创 2020-06-24 22:04:01 · 128 阅读 · 0 评论 -
A1094 The Largest Generation (25) 树的遍历
#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=101;int p[maxn]={0},maxp=-1,maxdepth;vector<int> node[maxn];void DFS(int index,int depth){ p[depth]++; if(p[depth]>maxp) { maxp=p[d原创 2020-06-24 19:09:44 · 146 阅读 · 0 评论 -
A1090 Highest Price in Supply Chain (25) 树的遍历的一般做法 (采用depth)
建议树相关题目每一题都动手写写,貌似之前也在这个地方栽过,记得先有输入,再做处理,细节问题#include<cstdio>#include<iostream>#include<stack>#include<cmath>#include<vector>#include<algorithm>using namespace std;const int maxn=100001;vector<int> child[m原创 2020-06-24 18:48:56 · 145 阅读 · 0 评论 -
A1079 Total Sales of Supply Chain (25)树的遍历(dfs)
#include<cstdio>#include<iostream>#include<stack>#include<queue>#include<vector>#include<algorithm>using namespace std;const int maxn=100001;int n;double r,p,total=0;struct node{ int num; vector<int&g原创 2020-06-24 17:42:19 · 141 阅读 · 0 评论 -
A1053 Path of Equal Weight (30) DFS典型题
处理dfs的时候一般需要考虑边界问题,即大于小于等于,同时需要注意入口处,应该怎么处理#include<cstdio>#include<iostream>#include<stack>#include<queue>#include<vector>#include<algorithm>using namespace std;const int maxn=101;int n,m,s,w;struct node{ ve原创 2020-06-24 11:43:27 · 113 阅读 · 0 评论 -
A1052 Linked List Sorting (25) 静态链表的问题
#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;const int maxn=1000001;struct Node{ int ad; int data; int next;}node[maxn];bool cmp(Node a,Node b){ return原创 2020-06-17 23:15:40 · 129 阅读 · 0 评论 -
A1054 The Dominant Color (20) map的常见用法
因为题目中给的数值太大,用hash可能会比较耗时和占内存,可以考虑采用map#include<cstdio>#include<iostream>#include<string>#include<algorithm>#include<map>using namespace std; map <int,int> a;int main(){ int m,n; cin>>m>>n; f原创 2020-06-03 16:37:10 · 173 阅读 · 0 评论 -
B1017 A除以B (20) 大整数的四则运算
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int r=0;struct bign{ int d[1000]; int len; bign() { memset(d,0,sizeof(d)); len=0; }};bign change(char s[]){ bign a; a.len=strlen(s); for (int i=0;原创 2020-06-01 17:14:42 · 84 阅读 · 0 评论 -
A1023 Have Fun with Numbers (20) 大整数的四则运算
这个的解法很清晰,但是实在是太长了,后面会优化或者采用更加简洁的写法的#include<cstdio>#include<iostream>#include<cstring>using namespace std;int r=0;struct bign{ int d[1000]; int len; bign() { memset(d,0,sizeof(d)); len=0; }};bign change(char s[]){ bign原创 2020-06-01 17:13:17 · 138 阅读 · 0 评论 -
A1024 Palindromic Number (25) 大整数的四则运算
本题采用了柳神的写法,在此地方进行第一次标注解释,字符相加减时的数字此时为字符形式,而不是int型,所以add函数里面的carry需要减去‘0’,这个字符本身是在ascll码中是非0的,再做完减法后就是真正的1或者0了,之后的加10也是建立在此基础上。#include<cstdio>#include<iostream>#include<string>#include <algorithm>using namespace std;string s;原创 2020-06-01 17:11:28 · 205 阅读 · 0 评论 -
A1078 Hashing (25) hash//素数//平方探测法(重要)
注意判定是否为素数时应该是小于等于,这个地方容易出错#include<cstdio>#include<iostream>#include<cmath>using namespace std;const int maxn=10100;bool isP(int n){ int a=(int)sqrt(1.0*n); if(n<=1) return false; else { for (int i=2;i<=a;i++) {原创 2020-05-29 17:06:21 · 136 阅读 · 0 评论 -
A1015 Reversible Primes (20) 素数//进制转化(薄弱环节值得注意)
#include<cstdio>#include<iostream>#include<cmath>using namespace std;const int maxn=1000010;bool isP(int n){ int a=(int)sqrt(1.0*n); if(n<=1) return false; else { for (int i=2;i<=a;i++) { if(n%i==0) return原创 2020-05-29 16:31:46 · 107 阅读 · 0 评论 -
A1088 Rational Arithmetic (20) 分数的四则运算
注意到每组都有类似的输出,所以最好还是写一个输出函数,除法的时候做判断是因为相除需要避免分母为负数。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=110;struct node{ long long up,down;}n,m;long long gcd(long long a,long long b){ if(b=原创 2020-05-28 17:43:21 · 198 阅读 · 0 评论 -
A1081 Rational Sum (20) 分数的四则运算
用到了乘法,最后的结果可能大于整型的范围,所以要用 long long,我在这里犯了一个错误,是输入的时候忘记用lld了,所以做完输入之后得到的结果不对#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=110;struct node{ long long up,down; }sum,temp;int gcd(long lo原创 2020-05-28 16:38:23 · 163 阅读 · 0 评论 -
A1089 Insert or Merge (25) 归并排序的非递归写法
本题有几个坑点for循环里面未有式子的时候最后记得加上“;”否则会超时下面提供解法,参考了晴神和柳神的解法#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;typedef long long LL;const int maxn=101;int main(){ int a[maxn],b[maxn],i,j,k=1原创 2020-05-26 22:53:47 · 129 阅读 · 0 评论 -
A1085 Perfect Sequence (25)//二分//upper_bound函数//Two Points
注意点,是使用max函数时要添加cmath的头文件,否则会编译不通过#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=100001;long long p,a[maxn];int n,maxnum=0;int solve(int i,long long x){ int right=n-原创 2020-05-15 17:37:54 · 124 阅读 · 0 评论 -
A1033(25)题目在5.17一定要再回顾一次
本题主要是很复杂,自己找到思路,但是写起来到最后还是会卡壳,现在把思路大概顺一下,本题参考了晴神的写法。首先选择加油站时要根据距离杭州的远近排序,注意,当第一个加油站距离是非0的话,那么起步就不行了,这里是一个判断,起步完成之后,我们可以比较下一站,如果在每次满油能走过的路程中找到比当前价格便宜的,那么应该先加至少能够到达此处的油,如果没有找到比当前价格便宜的,那么应该找这其中最便宜的,先加满油到达此处,如果没有找到,那么说明不能到达,返回当前距离加上满油的行驶距离#include<cstdio&原创 2020-05-13 22:47:46 · 381 阅读 · 0 评论 -
A1004 Counting Leaves (30)树的遍历
#include<cstdio>#include<iostream>#include<vector>#include<cmath>using namespace std;const int maxn=101;vector<int> node[maxn];int level[maxn]={0},maxdepth=-1;void DFS(int index,int depth){ if(node[index].size()==0)原创 2020-06-24 22:24:15 · 127 阅读 · 0 评论 -
A1086 Tree Traversals Again (25) 二叉树的遍历
```cpp#include<cstdio>#include<iostream>#include<stack>using namespace std;const int maxn=100;struct node{ int data; node* lchild; node* rchild;};int in[maxn],pre[maxn];node* creat(int inl,int inr,int prel,int prer){ if(pre原创 2020-06-19 15:23:13 · 120 阅读 · 0 评论 -
A1074 Reversing Linked List (25) 静态链表
#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;const int maxn=1000001;struct Node{ int ad; int data; int next;}node[maxn];int main(){ int ad,n,k; cin原创 2020-06-18 00:24:24 · 133 阅读 · 0 评论 -
A1051 Pop Sequence (25) 栈的应用
一定要注意在判断top或者pop的时候一定要非空。比如下面这句,while的判断条件前后颠倒就会出现段错误,血泪教训while(!s.empty()&&s.top()==a[t]) { s.pop(); t++; }#include<iostream>#include<cstdio>#include<stack>#include<algorithm>using namespace std;int a原创 2020-06-04 18:45:58 · 150 阅读 · 0 评论 -
A1022 Digital Library (30) map的常见用法
注意同一行有很多的keyword所以输入要判断是否到达了最后一个输入,也即是否到达了换行符的位置;while(1) { cin>>keyword; mp[keyword].insert(temp); char c=getchar(); if(c=='\n') break; }本题在最后的输出过程应使用*it语句,it->second会报错。#include<iostream>原创 2020-06-04 16:32:58 · 171 阅读 · 0 评论