
算法设计——暴力搜索
文章平均质量分 75
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
习题4-1 象棋 UVa1589
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#define max 10#define rise(i,a,b) for(int i = a + 1;i <= b;i++)#define fall(i,a,b) for(int i = a - 1;i >= b; i--) int原创 2014-07-28 09:14:14 · 1446 阅读 · 2 评论 -
例题7-3 分数拆分 UVa10976
1.题目描述:点击打开链接2.解题思路:根据题目描述,可以解出来y的范围是1≤y≤2k。进而可以求出x=ky/(y-n)。注意x要大于0且是整数。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include#include#include#i原创 2015-04-05 16:41:12 · 886 阅读 · 0 评论 -
例题7-2 最大乘积 UVa11059
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索解决,由于n,S的范围都比较小,直接利用三重循环枚举。又最大可能乘积不会超过10^18,因此结果用long long保存。注意枚举的时候起点和终点可以重合。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#incl原创 2015-04-05 16:24:22 · 797 阅读 · 0 评论 -
例题7-1 除法 UVa725
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索解决。直接从1234开始枚举除数,由于乘积不能超过100000,所以上限是100000/n。然后判断得到的乘积和除数中的所有数是否都各不相同即可。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#原创 2015-04-05 16:07:12 · 1430 阅读 · 0 评论 -
例题7-11 宝箱 UVa12325
1.题目描述:点击打开链接2.解题思路:本题是一道动态规划题,不过可以直接进行暴力搜索,和上次CF的ZeptoLab的C题完全一样,不再赘述。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include#include#include#inc原创 2015-04-10 23:04:21 · 688 阅读 · 0 评论 -
习题7-6 重叠的正方形 UVa12113
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索解决。一开始我的思路有点问题,想着先标记方格内的原创 2015-04-18 22:12:00 · 1859 阅读 · 5 评论 -
习题7-4 切断圆环链 UVa818
1.题目描述:点击打开链接2.解题思路:本题利用枚举集合的方法解决。本题要求找出最少的需要切断的圆环个数,使得重新连接后,所有的圆环可以形成一条链。本想着只用统计度数即可解决了,不过最后发现是我想的太简单了。最后实在想不出好的方法了才参考了别人的解法,果然相当巧妙。其实就是枚举需要打开的圆环即可,只不过需要判断什么时候这样打开的圆环一定可以最终连成一条链。不难想象:当剩下的圆环中每个圆环的分支原创 2015-04-16 18:37:50 · 941 阅读 · 0 评论 -
习题10-23 Hendrie序列 UVa10479
1.题目描述:点击打开链接2.解题思路:本题是一道找规律题,仔细观察后发现有以下特点:(1)下标为2^k的数正好为k(下标从1开始)。(2)如果依次以1,2,4,8...的长度来分解串,可以将序列分解为:0 1 02 1003 02110004 1003020211100005......可以发现,第i个串是由第i-2,i-3,...2,1,0个串组成的。且第i-2个串有1个,第i-3原创 2015-05-02 13:58:52 · 839 阅读 · 0 评论 -
Looksery Cup 2015 D. Haar Features
1.题目描述:点击打开链接2.解题思路:原创 2015-06-18 12:48:39 · 648 阅读 · 0 评论 -
#308 (div.2) B. Vanya and Books
1.题目描述:点击打开链接2.解题思路:本题要求统计数位的个数,简单的试验一下发现有如下规律:一个n位数的个数有9*(10^n)个,因此所有n位数的数位是n*9*(10^n)个,因此可以利用两个循环变量base,k来计算,其中base表示n位数的总个数,k表示每一个n位数的数位有k位,循环条件是n-base>0,这样即可完成统计。3.代码:#define _CRT_SECURE_NO_原创 2015-06-29 13:07:20 · 810 阅读 · 0 评论 -
Looksery Cup 2015 A. Face Detection
1.题目描述:点击打开链接2.解题思路:本题是一道简单的搜索题,要求找有多少个2*2的方格,其中的四个字母可以拼成单词face。然而我的写法显得比较麻烦,用了四个标记分别判断四个字符是否出现过。其实简便写法是可以将它们有序化,按照字母表顺序排个序,如果最后等于“acef”那么cnt++。随后附上参考代码。3.代码:#define _CRT_SECURE_NO_WARNINGS#inc原创 2015-06-15 21:53:24 · 705 阅读 · 1 评论 -
POJ 3187 Backward Digit Sums
1.题目描述:点击打开链接2.解题思路:本题通过观察发现实际上是找符合这样的等式的一个排列:C(n-1,0)*a[0]+C(n-1,1)*a[1]+...+C(n-1,n-1)*a[n-1]==sum其中数组a是1~n的一个排列,C(n-1,i)代表组合数。这样的话,可以花费O(N^2)时间预先计算好所有组合数,然后用next_permutation函数枚举下一个排列即可。如果发现正好原创 2015-04-08 14:53:15 · 640 阅读 · 0 评论 -
POJ 2718 Smallest Difference
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索法解决。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include#include#include#include#include#include#include#includ原创 2015-04-07 23:57:18 · 850 阅读 · 0 评论 -
例题1.8 彩色立方体 UVa1352
1.题目描述:点击打开链接2.解题思路:本题要求重涂尽量少的一些面,使得n个立方体完全相同。看上去很棘手的一个问题。第一种想到的方法就是暴力搜索。但首先要弄明白的一个问题是:一个正方体有几种不同的旋转方式?如果我们选择一个面作为顶面,有6种选法;接下来选一个面作为前面,有4种选法,此时该正方体的“姿态”就确定了,根据乘法原理,一共有6*4=24种姿态(这里用姿态代指旋转方式,一种姿态就是一种旋原创 2015-03-12 16:38:42 · 731 阅读 · 0 评论 -
#322 (div.2) D. Three Logos
1.题目描述:点击打开链接2.解题思路:本题要求判断能否找一个正方形,使得恰好可以装下三个矩形。如果可以并输出。首先可以知道,正方形的边长一定是矩形中最大的边长,而且一定有一个矩形是一整条边完整覆盖一个正方形的边长的,因此除去这个矩形后,就是枚举剩下2个矩形的摆放方式了。每个矩形有4种摆放方式,逐个测试,如果均不可行,说明无解。3.代码:#include#include#inclu原创 2015-09-29 00:12:28 · 346 阅读 · 0 评论 -
POJ 1222 EXTENDED LIGHTS OUT
1.题目描述:点击打开链接2.解题思路:本题是经典的反转开关问题,可以用集合来枚举。我们可以事先指定好第一行的反转方式,然后根据第一行的情况,推算出第2行,第3行一直到第5行的反转方式,最后只需要判断一下第5行是否均为0即可。那么如何判断第(i,j)处是否需要反转呢,可以考察(i-1,j)这个格子,如果它仍然是1,那么就必须反转(i,j),判断的方法很简单,因为反转的效果可以叠加,因此只需要看原创 2015-10-03 14:26:07 · 327 阅读 · 0 评论 -
ZeptoLab Code Rush 2015 A. King of Thieves
1.题目描述:点击打开链接2.解题思路:本题要求在一个串中找出5个等距离的‘*’,如果有,输出yes,否则输出no。思路很清晰,首先枚举步长len,然后枚举起点i,判断是否能够连续不间断地跳跃5次且均为‘*’即可。本题还可以加速寻找,先寻找是否存在‘*****’,如果有,直接输出yes。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#in原创 2015-04-05 11:58:12 · 686 阅读 · 0 评论 -
习题3-7 DNA序列 UVa1368
1.题目描述:点击打开链接2.解题思路:根据题意描述,扫描每一列,统计这一列中各个字符出现的次数,同时维护最大的次数。由于是按照字典序最小输出,因此统计完次数后依次从前往后扫描26个字母中第一次出现该最大次数的字符,它就是最优解中的字符。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#原创 2015-03-23 16:46:30 · 910 阅读 · 0 评论 -
习题3.6 纵横字谜的答案 UVa232
1.题目描述:点击打开链接2.解题思路:本题属于模拟题,按照题意,第一步标记出各个点的起始位置的编号,第二步开始找这些字符串,先横着找,再竖着找。注意时刻都要警惕不要越界。在竖着找的时候由于不一定按照编号大小顺序加入vector,因此最后要再做一次排序。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#i原创 2015-03-23 00:04:36 · 1437 阅读 · 0 评论 -
习题2-6 排列
#include#includeint main(){ int a, b, c, d, e, f, g, h, i; for (int p = 123; p <= 329; p++) { int n = p; a = n / 100; b = n / 10 % 10; c = n % 10; n *= 2; d = n / 100; e = n / 10 %原创 2014-06-20 17:30:47 · 725 阅读 · 0 评论 -
习题4-2 正方形 UVa201
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#define max 200int n, m;int arr[max][3];int find(int len, int a, int x, int y){ if (a == 'V') return 0; int aa = 1, b原创 2014-07-31 00:17:37 · 1131 阅读 · 1 评论 -
习题3-9 子序列 UVa10340
#include#include#include#include#define max 100000char s[max], t[max];int main(){ //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); while (scanf("%s%s", s, t) != EOF原创 2014-06-26 14:43:31 · 733 阅读 · 0 评论 -
习题 3-4 周期串 UVa455
#include#include#include#define max 100+10char s[max];int main(){ int n, len; scanf("%d", &n); getchar(); while (n--) { getchar(); gets(s); len = strlen(s); for (int i = 1; i <= len原创 2014-06-20 17:33:22 · 5637 阅读 · 7 评论 -
习题3-8 循环小数 UVa202
#include#include#include#include#define max 7000int arr[max];int main(){ //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int a, b; while (scanf("%d %d", &a, &b)原创 2014-06-25 22:53:19 · 1233 阅读 · 3 评论 -
习题4-4 骰子涂色 UVa253
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#define max 20char a[max];int tp[10];int b[10];int c[10];int less(int p, int q){ int len = 4; for (int i = 0; i < l原创 2014-08-06 12:28:30 · 1184 阅读 · 5 评论 -
习题3-10 盒子 UVa1587
#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeint a[6][2];int mark[6];int main(){ while (scanf("%d%d", &a[0][0], &a[0][1]) == 2) { for (int i = 1; i < 6; i++) scanf("%原创 2014-07-13 11:38:24 · 1444 阅读 · 3 评论 -
习题8-2 聚会游戏 UVa1610
1.题目描述:点击打开链接2.解题思路:这道题把我坑的快死。。。由于紫书上注释了一句话:”本题看似简单,实际暗藏陷阱,需要考虑细致,周全“,我开始还不以为然,经过了若干次WA的血的教训才让我发现,这道题的细节还真是多的令我头疼:需要分好多情况:两个串的位置i后面都有字母时,枚举到某个串的最后一个位置时,还要注意如果是字母‘Z’的这个最隐蔽的特殊情况。。。到了最后对拍都找不出任何能够hack我程原创 2015-02-08 17:08:31 · 702 阅读 · 0 评论 -
习题8-13 外星人聚会 UVa10570
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索,逐个枚举排列的起始位置,然后分顺时针,逆时针两种情况将杂乱的排列变成有序的环状排列。比如需要将1 2 4 3变成从位置2(范围是0~n-1)开始的顺时针排列(即把它变成3 4 1 2,数字1从位置2开始),那么如果1在原来的排列中不在指定的位置2,就需要将原排列中的数字1和位于位置2的数字交换位置,强制数字1调整到位置2,以此类推,有点原创 2015-02-10 14:21:37 · 586 阅读 · 0 评论 -
习题7-1 消防车 UVa208
1.题目描述:点击打开链接2.解题思路:本题让按照字典序来枚举从1到k的所有路径,结点不能重复经过;类似于枚举全排列,不过事先要判断1到k是否联通,否则会TLE,判断连通的方法据说是Floyd算法(队友告诉我的,一种找两点间接有联系的有效算法),之前我试着用dfs找1到k能否连通,但我写的算法自身有致命缺陷,还是通过对拍才找到的。。。这道题不太难,但我在判断1到k是否连通这个地方花费了很多原创 2015-02-04 11:27:05 · 1404 阅读 · 0 评论 -
习题5-10 在Web中搜索 UVa1597
1.题目描述:点击打开链接2.解题思路:本题要求模拟一个搜索引擎,该引擎可以处理四种搜索方式:term,term1 AND term2,term1 OR term2,NOT term。在题目描述部分已经介绍了搜索引擎的搭建方式,理论上只需要按照题意搭建即可,不过这样的话,代码会很长,由于中间还要输出一些分隔符来区分文章或者询问,代码长度至少快300行了。这样的代码难以维护,而且在比赛中也不切实原创 2015-03-25 17:56:12 · 1844 阅读 · 3 评论 -
#297 (div.2) B. Pasha and String
1.题目描述:点击打开链接2.解题思路:本题也是一道模拟题,但如果不加一些加速措施会导致TLE。由于两次相同位置的交换等价于没有交换,因此要想办法运用这一性质,减少无所谓的交换操作。首先,统计每个位置出现的次数,同时用a数组存放出现了哪些位置。根据交换的性质,我们只用考虑出现奇数次交换的位置即可。把出现奇数次的位置放入vector中,如果位置a,位置b都是出现了奇数次,且中间没有位置需要交原创 2015-03-27 12:42:44 · 944 阅读 · 0 评论 -
#281 (div.2) A.Vasya and football
A. Vasya and Footballtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputVasya has started watching football g原创 2014-12-06 11:34:55 · 732 阅读 · 0 评论 -
例题1.7 偶数矩阵 UVa11464
1.题目描述:点击打开链接2.解题思路:本题利用暴力搜索解决。不过要采用适当的枚举策略才能防止TLE。由于题目中n的最大值是15,通过观察可以发现,我们可以根据第一行的情况即可推算出下面各行的解,也就是说整个矩阵的解完全取决于第一行的情况。又因为每个元素非0即1,所以可以想到枚举集合。这样,每次枚举第一行的一个状态,然后用check函数去计算改变的个数,无解时输出INF。这样整道题的时间复杂度原创 2015-03-11 22:16:16 · 860 阅读 · 0 评论 -
习题3-11 换低挡装置 UVa1588
1.题目描述:点击打开链接2.解题思路:本题要求找一个尽量小的长度,使得能够容纳下两个不同的装置。还是考虑暴力搜索:假设两个装置分别为a,b,,长度分别为n1,n2.那么固定b(b的起始位置固定到位置n1),从左往右枚举a的起始位置,看能否和b进行匹配。如果可以,更新最小的长度。输出即可。另外,也可以从对称性的角度考虑。由于固定装置是相对的,因此考虑固定b和固定a两者的最小值即可。3.原创 2015-03-23 19:10:58 · 767 阅读 · 0 评论 -
1001 The Cats' Feeding Spots (2015年北京赛区网络赛A题)
1.题目描述:点击打开链接2.解题思路:本题需要分三种情况讨论:(1) nm。首先枚举圆心,然后计算其他点相对于该圆心的距离,排序后根据情况来讨论即可。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#incl原创 2015-09-22 14:16:26 · 617 阅读 · 0 评论