TC_SRM_621_DIV2

来源:互联网 发布:苹果笔记本mac系统盘 编辑:程序博客网 时间:2024/04/28 17:55

250(模拟, sort)

题目链接

http://community.topcoder.com/stat?c=problem_statement&pm=11084&rd=15854


意思就是说对于字符串有两种排序方式

第一种 按照字典序的顺序进行排序

第二种 按照字符串的长度进行排序

然后对于给定的字符串

判断它是怎样的加序方式

总共四种可能


思路:

写的时候直接暴力枚举过的 = =(特别暴力)

分别用两种不同的排序方法 把该字符串向量进行排序

然后一个个进行对于判断是否是加序的

ac代码

http://paste.ubuntu.com/7504257/


官网给的思路也差不多 不过它的实现方法要比我的简单的多

就是只对向量遍历一次 同时判断当前是否加序 然后记录

官网解法链接

http://apps.topcoder.com/wiki/display/tc/SRM+621



500(dp)

题目链接

http://community.topcoder.com/stat?c=problem_statement&pm=13166&rd=15854


意思是给你一组整数

可以去任意个数加和 但是每个数只能取一次 可以重复

然后问你能够组成的连续最大数是多少(1,2,3.。。。)


思路

比赛的时候没有写出来。。纠结了

官方题解也没看懂= =

不过后来在summary中找个代码感觉很巧妙!

就是我们先对这组数据从小到大排序

用一个变量sum记录当前能够到达的最大数

然后我们就从最小s【0】开始判断是否<= sum + 1

若过是的话 那么用sum加上s【i】(意思是我们最大能够到达sum)

否则就然会直接 return sum+1(我们往后就不再 连续)

十分巧妙

用sum来作为1~max的遍历

同时限制了s【i】的范围


这里我又有一种理解大家也可以参考下(不晓得对不对 = =)

也可以认为这是一个偏序关系,sum+1是他们理论上的最小上界  而s【i】是他们的实际最小上界

如果实际最小上界大于理论最小上界就结束 。


ac代码

http://paste.ubuntu.com/7523481/




0 0
原创粉丝点击