思维
文章平均质量分 71
Ezereal
这个作者很懒,什么都没留下…
展开
-
POJ 1064 Cable master
题意:n条绳子,长度分别为Li,如果从中截取K条相同的绳子,每条最长是多少(两位小数)?题解:题解很巧妙,直接二分搜索,从0到INF二分循环100遍,便可以达到精度要求#include#include#include#include#include#include #include #include #include #include #include #define原创 2015-08-27 18:03:31 · 310 阅读 · 0 评论 -
UVA 10881 - Piotr‘s Ants
UVa 10881题目大意:一根长L厘米的木棍上有n只蚂蚁,每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序给出每只蚂蚁T秒后的位置后朝向。 所有蚂蚁顺序始终不变,因为相撞就会改变方向,也就是蚂蚁始终在自己的那段小区间活动,而对于蚂蚁相撞返回问题,可以直接看作是蚂蚁相遇直接穿过,这样直接在输入时预处理就ok了,思路很强大啊!!代码见蓝书原创 2015-08-13 08:40:20 · 495 阅读 · 0 评论 -
POJ 2431 Expedition
题目大意:有n个加油站,每个加油站的加油的油量有限,距离终点都有一个距离。一个卡车的油箱无限,没走一个单元要消耗一单元的油,问卡车到达终点的最少加多少次油。题解:可以认为,在到达加油站时,就获得一次在之后任何时候都可以加Bi单位汽油的权利。由此,可以利用优先队列,放置经过的加油站可加的Bi单位汽油,需要时取出队头元素即可完成贪心贴一份别人的代码。。。原创 2015-08-15 16:47:01 · 414 阅读 · 0 评论 -
LA 3708 Graveyard
LA 3708在一个周长为 10000 的圆上等距分布着 n 个雕塑。现在又有 m 个新雕塑加入(位置可以随意摆放),希望所有 n + m 个雕塑能在圆周上均匀分布。这就需要移动一些原有的雕塑。要求 n 个雕塑移动的总距离最小。乍一看这道题没有思路,这时候就只能借助于蓝书了,书上巧妙的将坐标缩小到1,在扩大n+m倍,这就保证最后所有n+m个点就是按照 0,1,2,3.....坐标分布原创 2015-08-13 08:36:35 · 776 阅读 · 0 评论 -
UVA 10795 A Different Task
uva 10795 题意就是在汉诺塔基础上加上起始和终止状态,求需要的步数。 一开始让我写这道题,我是不会的。。。不过看了书上讲解,还是似懂非懂,利用一个函数f(P,i,final),P数组是各盘子初始柱子编号,i代表将1,2,3....i全部移到fianl柱子所需要的步数,呃,想清楚这个函数,然后递归求解就ok了,递归方程是f(P,i,final) = f(P,i-1,6-P原创 2015-08-13 15:44:57 · 481 阅读 · 0 评论 -
HDU 5414 CRB and string
题意:给定两个字符串,问能否在第一个字符串中某个字母后面加入一个字母(不能相同)(这个操作可以操作多次),使其变成第二个字符串。题解:做的时候没有意识到对于abc adddbc这样的样例,可以在a后面插入3遍d,使改变符合题意,结果没A掉,真是可惜了。。。#include#include#include#include#include#include #include #i原创 2015-08-21 15:39:00 · 366 阅读 · 0 评论 -
hdu 1113 Word Amalgamation
题意:第一个XXXXXX前面的是字典,之后的是查询的关键词语,目标是找到字典中与其相同字母构成的字符串。题解:不得不说,大神就是大神。。。。#include #include #include #include using namespace std;map str;string s, t;int main(){ while(cin >> s && s != "XXX原创 2015-09-11 18:44:43 · 474 阅读 · 0 评论 -
hdu 1111 Secret Code
题意:给定复数x和复数b,求序列ai使得x=a0+a1*b+a2*b^2+...an*b^n。其中nai>=0,|b|>1.题解:先要知道复数的运算方法,复数的模:|Z|=|a+bi|=sqrt(a*a+b*b);复数除法:令t=c*c+d*d,(a+bi)/(c+di)=(ac+bd)/t+(bc-ad)/ti。接着就是化简公式了X=a0+(a1+(a2+...)*b)*b。深搜枚举a0原创 2015-09-11 18:01:44 · 573 阅读 · 0 评论 -
hdu 1124 Factorial
题意:求n!中0的个数题解:1、两数相乘产生0,只会是2和5相乘。又由于在分解质因数时小的质数的幂次一定不小于大的质数的幂次大,所以a>=c。故解决该题转化成找出N!中5的幂次。2、如何找出5的幂次呢?举例说明:N=26,阶乘中包含因数5、10、15、20、25,可知5的幂次为6。5=5*1,10=5*2,15=5*5,20=5*4,25=5*5,求解时用26/5=5,原创 2015-09-13 16:45:02 · 343 阅读 · 0 评论 -
UVa 10827 - Maximum sum on a torus
题意:这道题是求最大子矩阵和的加强版,原矩阵是一个上下左右都可以串通的矩阵环;题解:原方法是将原矩阵复制为四个,枚举所求最大子矩阵在第一个矩阵中的左上角,再通过动态规划的方法求出长宽不大于N的最大子矩阵,各种枚举情况中的最大和即为所求解。#include#include#include#include#include#include #include #i原创 2015-09-24 11:24:06 · 350 阅读 · 0 评论 -
UVA 10391 - Compound Words
题意:给出一系列单词,查询是否存在单词由另外两个单词构成题解:映射保存单词是否出现#include#include#include#include#include#include #include #include #include #include #include #define INF 0x3f3f3f3f#define maxn 130100#define原创 2015-09-25 14:25:16 · 327 阅读 · 0 评论 -
Coderforce #332 C题
有一些沙子堆的城堡,现让你给这些城堡分成若干组,使得每一组的城堡是连续的,每一个城堡都必须在一个组里,且对每一组升序排序后,所有的沙堡都排好了序,问最多可分几组? 比赛时我是这么想的: 如果[i, j]可以被分为一组,那么将原序列排好序后,[i, j]上每一个数的个数应和未排序时[i, j]上每一个数的个数相同,例如样例2: 未排序:2 1 3 2原创 2015-11-24 14:32:16 · 398 阅读 · 0 评论 -
Coderforce #332 D. Spongebob and Squares
题意给你x,然后让你找有多少个n*m的矩形,可以由x个相同的多边形组成题解:数学题,这道题实际上是问,f(n,m) = sigma(k=1,k=min(n,m))(n-k+1)*(m-k+1)=x的解有多少个化简之后,我们可以得到f(n,m) = n^2m+n^2+n*m+n-(n+1)*n/2*(n+m+2)+n*(n+1)*(2n+1)/6这个式子是一个原创 2015-11-24 23:01:30 · 424 阅读 · 0 评论 -
hdu 4353
先简单说说这道题的题意吧,题目讲的大概是个挖金矿的故事,首先分别给出n个普通点(这些点是你可以自己选择的用来圈金矿的点),以及m个金矿所在点。你所需要计算的,就是从n中任意选择x个点(3好了,题目的要求是输出最高的性价比,那么怎么得到这个性价比呢?首先3000MS的时间虽然足够你暴力的了,但并不意味着真的足够随便暴力枚举,尤其是n的最大取值是200。200个点所能组成的多边形数目是很可怕的原创 2015-11-02 22:01:09 · 392 阅读 · 0 评论 -
poj 3279 Fliptile ★
大意:一个m*n的01矩阵,每次点击(x,y),那么她的上下左右以及本身就会0变1,1变0,问把矩阵变成全0的,最小需要点击多少步。想法:枚举第一行的所有可能,对于每种可能找出最优解。嗯,太懒了,就到网上找了一份,这个代码写的不错。#include#include#includeusing namespace std;#define INF 300原创 2016-02-04 14:35:09 · 667 阅读 · 0 评论 -
Codeforces 292D (并查集巧妙运用)
题意:一个无向图,给出m条边,有k次询问,每次询问将第l到r条边暂时删去,求这时候有多少个连通分量。思路;首先预处理,分别从前往后和从后往前合并,从前往后的并查集用s[i]表示,代表从第1条边到第i条边的并查集,从后往前用l[i]表示,代表从第i条边到第m条边的并查集;每次询问,要将两个并查集合并,然后再求出连通分量的个数。#include #include #include原创 2016-03-17 11:23:49 · 1180 阅读 · 0 评论 -
Codeforces 354C. Vasya and Beautiful (★)
题目大意:给出一个数组,每个元素最多减少k,问能够调整出的整个序列的最大的gcd是多少。题目分析:容易想到我们可能得到的答案的上限就是maxi=1na[i][Math Processing Error].因为通过减k,一定能够调整为k+1的倍数,所以下限是k+1如果枚举答案,最坏依旧要枚举n次,所以我们如何能够快速判断当前答案是否正确呢?我们可以知道每个数一原创 2016-03-05 16:42:00 · 601 阅读 · 0 评论 -
hdu 4722 Good Numbers(规律题)
【题意】: 找GoodNumbers一个数N,如果它每一个位数字之和可以整除10,那么它就是GoodNumbers,比如451就是一个4+5+1=10,求[A,B]之间这样的数的个数 【题解】: 先写一个暴力代码用来找规律 发现: 0-10 1 0-100 10 0-1000 100原创 2016-03-20 17:25:44 · 346 阅读 · 0 评论 -
CodeForces 417E (构造)
题意:要求构造一个矩阵,使得每行每列的平方和仍为一个平方数题解:cf的官方题解:If n = 1, then take [1].If n = 2, then take [3, 4].If n is even, then take .If n is odd, then take .代码如下:#include #include #include #includ原创 2016-03-21 19:30:46 · 438 阅读 · 0 评论 -
CodeForce 377 A mazes (逆向思维)
题意:给一个n*m的矩阵,#代表墙,.代表通路,给一个k值,代表需要你将矩阵中k个通路改为X,但是要保证剩下的点依然联通,然后输出改变有的矩阵。分析:因为原图是连通的,我们队原图进行递归深搜,从深搜树的底部开始往上删除结点,直至k等于0,这样既达到了删除k个节点也保证了剩余的节点连续。#include #include #include #include #原创 2016-03-12 17:50:14 · 505 阅读 · 0 评论 -
POJ 3252 Round Numbers(数学问题)
Round Numbers 就是一个表示成二进制的时候0比1多或者相等的正数,注意是正数,所以0就肯定不是了。 题目是给定一个区间,问在这个区间上的Round Numbers有多少个? 首先是求出小于等于n的Round Numbers有多少个。 我先举个例子来先说明,再来说一般方法。 比如: 22 = 10110b 如果要求原创 2016-03-25 16:11:31 · 266 阅读 · 0 评论 -
codeforces 351A A. Jeff and Rounding(★)
题目大意:给出2*n个数,n个向上取整,n个向下取整,求新的数的和与原始的数的和的最小差距。题目分析:机智的人会发现,先对所有的数的小数部分取和,然后如果出现一个向上取整的,那么sum的变化一定是1,所以只和向上取整的数的个数有关系,而向上取整和向下取整的个数已经确定,只有存在小数部分是0的情况的时候,值会不同,因为它转换为向上取整和向下取整的值是不变的。所以做法是,求原创 2016-03-27 17:38:08 · 1052 阅读 · 0 评论 -
codeforces 118D Caesar's Legions (好题)
题意: 有n1个骑兵,n2个步兵,排成一列。 求满足下列条件的排列数。 1)连续的骑兵不超过k1 2)连续的步兵不超过k2 思路: 使用状态dp【i】【j】【k】,i,j:步兵,骑兵个数 k:0是步兵,1是骑兵状态方程:for(int k = 1; k dp[i][j][0] = (dp[i][j][0] + dp[i-k][j原创 2016-03-27 19:31:44 · 1142 阅读 · 0 评论 -
CodeForces 332B Maximum Absurdity
题目大意:给出一个序列,让找出不互相覆盖的两个长度为k的段,问在两个段的权值和最大的情况下,按照左边段的左端点排序,右边段的左端点作为第二关键字排序,得到的第一个答案。题目分析:dp:dp1[maxn],dp2[maxn]; dp1【i】表示前i项连续k段最大值,dp2【i】表示后n-i项连续k段最大值,然后做一次循环就好#include #i原创 2016-03-27 18:58:00 · 521 阅读 · 0 评论 -
Codeforces Round #334 (Div. 2) C. Alternative Thinking(脑洞)
题意:翻转连续字串,使得‘10101....'子串最长。思路:乍一看是dp,其实不用。翻的子串的不相邻长度是不变的。因此只需找'11'和'00'就可以了。由于只有字串边界有影响,因此最多增长2,且不会比原串小。#include #include #include #include #include #include #include #include #includ原创 2016-04-30 16:08:32 · 343 阅读 · 0 评论 -
Codeforces Round #335 (Div. 2)C. Sorting Railway Cars 代码巧妙!!!
题意:给你1-n的一个排列然后你的操作是可以把一个数放到结尾或者首部然后问你最少多少次操作,可以将这个排列变成递增的题解:求最长增长子序列且增长差距为1的的,然后n-长度就是答案求最长增长子序列且增长差距为1的的代码很巧妙。。#include <cstdio>#include <iostream>#include <cst...原创 2016-05-01 14:24:21 · 474 阅读 · 0 评论 -
Codeforces Round 335 (Div 2) D. Lazy Student【构造 脑洞 最小生成树】
【题意】 这题也是十分有趣的。 给你一个图,图上有n(1e5)个结点,m(1e5范围且n-1 我们现在,依次告诉你这m条边的—— (长度,是否为最小生成树上选取的边) 让你构造一个图,还原这m条边的可能连接关系。 或者判定这样的图不存在并输出-1 【类型】 构造 脑洞 最小生成树 【分析】 这题还是要借助最小生成树的相关知识的。 最小生成树是每次选边权最小的边,然后如果不存在环,就选取。 于原创 2016-05-01 15:50:43 · 428 阅读 · 0 评论 -
Zoj 3870 Team Formation(异或运算)
题意:给出n个数,每次选2个数,问一共有多少种选法使得选出的这两个数异或后的值,这两个数中的最大值还要大。分析:异或运算:1^1=0, 1^0=1, 0^1=1, 0^0=0。对于一个数,如果我们把x的二进制表示中最高位的0变成1,0前面的都不变,那么得到的这个新值肯定比x大。即:如果x的第i位为1(i为x的最高位的1所在位置),y的第i位为0(i不是y的最高位所在位置),那么z=原创 2016-04-18 18:14:35 · 305 阅读 · 0 评论 -
Educational Codeforces Round 4 D. The Union of k-Segments(★)
题意:给定n个区间,问你被覆盖至少k次的区间最少有多少个,并输出.思路十分简洁,一个区间若被覆盖k次,则在这个区间前至少要出现k个线段的起点,且出现的起点减去终点数量不能小于k,这样排下序,线段起点+1,终点-1,判断下是否大于k一遍遍历下来就出答案了。#include #include #include #include #include #include #原创 2016-05-18 19:57:21 · 1537 阅读 · 0 评论 -
Codeforces Round #337 (Div. 2) C. Harmony Analysis (构造)
题意:给 k,构造2^k * 2^k的图, 使得任意两行 相乘相加值为0题解:对于一个 满足了条件的 正方形,想要得到将其边长翻倍的图形 我们将它复制接右边,接到正下方,再取反接到斜对角,就是了; 根据这个我们从1*1得到 2*2得到 4*4---到答案#include #include #include #include #include#incl原创 2016-05-19 09:44:32 · 404 阅读 · 0 评论 -
HDU 5696 区间的价值
我们定义“区间的价值”为一段区间的最大值*最小值。一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1)。现在聪明的杰西想要知道,对于长度为k的区间,最大价值的区间价值是多少。当然,由于这个问题过于简单。我们肯定得加强一下。我们想要知道的是,对于长度为1∼n的区间,最大价值的区间价值分别是多少。分析:枚举以该点为最小值,原创 2016-05-23 14:54:36 · 1694 阅读 · 1 评论 -
hdu 5701 中位数计数
题意:中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。题解:O(n^2)统计,对于每个数字,对于比它大的记一个1,小的记一个-1,然后只要考虑左右相加为0的有多少即可。#include #include #include #inclu原创 2016-05-23 14:55:53 · 425 阅读 · 0 评论 -
hdu 5700 区间交 (multiset)
题意:小A有一个含有n个非负整数的数列与m个区间。每个区间可以表示为li,ri。它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大。题目分析:求前缀和,枚举左端点,用multiset维护右端点,因为set自带排序,所以set的第一个元素就是当前最小的右端点,而枚举的i就是当前最大的左端点,然后更新答案#include #include #include原创 2016-05-23 14:58:23 · 442 阅读 · 0 评论 -
hdu 1506 Largest Rectangle in a Histogram (最大子矩阵)
题意:容易理解...分析:对于每个单位矩阵,我们先求出连续比它高的最左边的下标假设为l,然后求出比它高的最右边的下标假设为r,然后矩阵的面积就是(r-l+1)*1;我们从左到右扫一遍,求出每个点的l保存在l[]数组里,然后从右到左扫一遍,求出每个点的r保存在r[]数组里,最后可以求出最大的矩阵了。#include #include #include #include #原创 2016-07-29 10:17:46 · 254 阅读 · 0 评论 -
hdu1505 City Game (最大子矩阵)
这题是HDU1506 的加强版,只要把算出以i 行为底能达到的最到的最大高度,再扫描每一行,就转化为 HDU1506 的问题了,即算出以此点为最低点能两边延伸的最大距离,最大延伸距离乘以该点的高度就是面积了,HDU 2870 则是此题的加强版#include #include #include #include #include #include #include原创 2016-07-29 10:47:08 · 271 阅读 · 0 评论 -
HDU 2845 Beans (最大不连续子序列和)(压缩求解)
题意:在图中取数,例如取了81之后,同一行的相邻两个不能取,还有81的上面那行和下面那行也不能取,问能取到的最大和是多少?题解:先求某一行能获得的最大值,然后求所有行能获得的最大值.#include #include #include #include #include #include #include #include #include #includ原创 2016-07-29 16:13:08 · 613 阅读 · 0 评论 -
hdu 5826 physics (物理+积分)
题意:给出n个相同小球的初速度和初位置,初方向,v*a=c,碰撞为完全弹性碰撞,问t时刻的第k小的速度为多少思路:v*a=cv*dv/dt=c;v*dv=c*dt;1/2*v*v=c*t+c0;把t=0代入,得c0=1/2*v0*v0;所以 v=sqrt(2*c*t+v0*v0)注意2*c*t+v0*v0会爆int#include #include转载 2016-08-12 11:23:54 · 305 阅读 · 0 评论 -
HDU5794 A Simple Chess (容斥+卢卡斯) (改正WA代码)
终于把我又长又臭的代码改过了,坑啊,问题就出在判断dp【i】==0上面,这里不能忽略,因为可能是模过来的。。。WA我一下午,还要注意判断两种方法的步数是否小于0#include #include #include #include #include #include #include #include #include #include #include #inc原创 2016-08-05 17:14:32 · 403 阅读 · 0 评论 -
HDU5794 A Simple Chess (容斥+卢卡斯)
题意:一匹”马”在棋盘上(1,1)的位置,每次跳跃时横纵坐标都必须增大.棋盘上还有K个障碍物(保证不在(1,1)处).求跳到(n,m)的方案数,.题解:马的日字步不好处理,需要先通过一种略奇妙的坐标变换,把问题转换成一步只能向右和向下.如果下标都改为从1开始(即读入的下标减1),那么很容易推得变换后的坐标为x′=−13x+23y,y′=23x−13y.如果变换后的坐标不是非负整原创 2016-08-05 15:52:33 · 472 阅读 · 0 评论 -
2016多校第四题 GCD(hdu 5726)(*)
题意:给一个数组a,大小为n,接下来有m个询问,每次询问给出l、r,定义f[l,r]=gcd(al,al+1,...,ar),问f[l,r]的值 和 有多少对(l',r')使得f[l',r']=f[l,r]。n题解:官方题解很6啊,对于每个点维护以这个点为右端点的所有区间,将这些区间按照GCD一段段合并在一块,然后递推维护下一个点的信息,将结果保存在map中,时间复杂度就是O(nlog(n))原创 2016-07-21 09:57:03 · 430 阅读 · 0 评论