自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 滚去博客园了

= =觉得csdn的页面太单调了http://www.cnblogs.com/rolight/

2014-06-03 15:23:47 781

原创 AHU 6th 校赛总结帖

A.随便搞,我偷懒用了一个map。手贱给again加一个感叹号还WA了一发,o(╯□╰)o#include #include using namespace std; mapint,int> mp; int main() { int n; scanf("%d",&n); int mm,ss,v; scanf("%d:%d",&m

2014-04-01 16:10:19 847 2

原创 HDU 1025 Constructing Roads In JGShining's Kingdom

说了一大堆,其实就是求一个最长上升子序列,二分优化到nlogn就不会超时啦   #include #include #include #include using namespace std;const int maxn = 500000 + 5;const int INF = INT_MAX / 2;int top[maxn],r[maxn];

2014-04-01 16:10:17 557

原创 HDU 1078 FatMouse and Cheese

类似滑雪问题,在一个矩阵中求最大的上升路径累加和,并且在一个点一次可以走长度最大的为k的直线。并且起始位置一定是矩阵的左上角1,1。 把每个节点按照高度从低到高排序,然后枚举所有可能到达当前点的值,选其中最大的一个和当前点相加即可   #include #include #include using namespace std;struct Point {

2014-04-01 16:10:14 660

原创 LA3026 Period

题意大概是,给你一个字符串,如果该字符串的某一个前缀Si是由若干个相同的字符串循环构成,就输出i和最短循环节长度 利用KMP算法里面失配函数可以解决这个问题,失配函数f(i)可以定义为字符串的前缀Si-1中最长的与真前缀相等的真后缀的长度。如果当前字符串是由若干个字符串循环构成的话,必然有最长真后缀的长度加上最短循环节(也就是字符串开头的第一个循环节)长度的和应该恰好等于i 

2014-04-01 16:10:11 701

原创 AOJ 47 字符串匹配

KMP模板 #include #include using namespace std;const int maxn = 105;int f[maxn];char pat[maxn],str[maxn];inline void getfail() { int len = strlen(pat); f[0] = f[1] = 0;

2014-04-01 16:10:09 645

原创 HDU 1421 搬寝室

Problem Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和

2014-04-01 16:10:07 561

原创 HDU 1506 Largest Rectangle in a Histogram

题意大概是给你一幅柱状图,寻找里面最大的长方形的面积。一类很典型的动态规划问题,我之前一直不会。QAQl[i] r[i]分别表示以i这个柱子为长方形的高,两边最多能够延伸到的位置。如果l[i]的左边那一个的高度大于等于当前的高度,那么就可以延伸下去,一直更新到不能延伸下去为止。即 while(h[l[i]-1]>=h[i]) l[i]=l[l[i]-1];右边以同样的方式处理即

2014-04-01 16:10:05 574

原创 HDU 1081 To The Max

最大子矩阵和问题=。= 最朴素的方式是枚举矩阵左上角的点和右下角的点,然后计算和,复杂度是n^4这里可以利用动态规划来进行优化枚举子矩阵的起始行i和终止行j,然后将其求和使其转化为一维的数组,然后利用动态规划在O(n)的复杂度内求出最大和即可。复杂度是n^3对于n #include #include #include #include using n

2014-04-01 16:10:03 582

原创 HDU 1058 Humble Number

