UVA
编码思考
这个作者很懒,什么都没留下…
展开
-
[算法竞赛入门经典] UVA 12174 - Shuffle
紫书P247 例题8-15先预处理一遍每个原创 2014-08-25 12:59:01 · 1118 阅读 · 0 评论 -
[算法竞赛入门经典] UVA 1152 - 4 Values whose Sum is 0 | POJ 2785
直接暴力复杂度太高,可以先把A+原创 2014-08-15 19:00:47 · 1919 阅读 · 1 评论 -
[算法竞赛入门经典] UVA 1471 - Defense Lines
紫书例题8-8。原创 2014-08-21 14:50:48 · 846 阅读 · 0 评论 -
[算法竞赛入门经典] UVA 714 - Copying Books
紫书P244 例题 8-10。直接二分最小值,倒着贪心原创 2014-08-23 20:56:36 · 717 阅读 · 0 评论 -
UVA 1149 - Bin Packing
贪心思想,排序后左右用两个变量从中间操作即可。#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <ctype.h>#include <iostream>#include <set>#include <map>#include <q原创 2015-06-29 20:25:07 · 691 阅读 · 0 评论 -
UVA 12627 - Erratic Expansion
一个红球可以分裂为3个红球和一个蓝球。 一个蓝球可以分裂为4个蓝球。分裂过程下图所示: 设当前状态为k1,下一状态为k2。 k1的第x行红球个数 * 2 ⇒ k2第2*x行的红球个数。 k1的第x行红球个数 ⇒ k2第2*x+1行的红球个数。特殊处理一下上下边界,递归求解就可以搞定了。#include <stdio.h>#include <string.h>#include <math.原创 2015-06-29 14:13:11 · 1124 阅读 · 0 评论 -
UVA 12325 - Zombie's Treasure Chest
紫书P210 例题7-11。 此题分3种情况讨论: 1、S1很小,S2很大 直接枚举宝物2的个数0~N/S2。 2、S1很大,S2很小 直接枚举宝物1的个数0~N/S1。 3、S1很小,S2很小 当两种宝物体积相同时,比较S2*V1与S1*V2的大小,如果前者大,那应该优先拿前者。由此可得后者最多拿S1-1个。反之,前者最多拿S2-1个。#include <stdio.h>#incl原创 2015-06-01 20:47:16 · 605 阅读 · 0 评论 -
UVA 120 - Stacks of Flapjacks
输入一行数字,代表从上到下的饼的编号,现可以对第k张饼以上的编号整体翻转。问要如何操作使饼的编号为非递减序列。 此题是Special Judge,答案不唯一。 我的思路就是用两个数组,一个数组存读入的顺序编号,另一个存排序后的编号。 然后从后往前处理,当a[i] 不等于 b[i]的时候,有两种操作方式: 1、a[0] 等于 b[i],这种直接执行整体翻转第k张饼以上的编号即可。 2、a[0原创 2015-06-15 23:11:22 · 590 阅读 · 0 评论 -
UVA 1605 - Building for UN
题意:输入一个数字n代表有n个国家,输出一种楼层排布,使得任意两个不同得国家都有一对相邻的格子(同层有公共边 或 相邻层同一位置)。并且自己国家的格子都是间接连通的。 此题答案不唯一,Special Judge。 其实仔细想想2层楼就够了,一层是每一行是一种国家,另一层是每一列是一种国家。#include <stdio.h>int main(){ int n; char ch原创 2015-06-16 08:58:23 · 791 阅读 · 0 评论 -
UVA 11134 - Fabled Rooks
由于任意两个小车不能在同一行和同一列,那可以把行和列拆成一维来处理。这样就把问题转换为:把[1,n]中的每个数字填到每个区间里。假设有[1,6] [1,5] [1,7] 三个区间。 想一想1应该优先填到哪个区间里呢? 我们一定要把1填到区间[1,5]中,因为另外两个区间已经包含区间[1,5]。不会对后面的操作造成影响。对于[1,n]中的每个数贪心的策略是,尽量拿区间右端点小的那个即可。#incl原创 2015-06-16 12:22:59 · 583 阅读 · 0 评论 -
UVA 11054 - Wine trading in Gergovia
把k个单位的酒从一个村庄运到相邻村庄需要k个单位的劳动力。 问最少需要多少劳动力可以满足所有村庄的需求? 由于所有位置的和一定为0,令最左端的位置为a1。 1、如果a1 > 0 那么a1买的酒一定需要经过a2才能到达,a2到a1需要的劳动力也就可以求出了,即:abs(a1)。 然后就把求a1到an需要的劳动力,转换为a2到an需要的劳动力 + abs(ai) 此时a2需要更新为a1 + a原创 2015-06-16 15:53:08 · 571 阅读 · 0 评论 -
UVA 11572 - Unique Snowflakes
输入一个长度为n(n <= 106)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同得元素。 一开始用得map做的,用变量s存储子序列开始位置。 然后开始把map中每个出现的数字改为数字的下标。 然后从左到右枚举子序列结束位置i,当map[a[i]]的值不为零时,需要把map[s]~map[a[i]]的值改为0。然后才能继续向后扩展。 但是用map做的代码超时了,然后看了原创 2015-06-17 15:23:17 · 791 阅读 · 0 评论