[S]实现能力
文章平均质量分 71
GooZy
程序宅一枚。没事写写代码,打打游戏,看看动漫~
展开
-
Codeforces 706E Working routine (模拟链表)
题目链接:Codeforces 706E Working routine (模拟链表)题意分析:给出一个矩阵和q个操作,每次操作需要交换矩阵的两个子矩形,问:经过q次操作后,最终矩阵长什么样子。解题思路:1000×10001000 \times 1000 的矩阵啊,n2n^{2} 操作肯定是要T的。考虑链表将整个矩阵串在一起,如下图:发现对于任意需要我们交换的矩阵,其实我们只需要改变这两个矩阵的周围原创 2016-08-12 23:57:34 · 1120 阅读 · 0 评论 -
[POJ 2002]Squares[二分][数学]
题目链接:[POJ 2002]Squares[二分][数学]题意分析:平面中有n个点,求这些点能组成多少个正方形?解题思路:最多1e3个点,四个点枚举肯定超时,必须控制在两个点以内。那么两个点可行吗?下面这幅图可以说明可行:当一条边确定以后,由等边三角形的特性,旁边的两个点也能枚举出来。所以有(i是a点,j是b点):temp.x = p[i].x + (p[i]原创 2016-02-03 21:26:00 · 982 阅读 · 0 评论 -
[POJ 3181]Dollar Dayz[DP][高精度]
题目链接:[POJ 3181]Dollar Dayz[DP]题意分析:给出无穷多个1~K的价值的货币,问:能有多少种方式组合成N。解题思路:完全背包。dp[i] = dp[i] + dp[i - j]。j为货币价值。第i个价值可以有第i - j的价值加上价值为j的货币组成。由于数量很大,需要高精度。这里我们可以使用ldp和hdp分别代表数字的低位和高位,整个数字长度就可以表示到原创 2016-01-13 12:51:11 · 473 阅读 · 0 评论 -
[POJ 3295]Tautology[构造][DFS]
题目链接:[POJ 3295]Tautology[构造][DFS]题意分析:给出一个表达式,问:这个表达式是否是永真的?是的话,输出“tautology”,否则“not”。其中变量最多有5个,代表字母为:p q r s t大写字母:K-与,A-或,N-否,C-蕴含,E-相等解题思路:变量最多五个,那么就把所有情况都枚举一遍。解析表达式,使用dfs进行扫描,直到扫描到小写字母原创 2016-01-12 09:59:33 · 461 阅读 · 0 评论 -
[AOJ 2170]Marked Ancestor[并查集][离线][路径压缩]or[线段树]
题目链接:[AOJ 2170]Marked Ancestor[并查集][离线][路径压缩]or[线段树]题意分析:结点1为根结点,初始时已经染过颜色。给出N - 1行,第i行代表第i + 1个结点的父亲结点是哪个结点。现在给出最多1e5个结点,1e5个查询。查询操作分两种,Q X代表查询结点X的最近的被染色的父或者祖先结点被染色的编号,M X代表对结点X染色。问:所有查询完之后,Q原创 2016-01-15 23:12:29 · 844 阅读 · 0 评论 -
[CodeForces 605B]Lazy Student[贪心][构造]
题目链接: [CodeForces 605B]Lazy Student[贪心][构造]题意分析:给出边的权值和该边是否在最小生成树内,问:能否给出一个合理的原图?1为在最小生成树内,0则反之;n个点,m条边,保证有n-1条边在最小生成树内,m - n + 1条边在树外。解题思路:直接1->2->3->4->....只要边是在最小生成树上,就这么建边,问题在于:不在树上的边怎么建原创 2015-12-11 00:54:23 · 782 阅读 · 0 评论 -
[CodeForces598C]Nearest vectors[精度]
题目链接:[CodeForces598C]Nearest vectors[精度]题意分析:给出多个有向向量,问这些向量中,哪两个构成的无定向角(即:构成的两个角中,小的那个角)最小。解题思路:用atan2函数把所有向量与x轴正半轴的夹角求出,排序,俩俩间比较差值即可。注意要使用long double。个人感受:精度问题太恶心了! X 3具体代码如下:#inclu原创 2015-11-15 14:00:31 · 1040 阅读 · 0 评论 -
[HDU 5459]Jesus Is Here[递推][实现]
题目链接:[HDU 5459]Jesus Is Here[递推][实现]题意分析: 问给定的第n个字符串中,所有c之间的距离之和是多少?(s[i]=s[i−2]+s[i−1]s[i] = s[i - 2] + s[i - 1])解题思路: 我们设f[i]为答案,那么由定义: f[i]=f[i−2]+f[i−1]+(跨越两串的距离之和) f[i] = f[i - 2] + f[i - 1] +原创 2015-10-13 13:30:14 · 662 阅读 · 1 评论 -
[算法导论 第2章]归并排序
主要思路:对数组不断地从中间进行切分,直到不可分割。然后将每个递归段内的两个数组,每次比较他们最顶端的元素,将其中小的元素合并到数组中。这里设置两个哨兵元素,值为INF。作为底部,这样就不用担心某个数组比较完后为空的情况,然后当运行了一定的次数(也就是合并了该递归段内元素个数)时,就停止整个过程。具体代码如下:#includeusing namespace std;const原创 2015-09-23 18:54:17 · 757 阅读 · 0 评论 -
[POJ 3349]Snowflake Snow Snowflakes[hash]
题目链接:[POJ 3349]Snowflake Snow Snowflakes[hash]题意分析:判断给出的n朵雪花中有没有两朵完全相同(对应的边长度相同,位置相同,顺序可正可逆)解题思路:理想的方法是先把所有长度相同的放在一起,在判断位置是否相同。然而这样显然加大了hash的难度,所以我们采用长度和相同的放在一起的策略。然后将在同一个长度和下的任意两朵都顺序逆序判断一遍。原创 2016-02-04 13:28:17 · 863 阅读 · 0 评论 -
[POJ 1840]Eqs[hash][枚举]
题目链接:[POJ 1840]Eqs[hash]题意分析:求表达式a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 中xi可能的组合个数。解题思路:本题x数据范围为100,五个一起枚举势必超时。观察发现,可以提前枚举x1和x2带入的值,将和存入,接着枚举x3、x4、x5的值进行比较即可。即表达式a1x13+ a2x23 = -(a3x33+ a4x43+原创 2016-02-04 17:34:01 · 483 阅读 · 0 评论 -
HDU 5812 Distance
题目链接:HDU 5812 Distance题意分析:给出一个空集合和三个操作。操作I向集合中插入元素X,操作D删除集合中的元素X,操作Q,查询集合中与X的最小距离最小是多少? 定义最小距离 d(x,y)d(x,y) 为从x变为y只通过乘或者除素数所需要的最少操作。例如:d(15,50)=3d(15, 50) = 3,因为 15/3×2×5=5015 / 3 \times 2 \times 5 =原创 2016-08-10 15:20:20 · 933 阅读 · 2 评论 -
[Codeforces546D]Soldier and Number Game[dp][实现][素数筛][分解整数][数学]
原题链接:[Codeforces546D]Soldier and Number Game[dp][实现][素数筛][分解整数][数学]题意分析:本题从实质上来说,就是给你两个整数a, b。求出a, a - 1, a - 2........b + 1这些整数能被拆分成多少个素数相乘,把每个的拆分结果相加起来。例如 a = 10, b = 2. 那么ans = 1(3) + 2(4) + 1(原创 2015-05-23 10:11:55 · 1159 阅读 · 5 评论 -
[CodeForces 126C]E-reader Display[实现]
题目链接:[CodeForces 126C]E-reader Display[实现]题意分析:给出一张图,让你用最短的步骤描绘出这张图,输出最短步骤数。(x,y)代表将区间(x,x)~(x,y)和区间(x,y)~(y,y)的线段0变1,1变0。解题思路:从一个点可以染色的区间我们可以发现啊(举右上方为例子):这个点能控制的只有它的左平行线和下方垂直线。而且你会发现啊,一个点染色原创 2016-03-14 00:10:14 · 854 阅读 · 0 评论 -
[POJ 3007]Organize Your Train part II[Hash][Trie]
题目链接:[POJ 3007]Organize Your Train part II[Hash][Trie]题意分析:将字符串任意分割两半。可进行下列操作:1.互换两半的位置;2.将其中一个反转。每次操作次数不限。问:给出的字符串,一共能产生多少个不同的字符串?解题思路:搞搞搞~先看看分成两半都有什么情况,发现总共有八种组合,我们用s串记录没有前后交换过位置的字符串,t串记录交原创 2016-03-11 22:33:14 · 489 阅读 · 0 评论 -
[HDU 2926]I Speak Whales[递归][划分]
题目链接:[HDU 2926]I Speak Whales[递归][划分] 题意分析: W20=[1]W_{2^{0}}= [1] W21=...W_{2^{1}}= ... W22=...W_{2^{2}}= ... 后面的是由四个前面的构成,而右下角是前面的相反矩阵。 现在求:第n个矩阵的第r行从s到t的总和是多少? 解题思路: 我们可以递归着求解,边界条件就是n = 0时,返回原创 2016-03-11 10:34:24 · 509 阅读 · 0 评论 -
[POJ 2823]Sliding Window[单调队列]
题目链接:[POJ 2823]Sliding Window[单调队列]题意分析:包含n个数字的数列,用一个长度为k的窗口移动从1开始向右移动,每次输出窗口中的最小值和最大值。分两行输出结果:最小值输出到上行,最大值输出到下行。解题思路:考虑每次移动窗口要进行的操作,总共有两种,增加一个数,删去一个数。考虑到需要涉及到删除操作,我们使用单调队列来进行维护。L代表队列的左端,R代表原创 2016-03-09 13:48:57 · 474 阅读 · 0 评论 -
[CodeForces 602B]Approximating a Constant Range[构造]
题目链接:[CodeForces 602B]Approximating a Constant Range[构造]题意分析:给出一个数列,各项绝对值之差不超过1,求最大的区间长度,使得区间内最大的数减去最小的数差不超过1。解题思路:用p[i]记录数字i出现的最大位置,那么到达数字x时,我们只需要对x-1和x+1的最大位置进行判断,就能确定如何计算区间长度。下面仅讨论其中一种情况:原创 2016-02-22 19:45:53 · 647 阅读 · 0 评论 -
[POJ 3274]Gold Balanced Lineup[math][sort]
题目链接:[POJ 3274]Gold Balanced Lineup[math][sort] 题意分析: 给出每头牛所拥有的特征,比如某头牛特征值是13,13的二进制为1101,那么这头牛拥有特征1、3、4。 现在给出牛的个数n和总共特征个数k,求最长的区间,使得区间内所有牛的k个特征相加之和都相等。 比如样例区间: 7(111) 2(010) 1(001) 4(100) 每个特原创 2016-02-04 21:56:56 · 610 阅读 · 0 评论 -
[HDU 5441]Travel[并查集]
题目链接:[HDU 5441]Travel[并查集]题意分析:Jack喜欢环游世界,现在给出多个城市ai到bi所需要的时间,Jack从一个城市到另一个城市有一个能够容忍的时间上限,超过这个上限,他就不走这条路线。问:给定一个Jack可以容忍的时间上限,Jack最多可以在多少个城市对(a,b)间进行旅行?解题思路:对城市间的距离进行排序,从小到大进行并查集的合并,如果有新的城市加入,原创 2015-10-10 14:17:48 · 526 阅读 · 0 评论 -
[HDU 5437]Alisha’s Party[模拟]
题目链接:[HDU 5437]Alisha’s Party[模拟]题意分析:Alisha 邀请了好多个朋友来聚会,每个朋友都带了礼物,Alisha会在特定的时间t开门,此时可以让p个朋友进入,礼物价值越到,到的越早的越先进入,每个时刻都有一个朋友到来。现在给出多个查询,每个查询代表,第n个进入的朋友是谁。解题思路:把题目读懂了,直接模拟这个进门过程就好了。记录下进门时间。然后模拟,原创 2015-10-07 23:29:15 · 484 阅读 · 0 评论 -
[UVA 247]Calling Circles[传递闭包][floyd]
题目链接:[UVA 247]Calling Circles[传递闭包][floyd]题意分析:A打给B,B打给A,那么AB就构成了一个电话圈。如果A->B,B->C,C->A,那么这也构成了电话圈,值得一提的是,如果这种情况下,C->D,D->C,那么D也算是在电话圈内。输出所有的电话圈中的人。解题思路:最多25个人,可以用floyd求出所有人之间的关系,如果 has[i][j]原创 2015-10-19 00:43:05 · 534 阅读 · 0 评论 -
[UVA1595]Symmetry
题目链接:[UVA1595]Symmetry题意分析:给出若干个点,问:这些点是否是左右对称的。解题思路:对x轴排序,然后最后一个点的坐标 + 第一个点的坐标 = 对称轴坐标的两倍。然后对两边分别y轴排序。左半边按y从小到大,右半边按y从大到小排序。因为我发现左边最旁边一个点,对应的右边最旁边一个点,排序刚好是相反过来的。个人感受:好久没写大整数了,以前写过一次,也就是一个数加一个数,原创 2015-07-29 21:29:16 · 760 阅读 · 0 评论 -
[POJ3982]序列[字符串][大整数]
题目链接:[POJ3982]序列[字符串][大整数]题意分析:就是字面那意思- -解题思路:一开始觉得怎么会用大整数呢,肯定是找规律 - - 。然后找不到,就去鸟其它题了。最后知道真相的我眼泪掉下来。个人感受:好久没写大整数了,以前写过一次,也就是一个数加一个数,输出结果,也就是HDU1002 XD.然后这次来个累加就跪得不行不行的。首先是string的运用,各种尝试,期间原创 2015-07-17 21:44:13 · 596 阅读 · 0 评论 -
[CodeForces518A]Vitaly and Strings[字符串][构造]
题目链接:[CodeForces518A]Vitaly and Strings[字符串][构造]题意分析:给出字符串s,t,问:是否有字符串,使得其大于s小于t。(s 解题思路:题目即问:s的下一个排列是否小于t。个人感受:下一个排列的构造我也是醉了。WA49都出来了XD具体代码如下:#include #include using namespace std;typedef原创 2015-06-12 09:59:11 · 574 阅读 · 0 评论 -
[CodeForces365C]Matrix[构造][数学]
题目链接:[CodeForces365C]Matrix[构造][数学]题意分析:给出的字符串s,构造长宽均为s.size()的矩阵,矩阵中每个元素(i, j) = si * sj。问:这个矩阵中有多少个所有元素和为a的子矩阵?解题思路:仔细观察会发现,子矩阵的总元素和会等于该子矩阵对应长宽边元素和相乘。例如下面的矩阵:(这实质上就是乘法的分配律)那么剩下要做的就是,怎么样在原创 2015-06-12 15:12:05 · 669 阅读 · 0 评论 -
[CodeForces264A]Escape from Stones[dfs][two pointers]
题目链接:[CodeForces264A]Escape from Stones[dfs][two pointers]题意分析:初始主角站在区间[0,1]的中点,然后有大量石头掉落(每次都会掉落在当前区间中点),此时主角会向左右移动,每次移动后的区间缩小为1/2。要求:从左往右输出出现的石头编号。解题思路:一、可以在脑袋里面模拟一下过程,最好画个图,然后就可以用一个指针代表头指针,一个代表尾原创 2015-06-29 23:51:31 · 623 阅读 · 0 评论 -
[CodeForces555B]Case of Fugitive[贪心][优先队列]
题目链接:[CodeForces555B]Case of Fugitive[贪心][优先队列]题意分析:依次排列成行的岛屿间需要假设桥梁,问:是否能在岛间都搭上桥?能,输出每个隔间需要的桥号。否则,输出"No"。解题思路:贪心。按桥的长度升序排列,按岛屿间的最短距离island[i + 1].l - island[i].r升序排序。每次记录当前桥能搭上的岛屿数,然后把桥搭在这些岛屿中,岛屿原创 2015-07-01 00:04:18 · 875 阅读 · 1 评论 -
[CodeForces4A]Watermelon[实现][数学]
题目链接:[CodeForces4A]Watermelon[实现][数学]题意分析:给你一个西瓜,问:这个西瓜能不能切成重量是偶数倍的两个部分?解题思路:显然,如果西瓜重量为奇数,一定不能分成两部分为偶数千克。当西瓜重量为偶数时分两种情况,1.西瓜重量大于2千克,此时只要能被2整除,就一定能分成偶数的两部分。(可以假设西瓜重量为14kg,被2除后为7,7,此时一个加一千克,一个减一千克即可原创 2015-05-19 22:56:18 · 1339 阅读 · 0 评论 -
[CodeForces312C]The Closest Pair[实现][贪心]
题目链接:[CodeForces312C]The Closest Pair[实现][数学]题意分析:给出一个最大循环次数K,问:能不能给出个样例,让这哥们的代码TLE。解题思路:注意这哥们代码里的这句话!!!!if (p[j].x-p[i].x>=d) then break于是就有思路了,竟然他剪枝是这么剪的,那么我们就让样例点间X轴距离永远为0,绝对剪不掉!个人感受:原创 2015-06-03 23:23:56 · 791 阅读 · 0 评论 -
[UVA400]Unix ls[格式输出]
题目链接:[UVA400]Unix Is[格式输出]题意分析:你现在手头上有一大堆文件名,你要做的就是把这些文件名按一定的格式输出。输出规则为:1.第一行为60个'-'。2.以文件名中的宽度最大的那个作为标准宽度(标准宽度 = 最长宽度 + 2)。文件名不能超过60个字符的长度(即:不能有字符出现在'-'所列的的范围之外,但是空格可以。)3.文件名需要按字母序。4.要求输出的行数最少,且按原创 2015-07-20 20:34:15 · 496 阅读 · 0 评论 -
[UVA120]Stacks of Flapjacks[STL][构造]
题目链接:[UVA120]Stacks of Flapjacks[STL][构造]题意分析:给出一堆煎饼,你要做的就是把它们翻转成自顶向下,从小到大排序。每次可以进行的flips操作,flips(1)代表从底开始的第一个煎饼到顶的所有煎饼进行反转。即54321变成了12345(5是顶端,1是底端)。问怎么样把煎饼翻转成指定情况,输出所需要的flips操作。每个操作以0作为结尾,代表操作停止。输原创 2015-07-31 19:45:34 · 576 阅读 · 0 评论 -
查找无序数组中的第K个最小值[快排思想]
分析: 快排每次会将作为哨兵的数移到给定位置上,我们可以依据这个特点,当它刚好在第K位时,返回这个值,否则进行递归。 个人感受: int *a = new int(10); int *a = new int[10]; 前者创建一个int型数,后者创建一个int型数组,被坑哭啦= =。 具体代码如下:#include<iostream>#include<cstdlib>#include<原创 2015-11-02 20:36:00 · 840 阅读 · 0 评论 -
[CodeForces 577B]Modulo Sum[实现][数学]
题目链接:[CodeForces 577B]Modulo Sum[实现][数学]题意分析:给出n个数,再给出一个数m。问给出的n个数中,任意组合,是否存在组合出来和能被m整除。解题思路:进一步说:题目就是问:在所有这些数能得到的组合中,是否存在和使得其被m整除。显然,这些组合出来的和取余后不大于m,这里面存在着大量重复。所以我们可以用一个数组标记这个和是否出现过,如果没出现就放入v原创 2015-09-11 23:29:15 · 2114 阅读 · 0 评论 -
[HDU 5489]Removed Interval[LIS]
题目链接:[HDU 5489]Removed Interval[LIS]题意分析:求含有N个元素的数组,去掉L个连续的元素后,剩下元素构成的最长上升子序列的长度。解题思路:我们就可以枚举这个长度为L的区间,从左往右滑动窗口。每向右移动一格,此时有:最长上升子序列长度 = 窗口右边以右边第一个元素开头的最长上升子序列 + 窗口左边最大元素小于窗口右边第一个元素的最长上升子序列。原创 2015-09-28 22:39:28 · 2469 阅读 · 6 评论 -
[UVA 202]Repeating Decimals
题目链接:[UVA 202]Repeating Decimals题意分析:给出分子、分母。求循环节的长度,并输出循环节,超过50用...代替。解题思路:首先是得到小数部分,例如分数 1/3 。整数部分 1/3,小数部分就是(1%3)*10/3每一位的整数部分等于上一位对分母取余乘10再除以分母。不过这里我们写成 (1 - 1/3 * 3) * 10 % 3,防止除数是0的情况。最后原创 2015-08-21 10:44:23 · 753 阅读 · 0 评论 -
[CodeForces 490B]Queue[实现]
题目链接:[CodeForces 490B]Queue[实现]题意分析:给出队伍中各个同学的前面和后面是谁,输出整个队伍。解题思路:因为记录的是前面和后面的同学,所以奇数号同学记录的是偶数号同学的位置,同理,偶数号同学记录的也是如此。可以发现,2号同学是被1号同学记录,1号同学的前驱同学为0,也就是不存在,所以给出一系列信息,我们总能依据0号(那个不存在的同学)把所有偶数号同学原创 2015-09-08 12:21:43 · 610 阅读 · 0 评论 -
[UVA 10801]Lift Hopping[Dijkstra][建图]
题目链接:[UVA 10801]Lift Hopping[Dijkstra][建图]题意分析:从0层开始,一共有n台电梯供你到达目的地k层。每台电梯往上走一层都要消耗t[i]的时间,并且电梯只能在特定的楼层停下,换成电梯要花费60s的时间,而且呢,你不能用楼梯上楼,只能搭电梯。。。。(hentai!)问:最快到达楼层k的时间是多少?不能到达就输出-1。解题思路:这题技巧就是体现在建原创 2015-08-17 00:58:02 · 917 阅读 · 0 评论 -
[UVA10391]Compound Words[map][实现]
题目链接:[UVA10391]Compound Words[map][实现]题意分析:给出字典中一堆单词,单词的输入方式是以字典序输入的。问:在这一堆单词中,有那些单词是通过其它两个单词组合而来的。按字典序升序输出这些单词。解题思路:使用map对于字典中的单词进行映射,作用就是用于查询单词是否字典中。然后从第一个开始,将每个单词分成它所能变成的任意两个单词,如果分成的两个单词的映射值均为1原创 2015-07-21 20:57:29 · 1719 阅读 · 0 评论 -
[UVA11572]Unique Snowflakes[构造]
题目链接:[UVA11572]Unique Snowflakes[构造]题意分析:就是给你一堆雪花的大小序列。问在这样的序列中,最长的没有重复数字的序列有多长?解题思路:从小到大遍历,每次记录下独一无二的数字的下标,有新的独一无二的数字加入就把当前序列长度更新,如果当前序列长度大于找到的最大的,就更新。如果碰到相同的就跳到相同的那个的下一个进行查找。标记下标我使用了map映射。个人感受原创 2015-07-31 19:56:05 · 551 阅读 · 0 评论