题意大概是,2,3,5,7的和他们的整数倍数的数都称为Humble Number,将所有的Humble Number从小到大排列,现在输入N(N  考虑到一个一个数是Humble Number,那么他的2,3,5,7倍一定也是HUmble Number,因此只要想办法处理怎么样让其从小到大一个一个输出就好。 网上看到一个比较巧妙的办法,在这里记录下来设f(n)为第n个Humbl

2014-04-01 16:10:01 585

原创 HDU 1271 整数对

Problem DescriptionGardon和小希玩了一个游戏,Gardon随便想了一个数A(首位不能为0),把它去掉一个数字以后得到另外一个数B,他把A和B的和N告诉了小希,让小希猜想他原来想的数字。不过为了公平起见,如果小希回答的数虽然不是A,但同样能达到那个条件(去掉其中的一个数字得到B,A和B之和是N),一样算小希胜利。而且小希如果能答出多个符合条件的数字,就可以得到额外的糖果。

2014-04-01 16:09:59 568

原创 Poj 1082 食物链 带权值的并查集

Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物,用上述两种说法,一句接

2014-04-01 16:09:57 596

原创 UvaLive 2965 中途相遇法

题意是给定n个大写字母组成的字符串。选择尽量多的串,使得每个字母的出现次数为偶数。   可以把每个单词转化成01串,然后用异或操作处理。 这里如果枚举所有情况的话复杂度是2^n,白书上面介绍了一种中途相遇法,可以把复杂度降低到2^(n/2)*logn甚至更低 方法是先穷举前n/2异或的所有可能值,如果有相同的保留最大的,可以用hash或者map存储映射关系。 然后穷举后n/2的所有可能值

2014-04-01 16:09:55 673

原创 UvaLive 3029 CityGame

简单的扫描算法 #include #include #include using namespace std;const int maxn = 1005;int T,M,N,mat[maxn][maxn],right[maxn][maxn],left[maxn][maxn],up[maxn][maxn];int main() { scanf("%d",&T

2014-04-01 16:09:53 563

原创 Uva 11549 CALCULATOR CONUNDRUM (floyd 判圈法)

假设有两个小孩子在跑道上面跑,如果跑道视环形的,那么速度快的那个小孩一定能追上速度慢的那个。   #include #include #include #include #include using namespace std;int next(int k,int n) { long long s = (long long)n; s = s * s;

2014-04-01 16:09:51 659

原创 UvaLive LA2678 Subsequence

寻找一个序列中和不小于S的最短子序列,n的时间预处理出前缀和,然后枚举末位置二分初始位置nlogn搞定#include #include #include using namespace std;const int maxn = 100001;int A[maxn],B[maxn];int main() { int n,S; while(~scanf

2014-04-01 16:09:49 810

原创 二分答案三连发

LA3971 Assemble你有b块钱,给出n个配件的个子的种类,性能和价格,每种类型的配件买一个,价格不超过b,因为有水桶效应,所以电脑的性能取决于性能最低的配件的性能,问你b块钱配的电脑性能最高有多少。 按照白书的说法,最大值尽量小,最小值尽量大之类的问题一般都可以用二分答案的方法来结局,这道题就是一道典型的最小值最大问题,所以采用二分答案 #include #inc

2014-04-01 16:09:47 737

原创 Uva 10795 A Different Task

汉诺塔问题的变形,给定初始局面和目标局面,问最少多少步可以把初始局面变成目标局面。 找到初始位置和目标位置不同的最大盘子X,那么比这个盘子还大的盘子就可以无视掉了。因为他们既不会被移动也不需要被移动。 我们设f(p[],x,final)为当前初始状态为p,要把比x小的盘子移动到柱子final的最少步数那么有f(p[],x,final)=f(p[],x-1,6-final-p[x])

2014-04-01 16:09:44 567

原创 Uva 11384 Help is needed for Dexter

给定一个1….n的正整数序列,每次操作可以从序列寻找出一个或多个正整数,然后同时减去一个相同的正整数。 通过画图可以发现只要把后一半都减去n/2就和前一半一样了,所以有递推式 f(n )=f(n/2) + 1 #include using namespace std;int f(int n) { return n == 1 ? 1 : f(n >> 1) + 1

2014-04-01 16:09:42 534

原创 Uva 11464 Even Parity

给你一个n*n的矩阵,你的任务是把尽量少的0变成1,使得每个数字的上下左右元素之和是偶数。 直接暴力肯定会超时,找到行与行之间的关系,可以发现只要枚举第一行的所有情况,后面行都可以算出来。 #include #include #include using namespace std;const int maxn = 16;const int INF =

2014-04-01 16:09:40 515

原创 UVA 11300 Spreading the Wealth

题意是一个圆桌上面做了n个人,每个人手头上有不同数目的金币(每个人手头的金币数目已知),然后他们需要通过相互交换来使得大家手头上面的金币数目相等,求最少流通值。 白书上面用了一个非常强劲的代数做法,觉得这个思想还是需要学习一下的。 因为人数和总的金币数是确定的,而且题目确保了一定除得进,所以最终情况下每个人手头的钱币数量是确定的,设为M,把人编号1,2,3,4,..n,设xi为编号

2014-04-01 16:09:38 578

原创 LA3708 Graveyard 墓地雕塑

题意是原本n个墓碑均匀分布在一个周长为10000的圆周上,现在加入m个,如果要使得n+m个墓碑都均匀分布的话,那么原来的墓碑最少的移动总距离是多少。 因为加入m个之后m+n个墓碑的位置是固定的,要是移动距离最少必定会有一个墓碑不动,将圆周分成m+n段,分别标上0,1,2,3,4。。然后需要移动的墓碑坐标就是数轴上面的非整数点,两边的值靠近哪个就选哪个,之后再等比例扩大即可。 #in

2014-04-01 16:09:36 687

原创 HDU 1864 最大报销额

01背包问题,设f[i]为拿了i件能得到的最大价值。关于限制条件Q只要在每次更新f[i]的值的时候都判断当前值是否是小于Q的最大值即可 #include #include #include using namespace std;const int maxn = 31;double f[maxn],val[400];int main() { in

2014-04-01 16:09:34 501

原创 HDU 2955 Robberies

题意大概是一个小哥要去抢银行,他列出了几个银行的价值和被抓概率,然后定了一个最高被抓概率,求最多可以抢多少价值的东西。一开始想成是被抓概率简单叠加了,写了个简单的背包就直接提交,WA..o(╯□╰)o不过确实是背包问题,不过求的值是逃跑概率,然后只要在能逃跑的范围内找最大价值就好了。 #include #include #include using namespac

2014-04-01 16:09:32 545

原创 NOIP 2006 金明的预算方案(带条件的01背包)

一个典型的有依赖的背包问题。这里每种物品最多只可能有三个附属品,我看错了题目条件,写了一个可能有n个附属品的版本。o(╯□╰)o可以将物品按照附属关系先进行分组,对每组都来一次01背包。 #include #include #include using namespace std;const int maxn = 100;const int maxv = 3

2014-04-01 16:09:30 900

原创 POJ 3264 Balanced Lineup (RMQ问题)

最简单的RMQ问题,这次改用ST算法来写,存下来当模板吧。ST算法通过nlogn的时间(也可以是O(n))预处理出d[i][j](起始位置为i长度为2^(j-1))区间的内的最值,递推式:d[i][j] = min(d[i][j-1],d[I+2^(j-1][j-1])查询的时候先找到一个k有2^(k+1)>(R-L+1)然后可得minv(L,R)=min(d[L][K],d[R-(1

2014-04-01 16:09:28 489

原创 HDU 2492 PingPong

大体思路就是枚举裁判位置,找逆序对数。练习一下用树状数组来寻找逆序对#include #include #include #define lowbit(x) ((x)&(-x))using namespace std;const int maxi = 100005;const int maxn = 20001;int C[maxi],num[maxn

2014-04-01 16:09:26 598

原创 POJ 1001 Exponentiation

最裸的高精度幂,记录一下Java里面高精度类的用法而已 1 import java.io.*; 2 import java.util.Scanner; 3 import java.math.*; 4 5 public class Main 6 { 7 public static void main(String[] args) 8 { 9

2014-04-01 16:09:24 528

原创 POJ 2049 Finding Nemo

这题剧情就是粑粑出发去找他那淘气的儿子。建模比较麻烦,把每个点的坐标扩大两倍然后把墙坐标点和房间都转化成相应的点来处理,然后存到二维数组中bfs。要注意的是儿子的初始坐标可能不在题目描述中的0,199的范围内,或者根本没有任何墙,出现这些情况的时候直接输出0就好了,不然吃RE,我就是狂吃了近10个RE去看discuss才发现的。。真是囧#include #include #

2014-04-01 16:09:21 602

原创 AOJ 401 Fibonacci & GCD

给定m,n求gcd(fib(m),fib(n))利用具体数学里面的一个公式,可以转化成求fib(gcd(m,n)),不过题目给的范围到了10^9,因此这里要采用矩阵连乘法来求斐波那契数。第一次写矩阵快速幂,写的比较挫#include #include #define mm 10003 using namespace std; struct mat {

2014-04-01 16:09:19 626

原创 AOJ 435 带小数高精度

以前没写过带小数的高精度,这题仅仅要求实现加法,我依旧写的做很挫,还WA了两次。注意求和之后去除后缀的无用0#include #include #include #include string>#define max(a,b) (((a)>(b))?(a):(b))using namespace std;class bign { publi

2014-04-01 16:09:17 649

原创 Aoj 560 取石子

简单的博弈DP爆搜改成记忆化搜索会爆栈,改成递推就好了。稍微用位运算优化了一下。。不过还是很慢#include #include #include #define Win 0#define Lose 1 using namespace std; int S[11],N,M;char note[100001]; inline ch

2014-04-01 16:09:15 569

原创 Aoj 418 ACM 排名

复杂模拟,注意如果解题数目和解题总时间是一样的情况下两个人的名次是一样的。人的名次等于比他做得好的人数+1还有时间如果不足10要补零#include #include #include string>#include #include set>#include #include using namespace std; struct time

2014-04-01 16:09:13 512

原创 HDU 3308 LCIS

最裸的求区间最大递增子序列,单点更新区间合并线段树,存下来当个模板吧 #include using namespace std;#define M ((L+R)>>1)#define lson rt<<1,L,M#define rson rt<<1|1,M+1,R#define max(a,b) (((a)>(b))?(a):(b))#define m

2014-04-01 16:09:11 499

原创 HDU 1540 Tunnel Warfare

有N个村庄,只要村庄没有被摧毁就可以相互联系,一个村庄可以通过村庄和其他村庄联系,敌人会摧毁某个特定的村庄,然后我放可以修复最近被摧毁的村庄,然后询问第k个村庄最多可以联系到几个村庄(包括自身)求最大连续值问题,线段树维护区间最大连续长度,然后区间合并。查询的时候累加左右两边的连续值即可,注意连续区间是否会断开。比较坑人的是这题是多组数据。。而且每个村庄可以被多次摧毁,此时不用更新标记

2014-04-01 16:09:09 499

原创 HDU 4417 Super Mario

线段树的离线查询,把查询存起来按照h排个序,把砖的高度也存起来按照h排个序,然后按需把砖头update进线段树就好了。 一开始傻了吧唧的h每增加一次rebuild一次树,后来才意识到build一次是nlogn的,我囧,还傻傻的搞了一些常数优化。。 最后看着改了一下,写得比较挫。。不过速度还是比较快的 #include #include #include using na

2014-04-01 16:09:07 545

原创 HDU 1754 I hate it

最裸的线段树单点替换,区间查找最大值。#include #include using namespace std;#define M ((L+R)>>1)#define lson rt<<1,L,M#define rson rt<<1|1,M+1,R#define root 1,1,N#define max(a,b) ((a>b)?a:b)con

2014-04-01 16:09:05 579

原创 HDU 1166 敌兵布阵

刚学习线段树,先写一个最裸的单点更新。听大大们说线段树是一种非常经典而又灵活的数据结构。一步步学起吧。这里先写个静态的版本。 模板是模仿某位大大的。。#include #define lson rt<<1,L,M#define rson rt<<1|1,M + 1,Rusing namespace std;const int maxn = 50001;

2014-04-01 16:09:03 553

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除