
ACM-暴力求解法
路小白_zZ
这个作者很懒,什么都没留下…
展开
-
uva 10273(暴力)
题意:题解:#include #include const int N = 1005;const int INF = 0x3f3f3f3f;int cases, n, t[N][15], num[N], day, flag[N], cnt;int count() { int temp = num[1]; for (int i = 2; i <= n; i++) { in原创 2014-11-23 15:20:32 · 1098 阅读 · 2 评论 -
uva 818(dfs+图+状态压缩)
题意:有n个环,编号从1到n,给出了一些环环相扣的情况,比如给a和b表示a和b两个环的扣在一起的,每个环都是可以打开的,问最少打开多少个环,然后再扣好,可以让所有的环成为一条链。题解:状态压缩把所有的打开环的情况枚举出来,然后拿去判断是否成立,更新打开环后的图g[i][j],和每个点的度数,不成立有三种情况,1.计算没有打开的环的度数,如果大于2说明不会有链,2.把没有打开环拿去dfs,访问过原创 2015-04-28 18:26:35 · 945 阅读 · 0 评论 -
uva 10396
题意:给出一个数字n,4或者6或者8,然后找到两个n/2位的数字相乘,得到的数字刚好是选出的两个数字的位数上的数组合得到的。要求两个数字不能同时整除10,且相乘得到的数字不能是奇数。 题解:枚举两个数字并打表。#include <stdio.h>#include <iostream>#include <string.h>#include <set>using namespace std;原创 2015-05-03 20:51:50 · 868 阅读 · 0 评论 -
uva 656(bfs)
题意:有n个栈,然后对于每个栈都有取栈顶两个值加减乘除得到一个数子压栈,或取栈顶的数字复制一个压栈,一共5种操作,刚开始每个栈都有一个初始值,n个数字可以经过同样的最多10个操作后使初始值变为给出的目标值且栈里数字都唯一。要求按顺序输出操作,最短且按字典序。题解:先bfs求第一组解,然后用同样操作看是否能让其他n-1组解也成立。#include #include #include u原创 2015-04-28 13:34:10 · 632 阅读 · 0 评论 -
uva 524(dfs)
题意:有n个数字从1到n,把这n个数字围成一圈,要求相邻两个数字的和是质数,输出所有满足条件的1开头的序列。题解:dfs水题。#include #include const int N = 35;int n, vis[N], res[N], flag[N];void init() { for (int i = 2; i <= 31; i++) for (int j = i原创 2015-04-28 13:27:01 · 559 阅读 · 0 评论 -
uva 585(字符串)
题意:有个倒三角形如图所示要求最大的全部是白色小三角形组成的倒三角形的小三角形的数量。输入-表示白色,#表示黑色。题解:暴力枚举顶点的找最大解,注意每行从0开始计小三角形,编号为偶数的只能往上面找,编号为奇数的只能往下面找。#include #include #include using namespace std;const int N = 105;char s[N原创 2015-04-28 13:29:25 · 586 阅读 · 0 评论 -
acdream 1704(暴力)
题意: Problem Description小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本《AC is not a dream》杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为0,但是有一些数字被隐藏掉了,然后让你根据没有隐藏的数字填出隐藏的数字。如下图:然后小晴天二话不说,三下五除二就写出了答案:然后小晴天原创 2015-04-30 20:30:07 · 762 阅读 · 0 评论 -
acdream 1705(暴力)
题意:有一块n*m大的草坪,’.’表示空地,’x’表示种了棵树,现在要给这块草坪建一个矩形栅栏,栅栏必须建在空地上,问栅栏建好的最大周长是多少,也就是最多占用了多少个空地。 题解:暴力,需要预处理出每个空地右边空地的数量存到r[i][j]和下方空地的数量d[i][j],然后枚举每个空地把它当做栅栏的左上角顶点,根据r和d两个数组得到上和左两条边可能的长度,然后枚举上和左的长度如果下和右也都满足条件原创 2015-04-30 20:24:28 · 759 阅读 · 0 评论 -
acdream 1105(dfs)
题意:Problem Description有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来达到一些目的,激光可以通过一些镜子反射。机智的瑶瑶为了显示自己的智商高于常人,把这个游戏改造了一下,变成了用激光攻击敌人的游戏。瑶瑶想知道射一次激光最多可以攻击到多少个敌人。PS: 由于激光很强大,可以在击中敌人后穿过它,而瑶瑶自己的坦克由于有特殊装置,所以不会被激光击中原创 2015-04-30 09:49:06 · 514 阅读 · 0 评论 -
acdream 1706(暴力)
题意:小晴天:“我有一个数列!”小晴天:“我还要有很多很多的数列!”于是小晴天就把这个数列的所有连续子数列写出来。然后小晴天把每个连续子数列中的最大的数写出来。那么,有多少个比K大呢?Input多组数据,首先是一个正整数t(t对于每组数据,首先是两个整数n(1接下来是n个整数a[i](1 Output对于每组数据,输出原创 2015-04-30 09:53:33 · 604 阅读 · 0 评论 -
acdream 1707(dfs)
题意:Problem Description小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的。为了保存苹果,小晴天买了N个一模一样的箱子,想要把苹果放进去,允许有的箱子是空的,请问小晴天有多少种不同的放法呢?例如对于4个苹果,3个箱子,2+1+1和1+2+1和1+1+2 是同一种分法。Input原创 2015-04-30 10:03:57 · 514 阅读 · 0 评论 -
uva 10318(dfs+状态压缩)
题意:有一个r*c的密码锁,现在给出了解密方式,是一个3*3的矩阵,‘*’表示灯亮,'.'表示灯灭,然后对于每个密码锁,触动一个按键,相当于把这个按键对应到3*3矩阵中间的按键处,然后对应'*'的位置的灯都会亮,如果本来是亮的就会灭掉,问最快按哪些按钮可以使密码锁上每个按键的灯都亮。题解:可以推出,按键顺序不同不影响按了这些键造成的结果,然后因为密码锁最多5*5,可以考虑用dfs暴力,然后因为原创 2015-04-21 23:42:31 · 736 阅读 · 0 评论 -
uva 225(dfs)
题意:有一个城市,一个人从城市的(0,0)出发,可以走东南西北四个方向,然后规定第一个方向走1步,左转或右转换个方向走2步,继续换方向走3步。。。,但是城市中会有一些障碍物是不能通过的,给出障碍物坐标,问走n步后是否能返回起点(0,0),如果可以输出每次走的方向,把所有可能情况全部输出。题解:首先坐标可能出现负数,所以可以把图扩大,估算所走路径不会超过250,所以中点设为(115,115),找原创 2015-04-24 23:49:34 · 701 阅读 · 0 评论 -
uva 817(dfs)
题意:给出一个数字组成的字符串,然后在字符串内添加三种运算符号 * + - ,要求输出所有添加运算符并运算后结果等于2000的式子。 所有数字不能有前导0,且式子必须是合法的。 题解:字符串长度25左右,可以暴力,用dfs搜索所有可能的分割情况,并在每次分割的字符后添加三种运算符,然后递归到最后一个字符拿去判断,先用栈把所有分割字符串得到的数字压栈,同时优先运算’*’,然后再从左到右计算看结果是原创 2015-05-01 15:24:03 · 1116 阅读 · 0 评论 -
uva 10570(暴力)
题意:有一个长度为n的序列,数字是从1到n,然后问至少交换多少次可以让序列成为升序或降序的序列,环是升序或降序也可以。比如 2 1 4 3也是可以的。 题解:把从1到n和从n到1所有成立情况放到数组内,共有2×n种情况,然后拿输入的序列和这2n种情况比对,不成功的交换后继续比对,直到完全匹配,找出交换次数最小值。#include <stdio.h>#include <algorithm>usi原创 2015-05-06 16:38:55 · 1433 阅读 · 0 评论 -
uva 1374(暴力)
题意:给出一个数字x,然后n = 1,每次计算可以让n翻倍,或者加或减之前x计算得过的数,问至少经过几次计算可以让n等于x。 题解:枚举次数,然后dfs是否能在这个次数得到x。#include <stdio.h>const int N = 100;int x, s[N];bool dfs(int cur, int num, int pre) { if (cur == num && pr原创 2015-05-07 00:36:47 · 1440 阅读 · 0 评论 -
Codeforces 570A
题解:水题。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 105;int n, m, num[N];int main() { scanf("%d%d", &n, &m); memset(num, 0, sizeof(num)); int原创 2015-08-15 00:04:23 · 615 阅读 · 0 评论 -
hdu 5379
题意:有一棵有n个节点的树,有编号1~n的n个数字要放到树上,且要满足三个要求: 1.树的每个节点只放一个数字 2.树的任意一个节点的所有直接孩子节点上面放的数字排序后是连续的 3.一棵子树的所有节点上面放的数字排序后是连续的 问有多少种不同的放法,结果取模1e9+7。 题解:因为子树的数字排序后都是连续的,所以可以转化为求切割连续区间的方法数。要加开栈外挂才能过。#pragma comm原创 2015-08-11 20:09:51 · 1000 阅读 · 0 评论 -
uva 11127(暴力)
题意:给出一个字符串,包括0、1、*,其中×是可以替换成0或者1的,如果字符串的某个子串S有SSS这样的连续重复3次出现,不是Triple-free串,问给出的字符串可以形成多少个非Triple-free串。 题解:因为串长度最多31,所以可以暴力枚举每一位,边枚举边判断。#include <stdio.h>#include <string.h>const int N = 35;char s原创 2015-07-14 14:59:35 · 639 阅读 · 0 评论 -
uva 10120(暴力+结论)
题意:有一只青蛙要从左岸跳到河中的n个石头中的第m(m <= n)个石头上拿礼物,石头间距和石头距离岸的距离都是1,青蛙在石头上可以向左跳也可以向右跳,但有一个规则是它跳的第i步长度必须是2*i-1,如果期间跳到岸上则不能拿到礼物,给出n、m问是否能拿到礼物。 题解:用递归可以解决,但是n的范围是1000000,所以肯定挂,然后看到一个结论是如果n大于等于49后,无论m是多少,一定可以跳到,用这个原创 2015-07-14 17:49:24 · 729 阅读 · 0 评论 -
uva 1354(二叉树+暴力)
题意:给出了房间的宽度,天平长度为1,天平有左右两个空位,可以放重物或另一个天平,然后有n个重物放到天平上保持天平平衡的情况下问天平最宽延伸是多少。 题解:想了很久的暴力,看到有大神用二叉树模拟天平,用二叉树的数组形式暴力出来了 http://blog.youkuaiyun.com/keshuai19940722/article/details/19966133 题解很详细,就是有一点补充,在judge()原创 2015-07-12 21:46:18 · 1471 阅读 · 0 评论 -
uva 10483(暴力)
题意:给出两个小数l,r,然后找到所有在[l,r]范围内的num满足 num = a + b + c = a * b * c 将结果从小到大输出。 题解:保证精度,将小数扩大100倍,枚举a,b,计算出c。return x.sum < y.sum; if (fabs(x.a - y.a) > 1e-9) return x.a < y.a; if (fabs(x.原创 2015-07-12 18:15:46 · 505 阅读 · 0 评论 -
uva 10479(找规律+递归)
题意:有一个初始序列第一个数字是0, 规律是把前一次推出来的每一个数字x,先接x个0,然后接x+1。 0 –> 1 –> 02 –> 1003 –> 02110004 那么这个序列就变成0,1,0,2,1,0,0,3,0,2,1,1,0,0,0,4… 问序列里第n个数字是多少,0 < n < 2^63。题解:首先可以看出这个序列的第2^k个数字一定是k,然后从第2^k个数字往前看一定是紧接着原创 2015-07-12 18:11:48 · 1399 阅读 · 0 评论 -
hdu 5254(暴力)
题解:暴力所有点,直到不存在可以0变1的点。#include <stdio.h>#include <string.h>const int N = 505;int n, m, k, g[N][N], temp[N][N], vis[N][N];bool judge(int x, int y) { if (x - 1 >= 0 && y - 1 >= 0) { if (te原创 2015-05-31 22:17:35 · 983 阅读 · 0 评论 -
hdu 5246(模拟)
题解:直接模拟#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int N = 10005;long long n, m, k;long long s[N];int main() { int t, cas = 1; scanf("%d", &t);原创 2015-05-30 19:03:07 · 984 阅读 · 0 评论 -
hdu 4565(矩阵快速幂)
题意:给出a,b,n,m按如下公式计算输出Sn 题解:和之前做过的一题很像,推导公式如下 (a+根号b)^n = xn + yn×根号b –> (xn-1 + yn-1×根号b)×(a+根号b) = (a*xn-1 + b*yn-1) + (xn-1 + a×yn-1)×根号b然后写成矩阵形式后(a-根号b)^n = xn - yn×根号bxn+yn×根号b = xn+yn×根号b +原创 2015-05-28 23:08:51 · 618 阅读 · 0 评论 -
poj 1321(dfs)
题意:有一个n*n的矩阵,’#’处可以放棋子,给出k个棋子要放入棋盘中,棋盘的上的棋子任意两个不能在同一行和同一列,问几种放法。 题解:棋盘8*8,暴力的dfs就可以。#include <stdio.h>#include <string.h>#include <vector>using namespace std;const int N = 10;char str[N];int vis原创 2015-05-17 21:26:36 · 467 阅读 · 0 评论 -
uva 471(dfs)
题意:给出一个n,然后要得到所有的s1和s2满足,s1与s2都是位数不存在相等的数字,且s1 / s2 = n。题解:纯暴力题,枚举s2,计算s1,然后判断s1和s2是否都是不重复数位的数字,终止条件是s1 > 9876543210。#include long long n;int vis[10];bool judge(long long x) { if (x > 9876543原创 2015-04-20 19:38:07 · 753 阅读 · 0 评论 -
uva 812(暴力)
题意:有n个货架上摆放了b个货物,然后从左到右的给出每个货架上货物买入的价格,要拿去卖掉以统一价10,问如果买入形式是栈,要买一个货物必须把他左边的东西都买了才可以,问最大利润是多少,要买多少个货物达到最大利润,按字典序输出所有可能情况(最多10种)。题解:水题,暴力出所有情况。第二组样例举例:3 10 9 10 10 购买数量可能情况:2 4 59 17 24 30原创 2015-04-23 22:09:17 · 660 阅读 · 0 评论 -
uva 11218(暴力求解)
题意:9个人ch题解:#include #include const int N = 90;int n, com[N][3], score[N], vis[10];int main() { int cases = 1; while (scanf("%d", &n) && n) { for (int i = 0; i < n; i++) { for (int j =原创 2014-08-27 21:43:43 · 990 阅读 · 0 评论 -
uva 165(暴力求解)
题意:题解:原创 2014-08-15 01:00:33 · 909 阅读 · 0 评论 -
uva 10344(暴力求解)
题意:题解:原创 2014-08-13 23:50:34 · 906 阅读 · 0 评论 -
uva 216(暴力求解)
题解:给出一些点的坐标,计算 题意:原创 2014-08-13 00:43:32 · 1196 阅读 · 0 评论 -
uva 146(下一个排列)
题意:将给出的序列输出下一个原创 2014-08-11 20:57:30 · 653 阅读 · 0 评论 -
uva 11205(枚举子集)
题意:题解:原创 2014-08-11 20:41:56 · 999 阅读 · 0 评论 -
uva 729(全排列)
题意:题解:原创 2014-08-11 21:02:30 · 781 阅读 · 0 评论 -
uva 10098(全排列)
题意:题解:原创 2014-08-11 21:01:02 · 780 阅读 · 0 评论 -
uva 131(枚举子集)
题意:给出10张pa题解:#include #include #include #include #include using namespace std;const int N = 10;string s[N], s1[5];const string an[9] = {"straight-flush", "four-of-a-kind", "full-house", "原创 2014-08-11 20:44:10 · 1376 阅读 · 0 评论 -
uva 10167(暴力求解)
题意:一个蛋糕上有2N个樱桃,给出了樱桃的坐标,要把蛋糕平均切成两块,并且每块蛋糕上有N个的樱桃。题解:a 和 b 范围都是从-500 到 500,计算ax + by 的值(x 和 y 是樱桃坐标),如果大于零和小于零的个数相等就输出对应a 和 b,如果ax + by == 0,就不考虑这个结果。#include #include const int N = 100 + 5;in原创 2014-08-11 20:21:49 · 905 阅读 · 0 评论 -
uva 565(暴力+枚举)
题意:题解:#include #include #include #include #include using namespace std;const int N = 100;string s[N];int n;struct ST { int ye, no;}sta[N];void init() { n = 0; memse原创 2014-08-21 17:16:15 · 846 阅读 · 0 评论