![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
UVa/LA
文章平均质量分 63
Coco_T_
东南大学本科毕业生,浙江大学在读研究生
展开
-
UVa11800 - Determine the Shape(形状的判断)
题目链接分析: 我先进行了点的排序, 在画出了所有点的排列状况后,我用线段相交的判断把点换成了这样if (XiangJiao(A,B,C,D)) swap(B,C);if (XiangJiao(A,D,B,C)) swap(C,D);之后直接判断边和角的关系就好了:Square(正方形) 所有的边相等,所有的角相等(等于90°,Dot=0)Rectangle(矩形) 对边相等,所有的角原创 2017-10-17 20:46:07 · 290 阅读 · 0 评论 -
UVa11437 - Triangle Fun(直线交点)
题目链接分析: 基本操作的训练//这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#define LD doubleusing namespace std;const LD eps=1e-8;struct node{ LD x,y; node (LD xx=0,LD yy=0原创 2017-10-17 19:26:49 · 202 阅读 · 0 评论 -
UVa11168 - Airport(凸包+点到直线的距离)
题目链接简介: 找到一条直线,使得所有点在直线的同侧,且到直线的距离之和尽量小分析: 显然,所求直线不能穿过凸包,也不能与凸包相离, 所以只能与凸包上的边重合,因为凸包上最多有n条边,如果我们能在O(1)的时间内算出所有点到直线的距离之和,这个问题我们就可以在O(n)的时间内解决了首先我们明确,一个点到直线的距离怎么求用向量的方法 d=Cross(P-A,B-A)/Len(B-A) 这虽原创 2017-10-17 14:38:16 · 359 阅读 · 1 评论 -
UVa10652 - Board Wrapping(凸包+S+向量旋转)
题目链接简介:凸包分析:简介就已经邪泄露了正解tip这道题求坐标是一个难点 有一个很好的方法 我们知道点+向量=点 所以我们可以先算出中点到达每块木板的四个点的方向向量,点的坐标直接用中点坐标加上方向向量即可a=-torad(j); //变成弧度制 node o=node(x,y);原创 2017-10-16 20:51:35 · 248 阅读 · 0 评论 -
UVa11178 - Morley's Theorem(向量旋转+直线交点)
题目链接简介:三角形内角三等分线相交形成等边三角形分析:向量旋转和直线交点的练习tip新操作的第一次练习,板子不要写错#include#include#include#includeusing namespace std;struct node{ double x,y; node (double xx=0,double yy=0)原创 2017-10-16 15:42:07 · 208 阅读 · 0 评论 -
UVa11636 - Hello World!(贪心)
题目链接简介: 输出多条Hello World,只能复制粘贴分析: 实际上我们只要贪心的一直复制 得到的Hello world的条数一定是2的n次方 最后差几条,我们直接用一次复制即可//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;int main(){ int ca原创 2017-10-18 10:01:17 · 397 阅读 · 0 评论 -
UVa11039 - Building designing(排序+贪心)
题目链接简介: n个绝对值不同非零整数,选出尽量多的数,排成一个序列,使得正负号交替,绝对值递增分析: 实际上我们可以把两种颜色的楼层分开,分别排序 之后贪心的构造楼层就可以了当然我们还有一种更简单的方法, 绝对值排序 如果相邻两个数的乘积为负,那么这两层楼就可以计算入答案中tip乘的操作会爆int,所以要开ll//这里写代码片#include<cstdio>#include<cstr原创 2017-10-18 15:58:07 · 372 阅读 · 0 评论 -
UVa10970 - Big Chocolate
题目链接分析: 找规律,我们不论怎么分割,每切一次,巧克力的块数就+1 我们的目标是n*m块巧克力,所以一定要切割n*m-1次//这里写代码片#include<cstdio>using namespace std;int m,n;int main(){ while (scanf("%d%d",&m,&n)!=EOF) { printf("%d\n",m*n-1原创 2017-10-18 17:46:25 · 249 阅读 · 0 评论 -
UVa10340 - All in All(模拟)
题目链接分析: 两个指针从前往后扫 当然,还有一种更好的方法: 直接循环t,len作为s的指针,相等时len++,最后比较len和strlen(s)//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;char s[1000010],t[1000010];int main(){原创 2017-10-18 18:35:28 · 648 阅读 · 0 评论 -
UVa10905 - Children's Game(排序+贪心)
题目链接分析: 显然我们要让首位大的数字排在前面但是有一个问题,如果是这样的数字: 807 80 我们要怎么办呢 显然80807要更优那么就是短的在前吗,也不一定 809 80 这一组的最优解就是80980 所以我在判断的时候是这么写的:int pd(int A,int B){ int l1=strlen(a[A]); int l2=strlen(a[B]);原创 2017-10-18 20:45:56 · 217 阅读 · 0 评论 -
UVa11134 - Fabled Rooks(贪心+优先队列)
题目链接简介: 同行同列没有两辆车,每辆车在规定的矩形内分析: 乍一看很像八皇后问题,但是我们注意到n<=5000 显然dfs是没有办法的了, 不过我们会注意到,和八皇后相比,这道题少了一个条件:我们可以同一对角线上放多辆车,而且题目给出了每辆车的位置范围 实际上我们可以用贪心解决这个问题对于每一辆车来说,行和列是相互独立的,所以我们可以分开来考虑(下面我们单考虑行): 我们把所有的矩形原创 2017-10-19 10:39:51 · 324 阅读 · 0 评论 -
UVa11752 - Super Power
分析: 在我们不知道怎么做的时候,我们要怎么办呢 打表 不不不,这道题不能这样假设我们需要判断X是否可行 我们把数字质因数分解一下 可以发现,如果ta的所有因子的个数互相成倍数关系并且都可以被两个不同的数整除,那么X一定是super power原创 2017-10-26 21:37:00 · 224 阅读 · 0 评论 -
UVa11367 - Full Tank?(dp+dijkstra)
题目链接简介: n个城市之间有m条道路,给出起点和终点,以及汽车的油箱容量c 求从s到t的最便宜路径分析: 从今往后,就用Vjugde啦~\ ( ≧ ▽ ≦ ) /~显然dp 设计状态:f[i][j]表示到达i,油箱里有j升油的最低花费 之后就用dijkstra转移就好了 每次找到最小的花费状态 枚举下一站以及到达下一站剩下的油量 通过这个计算本站是否要买油tip一开始WA了一次,因原创 2017-10-27 09:08:53 · 434 阅读 · 0 评论 -
UVa11100 - The Trip, 2007(贪心【重点:解的构造)
题目链接简介: 给定n个整数,把ta们划分成尽量少的严格递增序列分析: 记录每一个数字出现的次数cnt[i] k=max{cnt[i]}困难一点的是解的构造:在题目中有这样一句话:简单来说让每个背包装载的东西尽量相等 所以我们把所有的物品保存下来之后,从小到大排序 选1~k的物品为这k个背包的第一个物品 至于每一个背包i,属于ta的物品编号是i+x*k 这样就能保证每个背包尽量均衡//原创 2017-10-19 18:52:36 · 397 阅读 · 0 评论 -
UVa11389 - The Bus Driver Problem(贪心)
题目链接简介: 有n个A任务和n个B任务, 现在要把这些任务分成n组,每组包含一件A事件和一件B事件, 如果事件的和超过d,会产生一定的费用,最小化费用分析: 一开始我认为, 只要把A任务从小到大排序,B任务从大到小排序 对应相加得到的就是最优组合方案 交上去果然就是WA(歪果人不好骗啊)然而我找了半天的反例,都没有什么结果 所以我这个贪心贪得很对 但是为什么WA呢 因为我的读入原创 2017-10-19 19:50:03 · 361 阅读 · 0 评论 -
UVa11280 - Flying to Fredericton(dp+Bellman_Ford)
题目链接简介: 给出n个城市以及城市之间m条航线 每次询问给出一个s,表示在中转站不超过s的前提下, 从起点到终点的最短距离分析: 显然又是dp+最短路 本来还想有优美的dijkstra解决,但是前辈说这道题Bellman的复杂度有更好一点 于是追求完美的我选择用Bellman-ford干了这道题注意起点和终点不算中转站 在运行Bellman的时候一定要判断环的情原创 2017-10-27 10:30:15 · 239 阅读 · 0 评论 -
11991 - Easy Problem from Rujia Liu?(stl)
题目链接简介: 长度为n数组,每次询问两个整数k,v,输出从左到右第k个v的下标分析: 从查询的角度讲,要是我们能够把答案组织成一种O(1)查询的数据结构就好了,比如说a[v][k]就是答案,那就非常美滋滋了 实际上这是可以做到的首先,因为v的范围很大,显然不能开一个数组记录每一个数 我们就想到用map映射一下 也就是说a[v],表示的是在map映射下的v的值 由于我们还要以a[v][k原创 2017-10-20 08:23:46 · 234 阅读 · 0 评论 -
UVa11584 - Partitioning by Palindromes(dp)
题目链接简介: 给出一个字符串,划分成尽量少的回文串分析: 根据常识来说,dp状态的设计应该是这样的: f[i]表示到i位为止,最少能划分为几个回文串 f[i]=min{f[j]+1(j+1~i是回文串)} 显然我们是没办法直接n^2转移的 如果我们在转移的时候O(n)判断(j+1~i)是不是回文串又很浪费时间 所以只能选择预处理,如果我们能够预处理出能够构成回文串的区间,那么问题就可原创 2017-10-20 10:12:27 · 187 阅读 · 0 评论 -
UVa11082 - Matrix Decompressing(最大流)
题目链接简介: 给出A[i]表示矩阵前i行的元素和 B[i]表示矩阵前i列的元素和 求原始矩阵分析: 首先我们把A,B数组变成每一行(每一列)的元素和 显然(i,j)既会被计算在A[i]内,又会被计算在B[j]内 这就提示我们把每一行,每一列看做一个点 行点看做是X部,列点看做是Y部在第i行和第j行之间连边,表示一个点 原点向X部连边,Y部向汇点连边这道题的容量有一点讲究: 因为题...原创 2017-10-27 21:59:13 · 254 阅读 · 0 评论 -
UVa10806 - Dijkstra, Dijkstra.(费用流)
题目链接简介: 给出一个有n个节点,m条边的带权无向图,找到起点S到终点T的最短往返路线不能重复走同一条边简介: 这道题很像dijkstra求最短路和次短路 但是求解最短路次短路的时候,我们贯彻的是一种贪心思想,并且可以走重边 如果只是简单地把最短路上的边删除,再跑一边最短路,是会出错的 因此这道题就带有一点dp的味道了既像贪心,又像dp:网络流这道题的建图很简单, 因为我们要找出最短的原创 2017-10-28 07:56:41 · 295 阅读 · 0 评论 -
UVa11762 - Race to 1(概率期望+dp)
题目链接简介: 给出一个数字N,每次从不超过N的质数中选择一个P,如果P是N的约数 就把N变成N/P,否则不变,求把N变成1的期望步数分析: 本题可以看做一个随机转移的状态机: N的每个约数(包括N和1)对应一个状态 每个状态的转移都用一定概率(可以为0) 但是各状态转移的概率和总是1设f(i)表示当前数是i,接下来需要的期望步数 根据数学期望的线性和全期望公式可以为每个状态列出一原创 2017-10-28 09:24:40 · 312 阅读 · 0 评论 -
UVa11038 - How Many O's?(数位dp)
题目链接简介: n~m出现过多少次0分析: 之前做过更变态的 设计状态: f[i][j][k][0/1][0/1]表示第i位填的数是j,1~i位出现过k次0(不算前导零),1~i位是不是都是前导零,卡不卡上界初始化有一点。。额。。for (i=0;i<=a[1];i++) f[1][i][0][i==0 ? 1:0][i==a[1] ? 1:0]=1;第一为不管填的是什么,我们都认原创 2017-10-28 14:34:07 · 231 阅读 · 0 评论 -
UVa11645 - Bits(递推+高精度)
题目链接简介: A(n)表示n的二进制中有多少个“11”出现 计算A(0)+A(1)+…+A(n)分析: 一眼看出递推式:A(n)=A(n/2)+(n/2和n都是奇数 ? 1:0)这个式子算A(n)是很简单啦,但是求前缀和我就GG了这道题实际和 UVA 11038 这题类似,枚举中间,然后处理两边的情况。 不过本题最大的答案会超过ll,要用高精度,不过借鉴大佬的方法,直接用两个数字来保存一个原创 2017-10-28 15:16:56 · 247 阅读 · 0 评论 -
UVa10820 - Send a Table(phi)
题目链接简介: 有某个函数f(x,y),根据f(x,y)可以很简单的算出f(x*k,y*k) 现在的问题是,要想算出0 < x,y <=n范围内的所有f,要记录多少原始值呢分析: 一旦知道了这道题的本质,就一点都不难了,所以这道题的重点在于转化: 不难发现,一旦x和y的gcd的不是1的话,我们都可同时约掉gcd(x,y),因此这样的x和y是不需要记录的 换句话说:x,y必须互质问题就转化成原创 2017-10-28 19:47:40 · 186 阅读 · 0 评论 -
UVa1635 - Irrelevant Elements(二项式定理)
题目链接简介: 对于给定的n个数a1,a2,a3,… ,an,依次求出相邻两个数的和,得到一个新数列 重复上述操作,直到最后变成一个数 问这个数除以m的余数与那些数无关分析: 我们不妨先来看一个简单的例子: 当n=5的时候,“1 4 6 4 1”正好是杨辉三角的第4行ai的系数就是C(n-1,i-1)这样,问题就变成了C(n-1,i)中那些是m的倍数我们可以通过式子: C(n,k)=原创 2017-10-29 07:43:27 · 259 阅读 · 0 评论 -
UVa1262 - Password(解码问题)
题目链接简介: 给出两个6行5列的字母矩阵,一个密码满足:密码的第i个字母在两个字母矩阵的第i列均出现 然后找出字典序为k的密码,如果不存在输出NO分析: 本题是一道经典的解码问题 我们先统计每一个位置上能放哪些字符: 对于第一个样例来说,我们得到ACDW、BOP、GMOX、AP、GSU 要确定第一个字母,如果1≤k≤72,则是A;如果73≤k≤144,则是C,以此类推当然这道题还有一个原创 2017-10-29 09:38:01 · 381 阅读 · 0 评论 -
UVa1636 - Headshot(概率初步)
题目链接简介: 你和人决斗 决斗规则如下:用一把有n个弹槽的左轮手枪,对着自己脑袋来一枪,孰生孰死看天意。现在对方已经装了若干发子弹,并随机转了一下转轮,子弹呢用一个01序列表示,0表示这个弹槽无子弹,1表示有子弹。对方先对着自个脑袋开了一枪,嗯,你只听到了一声’click’,人还好好的,是空枪。现在轮到你了,摆在你面前的有两个选择,一是直接对自己开射,二是转一下转轮再来开射,显然你会选择生还希原创 2017-10-29 11:00:10 · 245 阅读 · 0 评论 -
UVa12105 - Bigger is Better(数位|贪心)
题目链接简介: 用n根火柴拼出尽量大的能被m整除的数分析: 有一种非常显而易见的dp方法: f[i][j]表示用i根火柴拼出的“%m是j”的最大整数 转移方程:f[i+c[k]][(j*10+k)%m]=max{f[i][j]+k}时间复杂度是O(10*nm),看上去好像非常优秀 但是这样的状态值是高精度(能拼成的数可能很大),因此实际计算量非常大 (再说有人愿意随手写一个高精度吗。。。原创 2017-11-06 20:41:42 · 461 阅读 · 0 评论 -
UVa10491 - Cows and Cars
题目链接简介: 给出a,b和c,表示有a + b 个门, a个后面是牛, b个后面是车, 从中选一个门,之后有一个知情人帮你打开c个后面是牛的门(因为1≤c< a,所以就算第一次选中牛,知情人还是可以打开c个门),然后你在没有打开的门中选一个,问第二次选的门后面是车的概率。分析: 仔细阅读题面之后,我们可以分成以下两种情况:第一次选中牛,概率是a/(a + b),然后打开c个后面是牛的门,原创 2017-10-29 13:57:46 · 259 阅读 · 0 评论 -
UVa11181 - Probability|Given(条件概率)
题目链接简介: 有n个人去逛超市,每个人都有不同的概率买东西 逛完之后,有r个人买了东西,计算每个人买了东西的概率分析: “r个人买了东西”这个事件叫E,“第i个人买了东西”这个事件叫Ei 我们要求的是:P(Ei|E) 条件概率: P(A|B)=P(AB)|P(B)那么怎么求解P(E)呢: 因为最多只有20个人,我们可以枚举每个人是否买了东西(1为买了,0为没买) P(E)就原创 2017-10-29 14:30:56 · 382 阅读 · 0 评论 -
UVa1637 - Double Patience(概率+dp)
题目链接简介: 有九堆poker,每堆4张,每次从任意两堆的顶部选两张相同花色的拿走 都拿走就胜利了,问胜利的概率:分析: 用九元组表示当前状态(每一队还剩下多少张牌) d[i]表示状态i获胜的概率 由全概率概率公式可以得到,d[i]就等于ta所有后继状态获胜的平均值tip当前状态若没有后继状态时,d[i]=0 不然会发生运算溢出数组清零//这里写代码片#include<cstdio>原创 2017-10-29 15:34:07 · 306 阅读 · 0 评论 -
UVa12230 - Crossing Rivers(期望初步)
题目链接简介: 有个人去上班的路上会经过N条河,家和公司的距离为D,默认在陆地的速度为1,给出N条河的信息,包括起始坐标p,宽度L,以及船的速度。船会往返在河的两岸,人到达河岸是,船的位置是随机的(包括方向)。问达到公司所需要的期望时间。分析: 人在路上花费的时间是一定的:D-sum(L) 当我们到达了河边之后,最好的情况是船正好靠岸,这时候只需要L/v的时间即可 最坏情况是船刚刚离开,我们原创 2017-10-29 17:00:29 · 258 阅读 · 0 评论 -
UVa11732 - "strcmp()" Anyone?(Trie【左儿右兄)
题目链接简介: 给出c++中strcmp函数: 给出n个字符串,问两两cmp,==操作执行的次数分析: 我们不考虑暴力的两两枚举 首先把所有的串扔到一棵trie树上 看题目给出的例子,than和that的前三个字符相同,比较次数为7 实际上:当字符串a和字符串b不完全相等时,比较次数为len(LCP)*2+1否则为2*len(a)因为这道题的结点数较多,我们在存储的时候用的是左儿原创 2017-10-29 19:19:48 · 292 阅读 · 0 评论 -
UVa11468 - Substring(AC+dp+概率)
题目链接简介: 给出一些字符和各自出现的概率,随机选择L次后将得到一个长度为L的随机字符串S, 再给出K个模式串,计算S中不含任何一个模式串的概率分析: 这道题就是文本生成器的变式 我们先把所有串扔到一个AC自动机上所有单词结尾都设成false(不能到达) 在建立fail指针的时候,用失配的可到达性维护结点的可到达性ed[ch[now][i]]|=ed[fail[ch[now][i]]];原创 2017-10-30 07:06:42 · 430 阅读 · 0 评论 -
UVa10534 - Wavio Sequence(LIS)
题目链接简介:合唱队形,但是序列长度一定要是奇数分析: 解题思路和和合唱队形一样,但是每个位置的答案为 min(f1[i]+f2[n-i+1])*2-1//这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N=10010;in原创 2017-10-22 08:39:45 · 218 阅读 · 0 评论 -
UVa11404 - Palindromic Subsequence(LCS)
题目链接简介: 删除若干个字符,使字符串变成回文字符串分析: 之前就已经说过,回文字符串的长度就等价于把字符串翻转之后求一个LCS 但是这道题的难点在于方案输出: 我们要怎么找到字典序最小的方案呢?我们用string解决这个问题,在转移的时候同时维护字典序最小的LCSif (a[i-1]==b[j-1]){ f[i][j].len=f[i-1][j-1].len+1; f[原创 2017-10-22 09:06:08 · 254 阅读 · 0 评论 -
UVa11107 - Life Forms (SA+二分)
题目链接tip因为我们在字符串之间加入了不同的字符 所以字符集的大小就变成了128 这就带来了很多麻烦。。。写完sa之后,一定要确认一下模板准确无误原创 2017-10-30 08:55:54 · 343 阅读 · 0 评论 -
LA 4513 Stammering Aliens(字符串hash)
题目链接Dr. Ellie Arroway has established contact with an extraterrestrial civilization. However, all efforts to decode their messages have failed so far because, as luck would have it, they have stumbled原创 2017-10-30 14:46:13 · 377 阅读 · 0 评论 -
UVa11552 - Fewest Flops(dp)
题目链接简介: 把长度为S的字符串从左到右,每k个为一组,同组之间可以互相交换位置 使得重排后的字符串包含尽量少的块,其中每个块为连续的相同字符分析: 我设计的状态是这样的 f[i][j] 表示第i个块最后的字符为j,得到的最小块数 转移就需要枚举当前块的最后字符和上一个块的最后字符d=f[i-1][p]+(第i块包含的不同字符) if (第i块中有p这个字符而且j!=p) d - -原创 2017-10-22 11:02:56 · 220 阅读 · 0 评论 -
UVa10564 - Paths through the Hourglass(dp)
题目链接简介: 沙漏型的三角形取数,输出方案数分析: S的范围很小,这就提醒我们可以枚举 于是我在朴素的三角形取数的状态上又加一维 f[s][i][j] 表示到(i,j)这个点,和是s的方案数注意倒三角中,f[i][j]从f[i+1][j]和f[i+1][j-1]转移正三角中,f[i][j]从f[i+1][j]和f[i+1][j+1]转移方案的输出: 我们直接迭代for (int i=1;原创 2017-10-22 14:01:17 · 199 阅读 · 0 评论