【三次集训】3.12计蒜客比赛、3.13ACM集训训练思路

A-

题目大意:

给你两个字符串,让你输出两字符串删除从后往前相同的所有字符后的字符串,如果其中一个字符串被删完了则不删除最前面那个字符

思路:

模拟(16:17开始打代码,打不了,dev坏了,十分暴躁想打人,有时候真的很讨厌电子设备,因为我恨故障)
(16:38)开始打代码,(16:59)过了所有样例

B-

题目大意:

给你许n个点的坐标,问你这些数字能组成多少个三角形

思路:

暴搜枚举三个点,计算距离,判断是否两边和大于第三边。
时间复杂度在O(C(n,3)*3),n小于五十,C(50,3)有一万九,应该不会超时,(17:08)开始打代码,(17:30)样例全过但了wa了,(17:47)改了一下判断水平和垂直的,还是wa,(17:57)数组p长度从50扩大到105还是wa,通过率会骗人的,别看百分之百的通过率其实只有一个人交了,居然有人一个小时就ak了。。不玩了不玩了跑步去了。。

C-

题目大意:

判断一副手牌的牌面,是有对子还是三张相同的牌还是有炸还是有三袋二

思路:

模拟(20:15)开始打代码,(20:38)AC

D-Skyscrapers (hard version)

题目大意:

给你n,你要建造一个长度为n的数组,再给你n个位置的最大上限,要求这个数组每个位置不可超过其上限,并且一个数的左右(注意是左边所有数和右边所有数)不能同时大于这个数,求使数组和最大的答案,答案可能有多种,可输出任意一种

思路:
  1. 边扫边生成答案,每遇到一个不合格的位置就判断左右两边谁的差更小就改动哪边的值,不会影响到后面的答案因为把一个值改小对其他数来说有利无害,时间复杂度O(n3),最多1510^5
  2. 发现题目理解错了,不是左右临近的没有大于这个数的,而是所有左边和所有右边都不能有,证明了一下确实是会形成一个只有山峰没有山谷的数组结构,那么在确定峰值之后把整个数列改成峰值左边单调递增,峰值右边单调递减的结构就行,所以要枚举每个峰值,保存最大数组和,时间复杂度o(n*n)

你可能感兴趣的:(【三次集训】)