
思维巧妙
文章平均质量分 61
BRCOCOLI
初学者 记录成长 Fighting
展开
-
HDU 1005 Number Sequence(循环节) *
思路来自:http://blog.sina.com.cn/s/blog_a16dd6d101014pjy.html因为首先,任意一个数mod7结果为0到6这7个值,两个数就有7*7种组合所以只要计算50此肯定会有个循环#include #include #include #include #include #include #include #include using原创 2017-02-15 22:35:42 · 255 阅读 · 0 评论 -
UVA 1626 Brackets sequence
状态表示:d(i,j) 表示 i~j至少要添加几个括号状态转移:1)(S) 或 {S} 转移成 S ,即d(i,j) --> d(i+1,j-1) 如果 s[i]==s[j] 2) A=S1+S2 转移成 S1和S2 ,即 d(i,j0 --> d(i,k)+d(k+1,j) 但每种都要转移到第二种方法试一试 ,如[][]只是第一种会导原创 2016-07-14 18:51:17 · 259 阅读 · 0 评论 -
LA 3716 DNA Regions 数形结合 -
题目地址:http://vjudge.net/problem/UVALive-3716和LA4726 一样,前缀和保存1~i个的不同的数量于是得到 点p(i,sum(i)),ans=min{k=((sum(j)-sum(i-1))/(j-i)|k满足题意 }那么就是对于每个点t,扫描它之前的点,找出一个 斜率最小且满足题意的点还可以再优化,下凸点在后面是没用原创 2016-11-15 21:55:59 · 351 阅读 · 0 评论 -
LA 5052 Genome Evolution -
题目地址:http://vjudge.net/problem/UVALive-5052题目意思就是 A中[i,j] (j>i) 中的元素数量要和 B中[a,b] (b>a)中的 一样,问有几组?最主要是保存数字的位置关系 (连续)第一思路:因为只要是连续就好了 , 想想前缀和的方法: sumA[i]保存 1~i个元素中 n这个数有m个, 然后找sumA[j]-sumA[i原创 2016-11-15 09:55:52 · 267 阅读 · 0 评论 -
LA 4356 Fire-Control System -
题目地址:http://vjudge.net/problem/UVALive-4356肯定是暴力暴力 先定半径,枚举点效率高点点可以事先极角排序,就可以利用atan2算角度,atan2算的是与x正半轴的夹角(180,180],排序后是顺时针的转,所以两个角度相减得到的是顺时针转的角度,当转过一圈,就要加2*PI然后可以枚举半径,得到所有的小于R的点,枚举每个点出发,计算包含原创 2016-11-13 21:54:31 · 264 阅读 · 0 评论 -
UVA 1451 Average 数形结合+单调队列 *
题目地址:http://vjudge.net/problem/UVA-1451#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)const int maxn=100000+5;char原创 2016-11-12 09:01:08 · 289 阅读 · 0 评论 -
LA 3602 DNA Consensus String .
题目地址:http://vjudge.net/problem/UVALive-3602第二次写,二周目#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(b);++i)char A[50+1][1000+3],Ans[1000+3];std::map idx;const char DNA[]="ACGT"原创 2016-10-20 21:21:35 · 314 阅读 · 0 评论 -
LA 3213 Ancient Cipher -
题目地址:http://vjudge.net/problem/UVALive-3213是比较每个字母出现的频率数组越位一位,导致一直WA...#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(b);++i)#define REPD(i,a,b) for(int i=a;i>=(b);--i)#defi原创 2016-10-20 18:18:27 · 430 阅读 · 0 评论 -
UVA 1471 Defense Lines 单调队列 -
题目地址:http://vjudge.net/problem/UVA-1471#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)const int maxn=200000+5;int a原创 2016-11-11 08:54:53 · 263 阅读 · 0 评论 -
LA 3983 Robotruck DP+滑动窗口 *
题目地址:http://vjudge.net/problem/UVALive-3983d[i]表示从原点出发,经过前i个点,且回垃圾桶倒垃圾的最短路径#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(b);++i)#define REPD(i,a,b) for(int i=a;i>=(b);--i)#de原创 2016-10-20 09:36:31 · 300 阅读 · 0 评论 -
UVA 10859 Placing Lampposts 树型DP -
题目地址:http://vjudge.net/problem/UVA-10859很明显是DP;但关键是怎么DP题目优化的方向是a放置的灯数尽量少,被两盏灯照亮的边数b尽可能大,也就是c被一盏灯照亮的路尽可能小,a-b=c,所以c越小,b越大综上就是,x=a+c越小越好而且题目要求a为首要条件,b为次要条件,于是增加a的比重 x=M*a+c,便成为x=M*a+c越小越好,注意M不是越原创 2016-10-20 07:42:58 · 290 阅读 · 0 评论 -
UVA 11636 Hello World! 水 .
题目地址:http://vjudge.net/problem/UVA-11636保证每次复制粘贴的数量越多越好n为奇数的话,1个保留,n-1个都用复制来解决n为偶数直接对半就好了#include using namespace std;int main(int argc, char const *argv[]){ int kase=0,n; while(scanf("%d原创 2016-10-20 13:05:22 · 264 阅读 · 0 评论 -
UVA 11825 Hackers' Crackdown DP+状态压缩 -
题目地址:http://vjudge.net/problem/UVA-11825题目难在怎么转化因为题目求的是完全瘫痪,也就是所有的计算机都没有运行将一个计算机及其相邻的计算机表示成集合A,如第一行的 2 1 2,表示为111为了使所有的计算机都没有运行,就是求A这种集合任意组合能使 他们交集全为1,如A1=000111,A2=111000,A3=001100,那么000~111总原创 2016-10-19 19:47:10 · 233 阅读 · 0 评论 -
LA 4394 String painter 区间DP -
题目地址:http://vjudge.net/problem/UVALive-4394很明显的区间DP区间DP的套路就是 d[i][j]的在区间 (i,j) 刷的次数转移也一般是 d[i][j]->d[i][k]+d[k+1][j]; 也就是一个区间分成两个区间那么对于这道题就是想想怎么转移,也就是怎么将一个区间转移成两个区间d[i][j]->d[i][k]+d[k+1原创 2016-11-26 11:23:53 · 474 阅读 · 0 评论 -
POJ 1205 Water Treatment Plants JAVA高精度+DP *
题目地址:http://poj.org/problem?id=12051.把自己的污水排到河里V2.把自己的污水送到右边>3.把自己的污水送到左边至少要有一个城市排水。要求给N个城市,方案种数。用递推的方法,从1个到n个定义A(n)为n个城市的总数,也就是这n个城市可以解决排水问题那么就尝试从n个城市推到n-1假设:原创 2017-01-01 19:13:31 · 412 阅读 · 0 评论 -
HDU 1267 下沙的沙子有几粒? + HDU 1133 Buy the Ticket 递推 *
HDU 1267 下沙的沙子有几粒?思路来自:http://www.cnblogs.com/jiangjing/archive/2013/01/18/2866168.html思路:递推公式为:a[m][n]=a[m-1][n]+a[m][n-1];然后当n=0的时候无论m取何值都是1,递推公式怎么推来的呢?我现在说下我的思路吧!假设3个H和2个D是由2个H和2个D还有3个H一个原创 2017-02-13 22:44:40 · 330 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1506#include #include #include #include #include #include #include #include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)b;i++)原创 2017-02-21 15:18:57 · 248 阅读 · 0 评论 -
HDU 1290 切蛋糕 (献给杭电五十周年校庆的礼物) *
单单二维切圆的时候是 g(n)=g(n-1)+n得出 g(n)=(n*n+n+2)/2加上三维横着切最好,每次可以增加 g(n-1)所以 f(n)=f(n-1)+g(n-1);思路来自:http://blog.sina.com.cn/s/blog_ab20767501017kvp.html最简单的就是用待定系数法,直接解方程#include #include #原创 2017-02-11 17:11:40 · 475 阅读 · 0 评论 -
HDU 1722 Cake *
假设 p=2,q=3即把他们重合,尽可能多的边重合即重合的边就是 gcd(p,q)所以答案就是 p+q-gcd(p,q)#include #include #include #include #include #include #include #include using namespace std;#define REP(i,a,b原创 2017-02-11 15:27:16 · 286 阅读 · 0 评论 -
HDU 1568 Fibonacci 公式 *
题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2§ionid=2&problemid=1试了用JAVA WR思路来自:http://blog.youkuaiyun.com/niushuai666/article/details/7013352#include #include #include #in原创 2017-02-10 22:47:40 · 256 阅读 · 0 评论 -
HDU 1058 Humble Numbers -
#include #include #include #include #include #include #include #include using namespace std;#define REP(i,a,b) for(int i=a;i<(int)b;i++)#define REPD(i,a,b) for(int i=a;i>=(int)b;i--)#define原创 2017-02-16 20:55:45 · 223 阅读 · 0 评论 -
LA 2572 Viva Confetti 离散化 *
题目地址:https://vjudge.net/problem/UVALive-2572离散化:把每个圆看成是一段一段弧组成的每个圆拿出来看一下,先求其上与其他所有圆的交点。每两个交点之间的那段弧要么可见要么不可见,在弧上任取一个点(这里取的的中点),将该点向内(圆心方向)和向外移动一个微小的eps距离,为p1,p2,看看p1和p2是否在最上层的圆内,如果在内部,那么该圆可见#原创 2017-01-07 12:40:49 · 375 阅读 · 0 评论 -
UVA 11796 Dog Distance .
题目地址:https://vjudge.net/problem/UVA-11796想法:对于A和B一起的每一线段,它们之间差的距离肯定要么是增函数,要么是减函数,所以答案只存在A处于莫个端点或B处于某个端点的时候所以 剩下的目标就是如何枚举每一线段,然后更新其中我还弄错了一个地方,我以为取答案的两个点肯定是在端点上,然而 不一定在端点上,那么在一起运动的时候,难得就是它们速度不一样,一原创 2017-01-05 11:19:21 · 332 阅读 · 0 评论 -
POJ 2084 Game of Connections 卡特兰数+JAVA -
题目地址:http://poj.org/problem?id=2084递推地方法:假设有n对点,答案为f(n)假设第一个点连接了第2*k+1个点,那么此时答案为f(k)*f(n-k-1),左边k对点和右边n-k-1对点利用加法原理,n对点,一共有∑f(k)*f(n-k-1) {k>=0&&k也就是卡特兰数利用BigInteger就好了import java.util.*原创 2017-01-02 14:55:50 · 282 阅读 · 0 评论 -
POJ 1401 Factorial 阶乘0的数量 .
题目地址:http://poj.org/problem?id=1401我是从5的次幂数入手,看了网上的才发现原来可以那么简单.....以下摘自其他博客思路: 这一题要求的是N!中末尾0的个数,其实也就是所包含因子10的个数。10=5*2,因子10的个数也就是因子2的个数与因子5的个数中较小的那个,N!=1*2*3...*N,其中2的因子个数一定不少于5的因子个数,所以要求的其实原创 2017-01-03 14:17:19 · 401 阅读 · 0 评论 -
POJ 3199 Uncle Jack JAVA .
题目地址:http://poj.org/problem?id=3199因为不是所有人必须要分到所以可以那么想:将m个CD分发给n个孩子,先分第一个,有n个可能再分第二个,有n个可能再分第三个,有n个可能......所以一共有 n^m种import java.util.*;import java.math.*;import java.text.*;i原创 2017-01-02 19:07:02 · 357 阅读 · 0 评论 -
LA 4253 Archery -
题目地址:http://vjudge.net/problem/UVALive-4253二分x轴上的点,再用角度的区间表示能否射到#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)con原创 2016-10-30 07:59:01 · 355 阅读 · 0 评论 -
UVA 10891 Game of Sum 博弈DP -
题目地址:http://vjudge.net/problem/UVA-10891题目是博弈,双方都是采用最优的解法,所以要枚举所有可能的取法状态:d[i][j]代表i~j,先手A取得的最大得分状态转移:A取i~k ,ki 复杂度为O(n*n) ,选择分数高的作为决策即A若取i~k, 那么还剩下k+1~j 记忆化递归法:#include using namespace原创 2016-10-19 16:30:03 · 222 阅读 · 0 评论 -
UVA 11054 Wine trading in Gergovia .
题目地址:http://vjudge.net/problem/UVA-11054#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)typedef long long LL;int mai原创 2016-11-09 20:33:23 · 222 阅读 · 0 评论 -
UVA 3635 Pie .
题目地址:http://vjudge.net/problem/UVALive-3635#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(b);++i)const double PI=acos(-1.0),EPS=1e-5;const int maxn=10000+5;int N,F;double Area原创 2016-10-13 13:29:15 · 199 阅读 · 0 评论 -
UVA 10795 A Different Task 汉诺塔加强版 *
题目地址:http://vjudge.net/problem/UVA-10795参考自刘汝佳的思路以下是个人理解:普通的汉诺塔肯定都做过了,就是把一叠碟子放到另一根上看到这个问题就很自然地想到普通的汉诺塔问题,于是也便想怎么转化成普通的汉诺塔问题:一堆放在另一堆上,需要2^(n-1)-1步那么是不是可以定义一种中间状态,并且这个中间状态可以运用到普通汉诺塔,那么答案就是原创 2016-10-13 08:37:30 · 321 阅读 · 0 评论 -
UVA 11384 Help is needed for Dexter 找规律 .
题目地址:http://vjudge.net/problem/UVA-11384我是打表出来然后看出来规律的刘汝佳的递推更加完美一点f(n)=f(n/2)+1;#include using namespace std;int main(int argc, char const *argv[]){ int n; while(scanf("%d",&n)==1) cout原创 2016-10-12 21:13:39 · 237 阅读 · 0 评论 -
LA 4794 Sharing Chocolate .
题目地址:http://vjudge.net/problem/UVALive-4794为什么刘汝佳的思路永远天经地义的对,而我的就是错错错,不,是没有思路这道题问题难在怎么定义状态:我靠,那么多奇形怪状的巧克力,长宽任意的,怎么表示啊!那就别想怎么表示一个r*c的巧克力的,反正也办不到换个思路,想想怎么切,一整块只能横着切或者竖着切,比如说r*c的,可以变成r*(c-c0)和r原创 2016-10-23 16:15:29 · 402 阅读 · 0 评论 -
UVA 111100 The Trip, 2007 贪心 *
题目地址:http://vjudge.net/problem/UVA-11100题目求最小分组,所以肯定使用二分的方法那么变成,分为k个分组可不可行的问题数据量是1e4,所以只能是nlogn以下的算法自己猜想:1)注意到题目中表明n不超过1e6 ,用个数组保存数的个数,如1,1,2,2,2,3表示成2,3,1,正好能2组,但不知道怎么判断2)1)想半天,感觉贪心靠谱点想原创 2016-10-23 11:47:58 · 197 阅读 · 0 评论 -
LA 4254 Processor 贪心+二分 *
题目地址:http://vjudge.net/problem/UVALive-4254计算机的速度可以是任何值,题目求的是最大速度的最小值那么很明显就是二分查找最优解题目就转化为:给定一个是计算机速度,求该速度下能否达成目标原创 2016-10-22 17:28:06 · 395 阅读 · 0 评论 -
UVA 11464 Even Parity 暴力 .
题目地址:http://vjudge.net/problem/UVA-11464竟然是暴力,而不是找规律#include using namespace std;#define REP(i,a,b) for(int i=(a);i<=(b);++i)const int maxn=15+2;const int INF=0x3f3f3f3f;int A[maxn][maxn],B[m原创 2016-10-11 19:45:03 · 261 阅读 · 0 评论 -
LA 2995 Image Is Everything *
题目地址:http://vjudge.net/problem/UVALive-2995用个pos数组保存每一个小正方形的假设颜色view表示在k面,i行k列看到的颜色,假如一个小正方形从一个面看到的颜色和另外一个面的颜色并不一样那么这个小正方形肯定没有,直接删去,反复此操作,直到所有的颜色从各个面看过来都一样#include using namespace std;const原创 2016-10-11 16:57:58 · 268 阅读 · 0 评论 -
UVA 10905 Children's Game 水 .
题目地址:http://vjudge.net/problem/UVA-10905数据量那么少,直接暴力就好了1)长度一样的时候,比较字符串大小就好了2)不一样的时候,一个放前面,或者后面都试一下就好了#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(b);++i)#define REPD(i原创 2016-10-21 19:48:41 · 197 阅读 · 0 评论 -
UVA 10382 Watering Grass 区间覆盖问题 -
题目地址:http://vjudge.net/problem/UVA-10382第一想法:1)ri*22)肯定为了让决策有序化,按p排序3)很明显 ,状态两种:开与不开,而且位置固定的,那么就可以看成由n个区间,求能覆盖整个区间的最小数量,那不是就贪心的区间覆盖问题嘛原创 2016-10-21 19:11:01 · 302 阅读 · 0 评论 -
LA 3708 Graveyard -
题目地址:http://vjudge.net/problem/UVALive-3708找规律,因为原来的一个雕塑可以看作不动的,所以放置后的雕塑的位置和之前的位置都知道了,所以只需要判断要移动的每个点移动的最短路径就好了#include using namespace std;#define abs(a) ((a)>0?(a):-(a))int main(int argc, char原创 2016-10-11 13:02:59 · 252 阅读 · 0 评论