08 2017 档案

摘要:第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0)。每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K。按从小到大的顺序输出所有合法的N位号码,每个号码占一行。 思路:dfs #include<iostream> #include<cstdio> #include<algo 阅读全文
posted @ 2017-08-29 23:52 demianzhang 阅读(181) 评论(0) 推荐(0) 编辑
摘要:数位dp,主要用来解决统计满足某类特殊关系或有某些特点的区间内的数的个数,它是按位来进行计数统计的,可以保存子状态,速度较快。数位dp做多了后,套路基本上都差不多,关键把要保存的状态给抽象出来,保存下来。 简介: 顾名思义,所谓的数位DP就是按照数字的个,十,百,千……位数进行的DP。数位DP的题目 阅读全文
posted @ 2017-08-28 00:57 demianzhang 阅读(274) 评论(0) 推荐(0) 编辑
摘要:题意: 思路: 对于每个幂次方,将幂指数的二进制形式表示,从右到左移位,每次底数自乘,循环内每步取模。 #include <cstdio> typedef long long LL; LL Ksm(LL a, LL b, LL p) { LL ans = 1; while(b) { if(b & 1 阅读全文
posted @ 2017-08-22 14:52 demianzhang 阅读(250) 评论(0) 推荐(0) 编辑
摘要:题意:给出a和p,判断p是否为合数,且满足a^p是否与a模p同余,即a^p%p与a是否相等 算法:筛法打1万的素数表预判p。再将幂指数的二进制形式表示,从右到左移位,每次底数自乘。 #include <cstdio> #include <cstring> typedef long long LL; 阅读全文
posted @ 2017-08-22 14:47 demianzhang 阅读(300) 评论(0) 推荐(0) 编辑
摘要:题意: H_Number 是一个比4的倍数多1的数,即4n + 1。H_Number 分为 H_Prime 和 H_Comosite。其中 H_Prime 仅能由1×h组成,而 H_Composite 除了1和h可有多个因子。H_Semi_Prime 表示仅有两个 H_Prime 因子(除了1和本身 阅读全文
posted @ 2017-08-21 23:33 demianzhang 阅读(289) 评论(0) 推荐(0) 编辑
摘要:题意:一条整数链,要求相邻两数前一个整除后一个。给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量。 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以某素因子,所以链的数量即为这些因子不全相异的全排列数:A!/(a1!a2!a3!..) #inclu 阅读全文
posted @ 2017-08-21 22:59 demianzhang 阅读(453) 评论(0) 推荐(0) 编辑
摘要:题意:给两个四位素数a和b,求从a变换到b的最少次数,每次变换只能变换一个数字并且变换的过程必须也是素数。 思路:先打表求出四位长度的所有素数,然后利用BFS求解。从a状态入队,然后从个位往千位的顺序枚举下一个素数,入队,直到状态为b为止。 #include <cstdio> #include <q 阅读全文
posted @ 2017-08-21 21:27 demianzhang 阅读(583) 评论(0) 推荐(0) 编辑
摘要:题意:给出n,求不大于n的素数有多少个。 算法:先用线性时间复杂度的筛法打素数表,对于每个输入统计不超过的素数个数。 #include <cstdio> int p[100010]; bool np[1000010]; int cntp; void SievePrime(int n) { for ( 阅读全文
posted @ 2017-08-21 18:08 demianzhang 阅读(309) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个循环小数,化成分数,要求分数的分母最小。 思路:暴力搜一遍循环节 把循环小数化分数步骤: 纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,分母各位上的数都是9,9的个数与循环节的位数相同。能约分的要约分。 例: 这个分数的分子是第二个循环节以前的小数部分组成的数与 阅读全文
posted @ 2017-08-21 17:33 demianzhang 阅读(405) 评论(0) 推荐(0) 编辑
摘要:题意:求两数最大公约数和最小公倍数。 类型:辗转相除法 算法:gcd(a,b)=gcd(b,a%b),lcm(a,b)=a*b/gcd(a,b)。 #include <cstdio> #include <iostream> using namespace std; int gcd(int a, in 阅读全文
posted @ 2017-08-21 10:47 demianzhang 阅读(157) 评论(0) 推荐(0) 编辑
摘要:题意:从待选的路里面选出若干将所有点连通,求选出的边里最长边的最小值。 算法:要使得树的最长边最小,那么每次确定的边都应是待选边里最小的,即最小生成树。对应Kruskal算法。 #include <cstdio> #include <iostream> #include <algorithm> #i 阅读全文
posted @ 2017-08-21 10:35 demianzhang 阅读(308) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个图,去除每条边的花费为边的长度,求用最少的花费去除部分边使得图中无圈。 思路:先将所有的边长加起来,然后减去最大生成树,即得出最小需要破坏的篱笆长度。 #include <cstdio> #include <iostream> #include <algorithm> #include 阅读全文
posted @ 2017-08-20 22:22 demianzhang 阅读(280) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个图,求出其中的最大生成树= =如果无法产生树,输出-1。 思路:将边权降序再Kruskal,再检查一下是否只有一棵树即可,即根节点只有一个 #include <cstdio> #include <iostream> #include <algorithm> #include <cstr 阅读全文
posted @ 2017-08-20 16:37 demianzhang 阅读(204) 评论(0) 推荐(0) 编辑
摘要:题意:FJ想连接光纤在各个农场以便网络普及,现给出一些连接关系(给出邻接矩阵),从中选出部分边,使得整个图连通。求边的最小总花费。 思路:裸的最小生成树,本题为稠密图,Prim算法求最小生成树更优,复杂度O(n^2) prim: #include <cstdio> #include <iostrea 阅读全文
posted @ 2017-08-19 15:11 demianzhang 阅读(342) 评论(0) 推荐(0) 编辑
摘要:题意: 快递到了:你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处。而且岛上只有一条船,下次想走水路还是得回到X处才行;两个镇子之间可能有两条以上的水路或旱路;邮递员 阅读全文
posted @ 2017-08-19 14:23 demianzhang 阅读(428) 评论(0) 推荐(0) 编辑
摘要:某国王需要修路,王国有一个首都和多个城市,需要修路。已经有修路计划了,但是修路费用太高。 为了减少修路费用,国王决定从计划中去掉一些路,但是需要满足一下两点: 思路: 在Dijkstra找最短路的时候,就记录一下费用 if(d[e.to] > d[v] + e.dist) { ... prev_mi 阅读全文
posted @ 2017-08-19 11:01 demianzhang 阅读(374) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个单向带权图和一个点s,求点u,u到s的最短路径和s到u的最短路径之和最大。 思路: 对于s到任意点的最短路,直接dijkstra可以求出。 对于任意点到s的最短路,将所有边反向然后求一次最短路。容易证明,求出的s到任意点v的最短路s-->v就是原来没有反向的图的v-->s的最短路。 所 阅读全文
posted @ 2017-08-18 15:25 demianzhang 阅读(162) 评论(0) 推荐(0) 编辑
摘要:题意:John的农场里field块地,path条路连接两块地,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。 思路: 这题就是判断存不存在负环回路。 前M条是双向边,后面的W是单向的负边。 为了防止出 阅读全文
posted @ 2017-08-18 13:52 demianzhang 阅读(568) 评论(0) 推荐(0) 编辑
摘要:题意:如果两头牛在同一部电影中出现过,那么这两头牛的度就为1, 如果这两头牛a,b没有在同一部电影中出现过,但a,b分别与c在同一部电影中出现过,那么a,b的度为2。以此类推,a与b之间有n头媒介牛,那么a,b的度为n+1。 给出m部电影,每一部给出牛的个数,和牛的编号。问那一头到其他每头牛的度数平 阅读全文
posted @ 2017-08-18 11:22 demianzhang 阅读(400) 评论(0) 推荐(0) 编辑
摘要:题意: 求某一个办公室 到其他所有办公室的 总距离最短 办公室数 不超过10 输入:多组输入,每组第一行为n (1 ≤ n ≤ 45),接下来n行是 (x, y, d),x到y的距离是d输出:办公室号 和 最短距离 #include <iostream> #include <stdio.h> #in 阅读全文
posted @ 2017-08-17 22:20 demianzhang 阅读(339) 评论(0) 推荐(0) 编辑
摘要:题意: 给你一颗N个节点的树,节点编号1到N。1总是节点的根。现在有两种操作: 现在给一系列操作,求出所有Q操作结果的和。 思路: 最坏情况下为整棵树成为一条链,单纯使用并查集(无压缩)查询复杂度最坏1e10。单纯使用并查集也能过。 正解应该是将查询存下来,存下每次Q操作的查询时间和查询结点,用qt 阅读全文
posted @ 2017-08-17 20:59 demianzhang 阅读(538) 评论(0) 推荐(1) 编辑
摘要:题意:有N名来自两个帮派的坏蛋,已知一些坏蛋两两不属于同一帮派,求判断给定两个坏蛋是否属于同一帮派。 思路: 解法一: 编号划分 定义并查集为:并查集里的元素i-x表示i属于帮派x,同一个并查集的元素同时成立 可见所有元素个数为2 * N,如果i表示属于帮派A,那么i + N表示属于帮派B,每次输入 阅读全文
posted @ 2017-08-17 13:39 demianzhang 阅读(217) 评论(0) 推荐(0) 编辑
摘要:转自:jihite 构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void) //默认无参数构造函数 A( 阅读全文
posted @ 2017-08-17 00:06 demianzhang 阅读(215) 评论(0) 推荐(0) 编辑
摘要:题意: 有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能。若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑。给出所有电脑的坐标位置,对其进行两种可能的操作,O x表示修复第x台,S x y表示判断x y之间能否通信,若能输出SUCC 阅读全文
posted @ 2017-08-16 22:25 demianzhang 阅读(377) 评论(0) 推荐(0) 编辑
摘要:题意:从C头奶牛中招收N(奇数)头。它们分别得分score_i,需要资助学费aid_i。希望新生所需资助不超过F,同时得分中位数最高。求此中位数。 思路: 先将奶牛排序,考虑每个奶牛作为中位数时,比它分数低(前面的)的那群牛的学费总和lower_i,后面的总和upper_i。然后从分数高往分数低扫描 阅读全文
posted @ 2017-08-16 21:42 demianzhang 阅读(287) 评论(0) 推荐(0) 编辑
摘要:题意:奶牛美容:有C头奶牛日光浴,每头奶牛分别需要minSPF_i和maxSPF_i单位强度之间的阳光。现有L种防晒霜,分别能使阳光强度稳定为SPF_i,其瓶数为cover_i。求最多满足多少头奶牛 思路: 将奶牛按照阳光强度的最小值从小到大排序。将防晒霜也按照能固定的阳光强度从小到大排序。 从最小 阅读全文
posted @ 2017-08-16 15:19 demianzhang 阅读(214) 评论(0) 推荐(0) 编辑
摘要:题意:给你N(N<=100)只牛,每只牛有一个智慧值Si和一个活泼值Fi,现在要从中找出一些来,使得这些牛智慧值总和S与活泼值总和F之和最大,且F和S均为正。Si和Fi范围在-1000到1000之间。 思路: 可以把S当体积,F当价值做01背包。但是注意是S可为负,所以整体加100000,然后要注意 阅读全文
posted @ 2017-08-16 14:36 demianzhang 阅读(524) 评论(0) 推荐(0) 编辑
摘要:题意: 有一头牛想要建一座石塔,他有很多不同类型的石块。每类石块有三个属性:1. (h): 石块的高度;2. (a): 石块能达到的最大高度;3. (c): 石块的数量 思路: 采用多重背包。注意点:在做背包前需要对石块能到达的最大高度(a)进行排序,防止石塔到了一定高度后,剩下的一些石块所能达到的 阅读全文
posted @ 2017-08-16 13:48 demianzhang 阅读(291) 评论(0) 推荐(0) 编辑
摘要:题意:农夫约翰想修一条尽量平缓的路,路的每一段海拔是A_i,修理后是B_i,花费|A_i – B_i|,求最小花费。 思路:平缓的意思是海拔单调增或单调减(非严格),主要目的大概是让我们做出“到底是增好还是减好”选择。 用DP的话可以完全忽略这个选择: dp[i][j] := 前i + 1个数变成单 阅读全文
posted @ 2017-08-16 13:01 demianzhang 阅读(438) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个长为n(n<=40000)的整数序列, 要你求出该序列的最长上升子序列LIS. 思路:要求(nlogn)解法 令g[i]==x表示当前遍历到的长度为i的所有最长上升子序列中的最小序列末尾值为x.(如果到目前为止, 根本不存在长i的上升序列, 那么x==INF无穷大) 假设当前遍历到了第 阅读全文
posted @ 2017-08-16 11:26 demianzhang 阅读(246) 评论(0) 推荐(0) 编辑
摘要:题意: 有一些木棍,每个有长度和重量,要求把这些木棍排成若干两个属性值均不下降的序列。问至少要分为多少个序列。且要保证排出来的子序列数最少。 思路: ( 9 , 4 ) ,( 2 , 5 ) ,( 1 , 2 ) ,( 5 , 3 ),( 4 , 1 )可以排成这样 ( 4 , 1 ) , ( 5 阅读全文
posted @ 2017-08-16 00:00 demianzhang 阅读(294) 评论(0) 推荐(0) 编辑
摘要:题意: 给出两个数,n,m,问m以内的整数有多少种组成n的方法完全背包+大数划分 思路: dp[i][j] := 用i种价格配出金额j的方案数。 那么dp[i][0] = 1,使用任何价格配出金额0的方案个数都是1(什么都不用)。 递推关系式: 实际上是完全背包问题,只是状态转移方程形式有所不同,不 阅读全文
posted @ 2017-08-15 23:25 demianzhang 阅读(470) 评论(0) 推荐(0) 编辑
摘要:题意:给出T种数字。每种各有N[i]个。然后用这些数字构成一些序列, 问x长度到y长度的序列有多少种 思路: dp[i][j] 表示前i种数字构成长度为j的序列有多少种。 dp[i][j] = sigma(dp[i - 1][j - k]) k的范围是0~N[i] //前i-1个家族配成j-k的集合 阅读全文
posted @ 2017-08-15 20:13 demianzhang 阅读(298) 评论(0) 推荐(0) 编辑
摘要:题意:有n种面额的硬币。面额、个数分别为A_i、C_i,求最多能搭配出几种不超过m的金额? 思路:dp[j]就是总数为j的价值是否已经有了这种方法,如果现在没有,那么我们就一个个硬币去尝试直到有,这种价值方法有了的话,那么就是总方法数加1。多重背包可行性问题 传统多重背包三重循环会超时,因为只考虑是 阅读全文
posted @ 2017-08-14 00:42 demianzhang 阅读(542) 评论(0) 推荐(0) 编辑
摘要:题意:奶牛Bessie在0~N时间段产奶。农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e。奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量。思路:一定是对时间段dp,然后就是两个for的事了。只要前面能满足条件的状态就可以转移过来,然后取最大,不过要先 阅读全文
posted @ 2017-08-07 13:16 demianzhang 阅读(385) 评论(0) 推荐(0) 编辑
摘要:题意:2棵苹果树在T分钟内每分钟随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果。思路:不妨按时间来思考,一给定时刻i,转移次数已知为j, 则它只能由两个状态转移而来。即上一时刻同一棵树或上一时刻不同的树 dp[i][j] = max(dp[i- 阅读全文
posted @ 2017-08-07 13:12 demianzhang 阅读(301) 评论(0) 推荐(0) 编辑
摘要:题意:把n拆分为2的幂相加的形式,问有多少种拆分方法。 分析:dp,任何dp一定要注意各个状态来源不能有重复情况。根据奇偶分两种情况,如果n是奇数则与n-1的情况相同。如果n是偶数则还可以分为两种情况,有1和没有1。这样分可以保证两种情况没有重复,对于有1的情况可以直接拆出两个1(拆一个也行,但变成 阅读全文
posted @ 2017-08-07 13:09 demianzhang 阅读(239) 评论(0) 推荐(0) 编辑
摘要:题意:对一个字符串进行插入删除等操作使其变成一个回文串,但是对于每个字符的操作消耗是不同的。求最小消耗。 思路: 我们定义dp [ i ] [ j ] 为区间 i 到 j 变成回文的最小代价。那么对于dp【i】【j】有三种情况首先:对于一个串如果s【i】==s【j】,那么dp【i】【j】=dp【i+ 阅读全文
posted @ 2017-08-07 09:34 demianzhang 阅读(270) 评论(0) 推荐(0) 编辑
摘要:题意:有n个牛在FJ的花园乱吃。所以FJ要赶他们回牛棚。每个牛在被赶走之前每秒吃Di个花朵。赶它回去FJ来回要花的总时间是Ti×2。在被赶走的过程中,被赶走的牛就不能乱吃 思路: 先赶走破坏力大的牛假设序列都由二元组组成,二元组是由T和D组成,那么对一个序列有相邻的两头牛是这样的.......... 阅读全文
posted @ 2017-08-07 00:55 demianzhang 阅读(227) 评论(0) 推荐(0) 编辑
摘要:题意:科学家发现一种奇怪的东西,他们有重量weight,如果他们碰在一起,总重变成2*sqrt(m1*m2)。要求出最终的重量的最小值。 思路:每次选取质量m最大的两个stripy进行碰撞结合,能够得到最小的质量。所有只要维护一个优先队列就可以了 #include <iostream> #inclu 阅读全文
posted @ 2017-08-07 00:42 demianzhang 阅读(313) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示