
算法设计-构造
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 11387 - The 3-Regular Graph(构造)
题目链接:uva 11387 - The 3-Regular Graph题目大意:给出n,表示说有n个点,问说是否可以组成一个所有节点的度数均为3的无向图。解题思路:首先判断说是否可能组成,一条边会导致两个点的度数加1,总度数加2。所以图的总度数一定是偶数,若n为奇数,n*3一定也为奇数,一定不可以。所以偶数的情况就一定是可行的(除了小于等于2),构造方法:节点前后相连,在原创 2014-01-12 17:40:25 · 1986 阅读 · 0 评论 -
Codeforces 449C Jzzhu and Apples(构造)
题目链接:Codeforces 449C Jzzhu and Apples题目大意:Jzzhu从苹果树上获得n个苹果,标号从1~n,现在要将他们以两个为一组卖给商家,要求一组中的两个苹果的编号最大公约数大于1,分的组数尽量多。解题思路:枚举公约数d,只枚举素数,因为合数的可以在更小的素数被枚举。将所有没用过并且编号为d的倍数的苹果拿出来,两两组队,如果个数为奇数,那么就将2d留出来原创 2014-09-24 15:29:00 · 1474 阅读 · 0 评论 -
zoj 3823 Excavator Contest(构造)
题目链接:zoj 3823 Excavator Contest题目大意:一个人开着挖掘机要在N∗N的格子上面移动,要求走完所有的格子,并且转完次数要至少为n∗(n−1)−1次,并且终点和起点必须都在边界上。解题思路:构造,因为终点和起点必须在边界上,进去的同时得留出一条路径出来。奇数偶数奇数的情况分两种(图上两点所代表的正方形构造方式是一样的,即13,9为一原创 2014-10-14 00:04:12 · 2367 阅读 · 2 评论 -
Codeforces 482A Diverse Permutation(构造)
题目链接:Codeforces 482A Diverse Permutation题目大意:给定N和K,即有一个1~N的序列,现在要求找到一个排序,使得说所有的|pi−pi+1|的值有确定K种不同。解题思路:构造,1,K+1,2,K,3,K-1,... K+2,K+3 ... N。#include #include #include using namespace std原创 2014-11-03 09:59:23 · 1457 阅读 · 0 评论 -
hdu 5308 I Wanna Become A 24-Point Master(构造)
题目链接:hdu 5308 I Wanna Become A 24-Point Master#include #include #include using namespace std;int n;int main() { while (~scanf("%d", &n)) { if (n == 1 || n == 2 || n == 3) prin原创 2015-07-28 20:45:23 · 702 阅读 · 0 评论 -
hdu 5302 Connect the Graph(构造)
题目链接:hdu 5302 Connect the Graph当w1或者是b1为奇数时,无解。其他情况下一定可以构造出一条链和多个节点对,只要保证两点之间没有重边就行了。一种间隔1为一对,另一种间隔2为一对。#include #include #include using namespace std;int N;int jump(int p, int k)原创 2015-08-12 22:22:28 · 663 阅读 · 0 评论 -
hdu 5385 The path(最短路+构造)
题目链接:hdu 5385 The path维护一个l,r,l从2开始递增,r从N开始递减,每个距离值l,r至多走一步,并且每次将可以到达的点标记,注意最后最大值只能有一个。#include #include #include #include #include using namespace std;typedef pair pii;const int m原创 2015-08-16 09:21:27 · 824 阅读 · 0 评论 -
hdu 5402 Travelling Salesman Problem(构造)
题目链接:hdu 5402 Travelling Salesman Problem当n和m均为偶数,需要舍掉一个偶数位的格子。#include #include #include using namespace std;const int maxn = 105;const int dir[2][4][2] = { {{0, -1}, {-1, 0}, {1,原创 2015-08-20 00:01:55 · 699 阅读 · 0 评论 -
hdu 5491 The Next(位运算+贪心)
题目链接:hdu 5491 The Next解题思路首先将初始的d+1,然后判断二进制先1的个数是否满足。 如果多了,找到最小的i使得s&2^i=1. 如果少了,找到最小的i使得s&2^i=0. 然后s + 2^i,这样保证了每次增加的值最少。代码#include <cstdio>#include <cstring>#include <algorithm>using namespace s原创 2015-10-01 21:50:37 · 751 阅读 · 0 评论 -
hdu 4671 Backup Plan(构造)
题目链接:hdu 4671 Backup Plan代码#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;typedef pair<int,int> pii;const int maxn = 105;int N, K, G[maxn][maxn], C[max原创 2015-11-06 21:48:39 · 882 阅读 · 0 评论 -
hdu 4781 Assignment For Princess(构造)
题目链接:hdu 4781 Assignment For Princess解题思路将N个点分成三份,集合1到2的边权模3为1,集合2到3的边权模3为2,3到1为0。然后保证每个点出入度至少为1即可。代码#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;cons原创 2015-10-22 19:50:22 · 631 阅读 · 0 评论 -
hdu 4700 Flow (构造)
题目链接:hdu 4700 Flow 解题思路每次取找到权值最小的边,然后根据这条边将点集分成两个部分,保证不同点集的点之间流量为最小权值,同点集之间流量大于最小权值。然后再分别构造这两个集合。代码#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;const原创 2015-11-12 14:46:07 · 753 阅读 · 0 评论 -
zoj 3732 Graph Reconstruction(构造)
题目链接:zoj 3732 Graph Reconstruction解题思路用贪心的方式取构造即可。代码/* hdu4797 */#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef pair<int,int> pii;const int maxn = 105;int N, E,原创 2015-11-14 21:29:49 · 814 阅读 · 0 评论 -
hdu 5559 Frog and String(构造)
题目链接:hdu 5559 Frog and String解题思路n < m:impossiblen = m:用全A构造n > m: k = 1:impossiblek = 2:用 AAAA….(m-8个A) + ABAABB ABAA…k > 3:用 AAAA….(m-3个A) + ABC ABC ABC … 特殊情况n = 8, m = 7, k = 2。 原则上是找到一种构造方原创 2015-11-14 21:27:17 · 1608 阅读 · 2 评论 -
hihoCoder 1257 Snake Carpet(构造)
题目链接:hihoCoder 1257 Snake Carpet代码#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;typedef pair<int,int> pii;char ans[5][100] = { "1 1\n1 1", "1 3\n1 1\n1原创 2015-11-16 15:44:41 · 849 阅读 · 0 评论 -
Codeforces 468A 24 Game(构造)
题目链接:Codeforces 468A 24 Game题目大意:给出n,表示有1~n这n个数,判断能否进n-1次操作获得24.解题思路:4,5的情况可以手动处理出来,然后对于大于4,5的情况可以通过两两相减,形成若干个1.#include #include #include using namespace std;int main () { int n;原创 2014-09-24 20:39:30 · 1679 阅读 · 0 评论 -
Codeforces 459C Pashmak and Buses(构造)
题目链接:Codeforces 459C Pashmak and Buses题目大意:有n个学生,d天,k辆车,每天会到一个不同的地方,即要乘坐一次车,要求每人两个学生在每一天共同乘坐一辆车。个数安排方案。解题思路:每个学生的乘坐方案即使一个长度为d,元素范围1~k的序列,不出现重复即可。dfs处理出方案,方案数足够后跳出递归。#include #include #incl原创 2014-08-16 11:11:42 · 1260 阅读 · 3 评论 -
Codeforces 464A No to Palindromes!(构造)
题目链接:Codeforces 464A No to Palindromes!题目大意:给定n和m,以及一个字符串s,s不存在长度大于2的回文子串,现在要求输出一个字典比s大的字符串,并且说同样不存在长度大于2的回文子串。解题思路:直接去构造即可,从最后一位开始,每次只要考虑该字符是否和前两个字符相同即可。#include #include #include u原创 2014-09-08 16:59:19 · 1795 阅读 · 6 评论 -
Codeforces 388B Fox and Minimal path(构造)
题目链接:Codeforces 388B Fox and Minimal path题目大意:给出k,要求构建一张图,从点1到达点2的最短路径有k条。解题思路:二进制数差分,因为没有要求说节点尽量少,所以直接构造出初始图,当k >= (1#include #include const int N = 105;int g[N][N];inline vo原创 2014-02-08 15:04:31 · 2301 阅读 · 0 评论 -
Codeforces 398C Tree and Array(构造)
题目链接:Codeforces 398C Tree and Array题目大意:给出n,表示有n个节点,每个节点有个值记录在t[i]中,初始为0,现在要求构造出一棵无向的树,既有n-1条边,保证所有点联通,现在每增加一条边u,v,x(假设u解题思路:t = n/2,将t+1到n逐个相连成一条,然后i和t+i相连(1≤i≤t),这样的话为了使得i和i+1满足,只需要修改t+i原创 2014-03-06 14:27:13 · 1504 阅读 · 0 评论 -
Codeforces 417E Square Table(随机算法)
题目链接:Codeforces 417E Square Table题目大意:给出n和m,要求给出一个矩阵,要求每一列每一行的元素的平方总和是一个平方数。解题思路:构造,按照a a a ba a a ba a a bc c c d的方式取构造,然后a,b,c,d的值用随机生成数去枚举,不过我觉得用暴力也是可以的。#include #inc原创 2014-04-19 13:31:44 · 1770 阅读 · 0 评论 -
Codeforces 417C Football(构造)
题目链接:Codeforces 417C Football题目大意:有n支足球队伍进行比赛,每支队伍必须赢k场,任意两支队伍间只能进行一场比赛,问,最少举办多少场比赛可以保证每支队伍获胜k场以上,并给出胜负情况。解题思路:n支队伍,最多进行s=C(n,2)=n*(n-1)/2场比赛,如果s 否则就让每支队伍战胜它后面的k支队伍即可。#include #原创 2014-04-19 13:15:12 · 1246 阅读 · 0 评论 -
hdu 4572 Bottles Arrangement(构造)
题目链接:hdu 4572 Bottles Arrangement题目大意:给定m和n,表示有m种高度的瓶子,每种瓶子n个,现在将n*m个瓶子排列成一个m行n列的矩阵,要求:1,每一列没有相同高度的瓶子;2,每一行相邻的两个瓶子的高度差的绝对值不大于1。然后所有满足条件的矩阵有一个值,即为每一行所有元素之和的最大值。要求构造出一个矩阵,使得该值最小。解题思路:我是从最大原创 2014-04-09 21:13:48 · 1293 阅读 · 0 评论 -
Codeforces 432E Square Tiling(构造+贪心)
题目连接:Codeforces 432E Square Tiling题目大意:给出一个n∗m的矩阵,要求对该矩阵进行上色,用大写字母,但是每次上色的区域必须是正方形,不求相邻的上色区域不能有相同的颜色,求字典序最小的方案(字典序比较,从左至右,从上到下)解题思路:用贪心的思想去构造矩阵,因为字典序的优先级为左至右,以及上到下,所以我们每次对于一个未上色点x,y,考虑最少要放到的长度原创 2014-05-18 11:27:13 · 1739 阅读 · 0 评论 -
Codeforces 414A Mashmokh and Numbers(构造)
题目链接:Codeforces 414A Mashmokh and Numbers题目大意:给出n和k,表示说在一个长度为n的序列中,每次从头取走了个数,得分为两个数的gcd,问说最后得分刚好为k的序列是否存在,给出序列,不存在输出-1.解题思路:除了第一对以外,其他的得分均为1,然后第一对的得分为k - 后面得的分数。n为1的时候特殊考虑。#include原创 2014-04-12 19:04:22 · 1108 阅读 · 0 评论 -
bnu 34981 A Matrix(构造)
题目链接:bnu 34981 A Matrix题目大意:假定有一序列,按照题目中给定的算法构造出一张二维表,现在题目给定一张二维表,要求求出序列,要求序列的倒置的字典序最大。解题思路:构造,对于每一层来说,一定是递增的,根据算法可以得出;并且一个数被换到下一行,一定是因为有序列后面有小于自己的数,所以每一层从最后一个数开始匹配,找到上一层中比自己小的最大数字,假定是该数导致当前数被原创 2014-06-25 19:40:01 · 1086 阅读 · 0 评论 -
uva 269 - Counting Patterns(构造)
uva 269 - Counting Patterns题目大意:给出n和k,要求找出满足的序列,要求为n元组,由-k到k组成,并且和为0。求出所有满足的元组个数,并且对于左移,右移,水平翻转,每个元素取相反数相同的视为一种,用字典序最大的表示,输出按照字典序最小的输出。解题思路:因为表示的时候按照字典序最大的表示,一开始枚举开头的位置,那么在后面的数的绝对值就不会大于该数。最后原创 2014-07-21 14:49:24 · 1233 阅读 · 0 评论 -
Codeforces 453C Little Pony and Summer Sun Celebration(构造)
题目链接:Codeforces 453 Little Pony and Summer Sun Celebration题目大意:n个节点,m条边,然后m行给定边,最后一行表示每个节点需要进过的次数为奇数次还是偶数次。解题思路:构造,任意从一个奇数点开始(统一森林的处理),然后每次向下遍历没有经过的节点,并且回溯,每次回溯都要判断一下刚才走过的点满不满足条件,不满足的话就再走一次。最后原创 2014-08-02 22:43:31 · 1915 阅读 · 0 评论 -
Codeforces 460D Little Victor and Set(构造)
题目链接:Codeforces 460D Little Victor and Set题目大意:给定范围l,r,选小于k个数,使得这些数的亦或和最小。解题思路:加入k为偶数,那么kXOR(k+1)=1根据这个可以处理掉k≠3的所有情况。对于k=3的情况,找到一个大于l的2k,如果满足2k+1≤r,那么就可以构造出三个数亦或值为0的情况。#include #include原创 2014-08-25 00:02:33 · 1662 阅读 · 0 评论 -
hdu 4982 Goffi and Squary Partition(构造)
题目链接:hdu 4982 Goffi and Squary Partition题目大意:给定n和k,求一个包含k个不相同正整数的集合,要求元素之和为n,并且其中k-1的元素的和为完全平方数。解题思路:枚举平方数然后判断剩下的是否能组成即可。尽量用小的数去构造。#include #include #include #include using namespace st原创 2014-08-24 23:48:56 · 969 阅读 · 9 评论 -
hdu 4731 Minimum palindrome(构造)
题目链接:hdu 4731 Minimum palindrome题目大意:给定n和m,m表示m种字符。求一个长度为n字典序最小的字符串,满足存在的回文子串长度尽量短。解题思路:构造。m = 1:那么不管n为多少,肯定都用a构造m > 2: 用abcabc...构造出来的串回文子串长度最多为1m = 2:对于n #include #include #include u原创 2014-09-08 13:54:05 · 982 阅读 · 0 评论 -
zoj 3810 A Volcanic Island(构造)
题目链接:zoj 3810 A Volcanic Island题目大意:给定n,要求用n块面积为n的拼图铺满n∗n的矩阵,任意两块拼图形状不能相同(包括旋转和镜像),并且n块拼图只能有4中颜色,相邻两块拼图颜色不能相同。解题思路:构造,n = 2,3,4时是不存在的。然后对于n >= 5的直接构造,具体看代码。注意这种构造方式构造6的时候会出现相同的拼图,所以特判。#inclu原创 2014-09-08 14:18:59 · 1340 阅读 · 0 评论 -
hdu 5573 Binary Tree(构造)
题目链接:hdu 5573 Binary Tree代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef unsigned long long ll;int main () { int cas; scanf("%d", &cas); for (int kca原创 2015-12-03 20:57:54 · 910 阅读 · 0 评论