【C++】判断两个vector是否相等~直接用“==”

  • 如果vector里面的元素类型是简单类型(内置类型),可以直接使用“==”或者“!=”进行比较
  • 甚至可以使用“<=” “<” “>=” “>”比较两个vector大小:按照字典序排列

1087. All Roads Lead to Rome (30)-PAT甲级真题(Dijkstra + DFS)

Indeed there are many different tourist routes from our city to Rome. You are supposed to find your clients the route with the least cost while gaining the most happiness.

Input Specification:
Each input file contains one test case. For each case, the first line contains 2 positive integers N (2<=N<=200), the number of cities, and K, the total number of routes between pairs of cities; followed by the name of the starting city. The next N-1 lines each gives the name of a city and an integer that represents the happiness one can gain from that city, except the starting city. Then K lines follow, each describes a route between two cities in the format “City1 City2 Cost”. Here the name of a city is a string of 3 capital English letters, and the destination is always ROM which represents Rome.

Output Specification:
For each test case, we are supposed to find the route with the least cost. If such a route is not unique, the one with the maximum happiness will be recommended. If such a route is still not unique, then we output the one with the maximum average happiness — it is guaranteed by the judge that such a solution exists and is unique.
Hence in the first line of output, you must print 4 numbers: the number of different routes with the least cost, the cost, the happiness, and the average happiness (take the integer part only) of the recommended route. Then in the next line, you are supposed to print the route in the format “City1->City2->…->ROM”.

Sample Input:
6 7 HZH
ROM 100
PKN 40
GDN 55
PRS 95
BLN 80
ROM GDN 1
BLN ROM 1
HZH PKN 1
PRS ROM 2
BLN HZH 2
PKN GDN 1
HZH PRS 1
Sample Output:
3 3 195 97
HZH->PRS->ROM

题目大意:有N个城市,M条无向边,从某个给定的起始城市出发,前往名为ROM的城市。每个城市(除了起始城市)都有一个点权(称为幸福值),和边权(每条边所需的花费)。求从起点到ROM所需要的最少花费,并输出其路径。如果路径有多条,给出幸福值最大的那条。如果仍然不唯一,选择路径上的城市平均幸福值最大的那条路径
分析:Dijkstra+DFS。Dijkstra算出所有最短路径的路线pre二维数组,DFS求最大happiness的路径path,并求出路径条数,最大happiness,最大average~
注意:average是除去起点的average。城市名称可以用m存储字符串所对应的数字,用m2存储数字对应的字符串

 

L1-015. 跟奥巴马一起画方块-PAT团体程序设计天梯赛GPLT

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3<=N<=21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

 

Swift代码规范

  •  一行不要超过160个字符
  • 左大括号不换行
  • 运算符( + – * / == != ->)左右加空格,

  • 逗号、冒号的后面加空格,但遇到后面是小括号则不需要加空格

  • if else的else、do catch的catch,与大括号在同一行

  • 跨多行函数声明要缩进

  • 跨多行if语句要缩进

  • 尽量避免多行断言,可以使用本地变量或者其他策略

  • 尽可能多使用let,少使用var
  • 如果变量类型可以依靠推断得出,不建议声明变量时指名类型
  • switch模块中不用显式使用break
  • if语句左右不要使用小括号

  • 不要使用as! 或 try!
  • 在解析可选类型时,推荐使用 guard 语句,而不是 if 语句,因为 guard 语句可以减少不必要的嵌套缩进
  • 如果需要在2个状态间做出选择,建议使用if 语句,而不是使用 guard 语句
  • 即使文档注释只有一行,也要使用模块化格式 (/** */)
  • 使用首字母大写的驼峰命名规则来命名枚举值

  • 尽可能的避免使用强制转换和强制解包
  • 不要在 if 和 switch 条件两边或者 return 关键词上加 Objective-C 样式的圆括号
  • 避免使用行尾分号,尽管这样是可以编译通过的。但是它们会让你的代码看起来很糟糕,而且用起来体验也很差。
  • 版权声明应该被包含在所有源文件的顶部
  • 笑脸

  • 用足够的空行把代码分割成合理的块
  • 不要在一行结尾留下空白,也不要在空行留下缩进
  • 文件结束时留一空行

LeetCode 387. First Unique Character in a String

Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1.

Examples:

s = “leetcode”
return 0.

s = “loveleetcode”,
return 2.
Note: You may assume the string contain only lowercase letters.

分析:map存储每个字符的出现次数,从头遍历数组return第一个m[s[i]] == 1的下标。如果没有就return -1。

 

L3-005. 垃圾箱分布-PAT团体程序设计天梯赛GPLT(Dijkstra)

大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住。所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的范围内。

现给定一个居民区的地图,以及若干垃圾箱的候选地点,请你推荐最合适的地点。如果解不唯一,则输出到所有居民点的平均距离最短的那个解。如果这样的解还是不唯一,则输出编号最小的地点。

输入格式:

输入第一行给出4个正整数:N(<= 103)是居民点的个数;M(<= 10)是垃圾箱候选地点的个数;K(<= 104)是居民点和垃圾箱候选地点之间的道路的条数;DS是居民点与垃圾箱之间不能超过的最大距离。所有的居民点从1到N编号,所有的垃圾箱候选地点从G1到GM编号。

随后K行,每行按下列格式描述一条道路:
P1 P2 Dist
其中P1和P2是道路两端点的编号,端点可以是居民点,也可以是垃圾箱候选点。Dist是道路的长度,是一个正整数。

输出格式:

首先在第一行输出最佳候选地点的编号。然后在第二行输出该地点到所有居民点的最小距离和平均距离。数字间以空格分隔,保留小数点后1位。如果解不存在,则输出“No Solution”。

输入样例1:
4 3 11 5
1 2 2
1 4 2
1 G1 4
1 G2 3
2 3 2
2 G2 1
3 4 2
3 G3 2
4 G1 3
G2 G1 1
G3 G2 2
输出样例1:
G1
2.0 3.3
输入样例2:
2 1 2 10
1 G1 9
2 G1 20
输出样例2:
No Solution

题目大意:从m个垃圾站里面选取1个站点,让他离居民区的最近的人最远,并且没有超出服务范围ds之内。如果有很多个最远的垃圾站,输出距离所有居民区距离平均值最小的那个。如果平均值还是一样,就输出按照顺序排列垃圾站编号最小的那个、
分析:
因为垃圾站之间也是彼此有路连接的,所以最短路径计算的时候也要把垃圾站算上。所以我们就是堆n+m个点进行Dijkstra计算最短路径。要求计算出1~m号垃圾站距离其他站点的最短路径。这时候可以遍历dis数组,如果dis存在一个距离大于服务范围ds的距离,那么我们就舍弃这个垃圾站。取最最短的路径,这就是距离它最近的垃圾站mindis。如果mindis > ansdis,就是说找到了一个距离居民最小距离的垃圾站是更远的,那就选这个垃圾站,更新ansid为它的id。最后输出
对于垃圾站的字符串编号的处理:如果最近居民区最大的值没有变化但是找到了一个更小的平均距离,那就选这个。我们可以根据输入的是G还是数字,如果是数字就令编号为他自己,如果是G开头的,编号设为n+G后面的数字。