uvalive代码
uvalive上的一些编程题
NeverMoreH
^_^
展开
-
uvalive5983(二分+dp)
题意:给出一个n*m的图,从左上角出发,去右下角,只能向下或者向右走,每个格子有权值,问如何安排你在左上角时的权值,使得到达右下角时权值大于1。思路:题中给出10m时限,于是我就二分答案+dp验证咯,具体看代码。代码:#include#include#include#include#include#include#includeusing nam原创 2015-08-29 10:53:53 · 448 阅读 · 0 评论 -
uvalive5796(图论、桥、并查集)
题意:给出一个无向图,每次询问,问两个点之间是否有一条唯一的不经过重复点的路径。思路:如果存在这样的路径,那么路径上的点就都是桥,我们可以找出图中所有的桥,把非桥边删去,把桥连的点塞到并查集中,查询的时候每次只要看两个点是否在同一个并查集即可。这题比赛的时候没过,赛后也没写,贴一个我们校一队的代码吧。代码:#include#include#include原创 2015-08-18 09:27:34 · 1640 阅读 · 0 评论 -
uvalive4840(n*n方阵的最小花费)
题意:给出一个n*m的地图,图中有n*n个人,每行都有且只有n个人,每个人都只可以左右移动,现给出这n个人的位置,问如何移动这些人使得他们构成一个n*n的方阵且花费最小。思路:首先明确一点,构成方阵之后每个人的相对位置一定不变,这样是最优的。这样大家就知道咋做了吧。代码:#include#include#include#include#include#原创 2015-08-29 20:31:28 · 400 阅读 · 0 评论 -
uvalive5990(坑点蛮多的一道题。。)
题意:给出一个数列,我们定义如下两种数列:①、substring:原数列的一个连续子数列,要包含原数列的最大值和最小值至少各一个。②、subsequence:原数列的一个子数列,要包含原数列的最大值和最小值至少各一个。问substring和subsequence的个数。思路:我们在读入数据的时候,记录出最大值和最小值,然后遍历一次数组,记录出每个最大值和最小值的位置原创 2015-08-29 11:21:09 · 428 阅读 · 0 评论 -
uvalive5986(贪心)
题意:n个人,每两个人要比一次赛,赢了得一分,输了不得分,给出一种比完赛之后每个人的分数,你可以给一个人加上一些分,或者减去一些分,使得分数序列合法,求最小花费(加一分或者减一分花费就是1)。思路:给分数序列从小到大排序,只考虑前i个人是否合法,前i个人的总分应该是tmpfen=(i-1)*i/2,如果总分大于tmpfen,那么我们不做修改,如果小于,我们就给第i个人加上差值,原创 2015-08-29 11:04:37 · 538 阅读 · 0 评论 -
uvalive5987(呃,打表)
题意:我们定义一个数列,数列里的数要满足每个数字至少有三个因子是质数(不能重复),询问数列的第n个数字。思路:打表。。。我以为不打表会超时,实则不是。代码:#include#include#include#include#include#include#includeusing namespace std;int num[10000];v原创 2015-08-29 11:06:22 · 3975 阅读 · 0 评论 -
uvalive5090(三维凸包)
题意:给出一些三维的点,求出一个凸包,输出凸包有多少个表面。思路:模板。。。队友找了一个巨全面的模板,贴过来。代码:#include#include#include#include#includeusing namespace std;const int MAXN=550;const double eps=1e-8;struct Point{原创 2015-09-05 18:17:00 · 876 阅读 · 0 评论 -
uvalive5092(找规律)
题意:给出n和m,我们有一个由1~n组成的n个数字的数列a[],如果a[i]>i,我们就把ans++,我们要求出ans==m的数列有多少个。思路:打个表,找规律,规律如代码中所示,类似于杨辉三角。代码:#include#include#include#includeusing namespace std;const int mod=10000000原创 2015-09-05 18:06:08 · 408 阅读 · 0 评论 -
uvalive5096(积分题)
题意:给出两个完全相同的圆柱的底面半径和高,让这两个圆柱正交,求体积。思路:分为两种情况:①、2*r我们把中间相交的部分分为8个相同部分来看,我们只考虑第一象限那部分的体积v。v=∫(0→r)√(r^2-x^2)*√(r^2-x^2)dx②、2*r>h分为中间的四方体和两边的那个弧状物体。中间的四方体单独算,边上的那个图形的体积v如下。v=∫(0→r)√原创 2015-09-05 18:15:43 · 536 阅读 · 0 评论 -
uvalive5989(水题)
题意:给出一串字符串,‘D’代表龙,‘.’代表空地,如果有龙我们就要输出“You shall not pass!”,否则输出“Possible”。思路:不多说。。。代码:#include#include#include#include#include#include#includeusing namespace std;char s[1000原创 2015-08-29 11:12:01 · 261 阅读 · 0 评论 -
uva5984(简单计算几何)
题意:给出n个图形,三角形、正方形和圆形,问这些图形覆盖多少个整数点。思路:每读入一个图形,就去计算这个图形覆盖了多少个点,用vis[][]来标记哪些点被覆盖过。代码:#include#include#include#include#include#include#includeusing namespace std;#define maxn原创 2015-08-29 10:55:30 · 298 阅读 · 0 评论 -
uvalive4836(枚举)
题意:给出一个五子棋的棋面,问先手或者后手是否能够在三步之内必胜。思路:只有三次下子,我们可以枚举下的位置,分为以下三种情况:①、先手在第一步就能获胜,说明棋面内有4子相连。②、后手在第二步的时候获胜,说明棋面上后手有至少两个4子相连的情况。③、先手在第三步的时候获胜,这时,先手在走第一步的时候,可能后手有一个4子相连,或者没有4子相连,如果有一个,那么先手就要去堵原创 2015-08-29 20:25:18 · 283 阅读 · 0 评论 -
uvalive5992(搜索)
题意:给出一个n*m的图,‘.’可以走,‘#’不能走,图中有字母‘a’~‘z’,每个时间每个字母会向四联通的四个格子扩散,如果两个字母相遇,那个格子会变成‘*’,问最后的图长什么样。思路:从每个字母开始搜,记录一下就好了。代码:#include#include#include#include#include#include#include#incl原创 2015-08-29 11:22:40 · 412 阅读 · 0 评论 -
uvali5697(DP)
题意:给出一个由I、D和?组成的串,串的长度是n,我们要根据串的规则构造出满足的由1~n+1组成的数列,其中每个数字只出现一次。串的规则定义如下:如果当前字母是I,我们要保证这一位的数字要比前一位大,如果是D,则比前一位小,?代表都可以。请求出满足串的规则的数列的个数。思路:首先我们构造状态如下:dp[i][j]=k 表示我们用1~i这些数字构造前i位且第i位是j的情况原创 2015-08-12 10:17:06 · 477 阅读 · 0 评论 -
uvalive4838(凸包+重心)
题意:给出一个n边形,我们要输出有多少种摆放方案使得这个多边形能够稳定摆放(如果重心落在边的端点上,不能稳固)。思路:用这n个点围成一个凸包,每次用凸包的一个边当做底边,判断重心是否落在这条边的端点上或者落在边的外面即可。注意:一定要用初始的n边形求重心,不能用凸包求重心,因为这个我们WA了三个小时。代码:#include #include #inclu原创 2015-08-29 20:26:28 · 417 阅读 · 0 评论 -
uvalive5790(DP)
题意:给出一个数字三角形,你如果想要取出一个格子的数字,必须把这个格子的父亲都取走,问你能取走的最大值。思路:想到如下的转化:我们就可以把此题变成在第二个图形上选择矩形,具体细节请看代码。代码:#include#include#include#includeusing namespace std;int sum[1005][1005];原创 2015-08-18 09:03:54 · 311 阅读 · 0 评论 -
uvalive4842(AC自动机+DP)
题意:给出猴子打字时打某个字母的概率,猴子最多可以敲键盘m次,问得到的长度是m的单词包含模式串的概率。思路:AC自动机+dp。首先,我们用模式串构造一个AC自动机,用dp[i]][j]表示当前猴子正在敲第i个字母且我们在自动机的第j个节点上的概率,转移方程就很好想了,正着dp就可以,具体看代码吧。代码:#include#include#include#原创 2015-08-29 20:35:36 · 401 阅读 · 0 评论 -
uvalive4835(模拟)
题意:给出n*n*n的一个魔方,有m个操作,每次操作我们删除这个魔方的一行格子,问经过所有操作之后还剩多少个格子。思路:模拟,每次进行操作的时候,用pair>标记被删除的格子,用set维护。代码:#include#include#include#include#include#include#include#include#include#in原创 2015-08-29 20:13:25 · 279 阅读 · 0 评论 -
uvalive5798(树状数组)
题意:单点更新,区间求和,求和操作和普通的求和不一样,如果我们要求2~5的和,sum=1*f[5]+b*f[4]+b*b*f[3]+b*b*b*f[2],输出每个询问操作的答案,同时答案要模p。思路:我们可以在操作的时候直接给每个位置的数字成上b的多少次幂,例如如果是五个数字,我们插入f1时,我们不插入f1,而是插入f1*b*b*b*b,插入f2时,我们插入f2*b*b*b,这原创 2015-08-18 09:05:14 · 306 阅读 · 0 评论 -
uvalive4744(数论)
题意:给出题意中那么个函数,给出a、b、p、n,求函数调用的次数(mod p)。思路:能很容易看出来a和b的阶数是斐波那契数,n过大,用矩阵快速幂求斐波那契数,然后用欧拉函数进行取模的优化。代码:#include#include#include#includeusing namespace std;#define maxn 1000050long原创 2015-10-04 19:39:09 · 507 阅读 · 0 评论