随笔分类 -  暴力求解

摘要:构造类问题,打表找规律题意:输入n,生成一个n的全排列a,生成一个n的全排列b,从第1位到第n位,每个位上的对应的(ai+bi)%n=ci,然后得到n位的序列c,看看c是不是也是一个n的全排列,是的话就成功了,输出。如果无论怎样都找不到合适的a和b去构造出c,那么就输出-1这题一想通了,仅是那么的水,但是自己还是很长时间去思考说说思考的过程1.很容易想到,题目是想我们我们构造一个合适的a,b,进而产生合适的c,虽然题目让我们输出任意一个合法的排列就可以了,但其实要我们找的不是排列方案,而是匹配方案试想一下,如果手头上有合适的一个排列,那么我们把对应的ai,bi,ci捆版在一次,我们完全可以对这 阅读全文
posted @ 2013-06-11 12:41 Titanium 阅读(505) 评论(0) 推荐(1)
摘要:继续复习暴力给出n个点的坐标,选出最多的点,在一条直线上直接暴力,不过时间比较糟糕。一个二重循环,枚举i,j两个点,这两点确定一条直线,然后枚举剩下的点看是否在这条直线上,所以一个三重循环,时间复杂度O(n^3)注意枚举不要做重复的工作,否则会超时另外这题是有O(n^2logn)的算法的#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define N 710#define LEN 110int n;struct 阅读全文
posted @ 2013-04-25 19:40 Titanium 阅读(592) 评论(0) 推荐(0)
摘要:继续复习暴力题意:输入有点恶心,首先是case数,然后一个空行,然后再输入信息,然后又以一个空行结束该组数据,如果是最后一组数据了,不以空行结束,而是直接以EOF结束。输出,case之间有一个空行,最后一个case后面不要加空行每组case的信息,就是N行的串,串中只有01,串的个数一定是偶数。原本有很多个一样的长串,每个长串都分成了两个短串但是分割的位置不一定相同即两个短串不一定是平分的(就是输入中的那些串)。你要把这偶数个短串拼回那个长串(即2N个短串拼回N个相同的长串),如果有多种可能,任意一种即可,然后输出这个长串题目保证一定有有解的数据不大,144,直接暴力。首先按短串的长度升序排序 阅读全文
posted @ 2013-04-25 15:21 Titanium 阅读(977) 评论(0) 推荐(0)
摘要:数论+打表A的所有因子和位B,B的所有的因子和为A,则称{A,B}是一对ooxx number输入数字n,求出[1,n]里面有多少对ooxx number,其中(A,B),(B,A)这样算作一对n最大为5百万(50000000)hits 220= (1+2+4+71+142) <--- 284,284= (1+2+4+5+10+11+20+22+44+55+110) <--- 220。220 and 280 is a pair of ooxx numberssample input3001300sample output12定义sum[i]=i的因子和,用筛法来构建i枚举因子i.. 阅读全文
posted @ 2013-04-21 23:47 Titanium 阅读(427) 评论(0) 推荐(0)
摘要:暴力训练的题目,给出一个数字(最长1000位即10^1000),给出m表示交换次数(每次可以交换任意两位的数字),问交换后得到的最小数字。注意,数字不能有前导0,另外有m次交换机会,但不必全部用完,只要交换到最小数字了就可以退出为了得到最小数字,就是从高位开始,不断找最小的数字放到高位(但第一位要特殊处理不能为0)。如果现在使第i位最小,从第i到最后一位扫描找到最小值然后交换然后交换次数减1,如果刚好第i位就是最小值,则不交换,直接跳过,所以交换次数不能减1。如果m>len,即大于数字的位数,那么显然后面的交换机会都是多余的,最多交换len次就可以退出了所以结束枚举的条件是,以为枚举了全 阅读全文
posted @ 2013-04-19 13:19 Titanium 阅读(398) 评论(0) 推荐(0)
摘要:暴力+模拟题意:一行字符串没有空格,是一个加法或减法算术表达式。数字中有大写字母,大写字母代表了某个数字,一个字母只能代表1种数字,不同字母代表的数字不同,另外允许存在前导0,另外字母总数最多10个。另外题目中说第1个数字要大于等于第2个数字,所以我做了判断,然后wa了一个早上+一个晚上,注释掉就AC了很无语。。。。另外答案可能有多种,任意一种都可以的,至少我的代码是这样,并且保证是有解的。另外这题网上找不到题解的,确实我也觉得这题很无聊。。。但是选拔赛的时候,居然想成了拓扑排序(因为做过类似的,又一次被驴舔了)说说做法吧因为字母最多十个,所以就暴力枚举,可想而知枚举量最大是10!,枚举后就把 阅读全文
posted @ 2013-03-28 23:14 Titanium 阅读(286) 评论(0) 推荐(0)
摘要:枚举子集+模拟2012国赛简单题。题意有n*n的点,有一些点是空地可以放稻草人保护稻草,稻草人有保护范围,就是距离为r的曼哈顿距离。问要保护所以的草最少要多少个稻草人,输出最少个数,如果全部放入都不能全部保护则输出-1这题有坑,不过代码写得好的话,坑是可以避免的,不需要特判。1.可以能一个空地都没有即不能放稻草人,所有稻草都无法收到保护,输出-1。2.所有点都是空地,全部放稻草人,这样的话答案是0,因为根本没有草不需要保护。2.注意一点,我就是为此WA了好多次,空地是不需要保护的!比如枚举了放置的稻草人并把受保护的点染色为1,如果有些点为0,并不一定是失败,可能那个点是空地,虽然它没有放稻草人 阅读全文
posted @ 2013-03-18 13:01 Titanium 阅读(419) 评论(0) 推荐(0)
摘要:暴力题选拔赛的题目当时想歪了也不敢下手做题意:三国杀,我方和敌方都有n人,会给出我方武将的全部名字。然后下面n行,第i行先输入一个m,后面跟着m个名字,表示敌方第i个武将能克制我方的这m个武将,没有列出名字的武将则会克制敌方的第i个武将。两方对战,一方武将死了下一位补上,直到一方武将全部死亡则该方输掉了游戏。问你是否能构建出一种无敌的出场方式,无论敌方怎么派出武将,我方都必将取得胜利,如果不能输出No,能的话,输出Yes,另外如果有多种无敌序列,要按名字字典序输出(是指单个单个名字比较,而不是把全部名字压成一个字符串再比较)由于数据规模很小n最大为6,所以其实是个水题,只要暴力枚举两方的全排列 阅读全文
posted @ 2013-03-11 14:51 Titanium 阅读(483) 评论(0) 推荐(0)
摘要:怎么个图论法??这题一读完题一直没有思路,不知道和图论有什么关系,倒是一开始就想到了暴力,但是见数据的规模,怕暴力会超时所以就没写一直歇了两天,没思路去找解题保报告,看了几下,都是暴力求解(和自己当初想的一样都是求lcm作为周期来计数),所以就写了一个暴力,一次成型没有debug过了sample直接丢上uva去,AC了,不过时间也比较糟糕1.100s左右。#include <cstdio>#include <cstring>#define N 1010#define M 15bool killed[N];int c[N];int a[N][M];int n;int ki 阅读全文
posted @ 2012-12-18 19:46 Titanium 阅读(596) 评论(0) 推荐(0)