UVa 1610 - Party Games(细节处理)
输入一个含有偶数个串的集合,求一个字符串s0,使集合中一半的串大于s0,另一半小于等于s0,多解输出字典序最小的解。只需将s与中间两个串比较即可。
新串s0从空串开始,每次循环加上一个s1中对应位置的字符。只要满足条件就跳出循环,输出。
1 |
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
输入一个含有偶数个串的集合,求一个字符串s0,使集合中一半的串大于s0,另一半小于等于s0,多解输出字典序最小的解。只需将s与中间两个串比较即可。
新串s0从空串开始,每次循环加上一个s1中对应位置的字符。只要满足条件就跳出循环,输出。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
简单的贪心问题。输入n个物品的重量,背包的容量m,每个背包最多装两个物品,问需要多少个背包。
思路很简单,最小的和最大的匹配,装不下就改找比那个小一点的。
匹配要用二分查找,遍历会超时。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
刷题50天了,数据结构差不多看完了,马上就要进入暴力求解了,暴力求解里的回溯法貌似很难的样子。
感觉离百题不远了,但是准备从十七周开始不再长时间刷UVa题,每天至多1h,直至期末考试结束。。所以14年内百题希望不大。。
不多说了,上图:
PS:之前攀哥说看完第六章还觉得简单,那学校就有希望了。感觉现在,至少专业是有希望了。
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
介绍了一个游戏规则,输入牌堆,要求输出胜负或者平。
用vector进行模拟,set储存状态,出现重复状态就是平。
1 | #include<iostream> |
1 | ios::sync_with_stdio(false); |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出扑克牌堆,当堆顶的扑克与它左边或者左边第三堆的堆顶的扑克match(suit或rank相同),这张牌就移过去,优先移动三格,优先移动最左边牌堆顶的牌。
一开始用的string,stack,vector模拟的,在UVa上2.899s过了,后来学校有这个题,时间限制1s,进行了优化,VJ上测试0.999过的。
优化后代码:
1 | #include<cstdio> |
原代码:
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出n个单词,问能否将这n个单词连成串,使得每个单词最后一个字母和下个单词第一个字母相同。
首先对单词预处理,变为从首字母到最后一个字母的有向边,将单词集合变为有向图。
然后统计每个点的入度和出度,至多有两个点出度和入度不相等,且一点出度比入度大1,另一点入度比出度大1。
再判断连通性,所有出现过的单词必须连通。
满足以上条件即能连成。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
输入n表示有n个变量,然后输入m个数对(u,v),表示变量u<v。要求排列所有变量,输出任意可行解。
变量当作点,大小关系当作边,形成有向图,然后进行拓扑排序就好了。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
给出迷宫的结点,和迷宫结点处朝向与行走方向的限制关系,求从入口走到出口的最短路径。
最短路问题BFS,用三位数组d[maxn][maxn][4]记录是否经过,结构体数组p[maxn][maxn][4]记录上一步的位置,达到出口就打印解。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
输入一个斐波那契数的前缀,求开头与所给前缀相同的最小斐波那契数的编号。
容易超时的一道题,计算前十万个斐波那契数要用高精度算法,还要注意只保留前50位就够了,不然会超时。
然后就是查询,原本保存在string数组中,单次查找复杂度为O(n*s.length())。发现查找会超时,后来使用了字典树,单次查找仅为O(s.lengt h()),效率提高很多,就过了。
建树使用了指针,调用之前一定要判断不为空。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **
第七章开头水题好多啊。。
1 | #include<iostream> |
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **