自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (4)
  • 收藏
  • 关注

原创 hdu4333Revolving Digits 扩展kmp

//给出一个长度为n的(n<<100000)字符串//将这个字符串通过旋转可以得到n个字符串//问这n个字符串有多少个不同的大于,等于,小于原来的字符串的个数//通过将这个字符串t复制一个再其后面得到一个新的字符串s=t+t//在用扩展kmp求出新的字符串后缀与原来字符串的最长公共前缀//对于ex[i]>=n肯定相等,否则只需要比较一下他们后面的一个数的大小//至于重复次数可以用kmp

2015-10-31 13:40:35 297

原创 hdu3746Cyclic Nacklace kmp补齐循环节

//给出一个字符串,问在其前或者其后最少需要添加几个//字符才能使其为一个循环字符串//kmp求出Next数组//然后循环节的长度为n - Next[n]#include#include#include#includeusing namespace std ;const int maxn = 1e5+10 ;int Next[maxn] ;string p ;void ge

2015-10-31 12:02:46 255

原创 hdu4300Clairewd’s message kmp

//给出密码的翻译表//一段码文前面是密文,后面是明文//现在有一个不完整的码文//问其最短的可能的码文是什么//将这个码文全翻译放在前面//将其原来的码文放在后面//求最后一个位置的最长前缀后缀#include#include#include#includeusing namespace std ;const int maxn = 2e5+10 ;string s ;

2015-10-29 21:15:16 293

原创 hdu2594Simpsons’ Hidden Talents kmp水题

//给出两个字符串//求第一个字符串的最长前缀是第二个//字符串的后缀//将两个字符串加在一起,再求一个Next数组就行#include#include#include#includeusing namespace std ;const int maxn = 1e5+10 ;string s ;string p ;int Next[maxn] ;void get_next

2015-10-29 20:14:50 225

原创 hdu3374String Problem kmp+最大最小表示法

//给出一个序列,求其最大最小表示法的最小位置 //并且求出有多少这样的最小最大表示法 //对于次数,就是循环节的个数,用kmp就能求出来 #include #include #include #include using namespace std ; const int maxn = 1e6+10 ; string str

2015-10-29 19:53:15 318

原创 hdu2609How many 最小表示法

//n(n<=10000)个字符串,字符串的长度l<=100//问这n个字符串中有多少不同得字符串//两个字符串相同只要其循环同构//先求出每个字符串的最小表示法//用map存下就行#include#include#include#includeusing namespace std ;const int maxn = 1e4+10 ;map ma ;string str

2015-10-27 22:49:27 366

原创 poj1961Period kmp

//给定一个循环序列,求其循环次数大于1的最长节的长度//和其循环的次数#include#include#includeusing namespace std ;const int maxn = 1e6+10 ;char p[maxn] ;int Next[maxn] ;void get_next(int n){ Next[0] = -1 ; int j =

2015-10-27 20:00:15 290

原创 hdu3336Count the string kmp

//给出一个序列,求出这个序列的所有的前缀//在这个序列中出现的次数//用kmp处理出next,然后对于每一个next[i] > 0的位置,找//next[next[i]]的位置,看其是否大于0#include#include#includeusing namespace std ;const int maxn = 2e5+10 ;const int mod = 1e4+7 ;

2015-10-22 22:45:10 292

原创 hdu1711Number Sequence kmp模板题

参考博客:http://blog.csdn.net/v_july_v/article/details/7041827#include#include#includeusing namespace std ;const int maxn = 1e6+10 ;const int maxm = 1e4+10 ;int s[maxn] ;int p[maxm] ;int Next[ma

2015-10-22 20:28:41 304

原创 hdu5396Expression 区间dp

//n(n<=200)个数字,n-1个运算符,运算符分别是"+,-,*"//可以改变运算符大的运算顺序,那么有(n-1)!中运算结果//问所有这些结果的和//区间dp应该很好想到//dp[i][j] 表示从i开始的j个数的(j-1)!中运算结果之和//枚举最一个运算的运算符的位置//那么对于'*'操作由于其分配率可以直接左右区间相乘就行//对于'+'和'-'操作需要乘上另一个区间的情

2015-10-21 22:35:41 414

原创 hdu5402Travelling Salesman Problem 构造

//有一个n*m的矩阵,矩阵中每个格子都为非负数//从(1,1)走到(n,m)路径的所有数的最大值//官方题解://首先如果nn为奇数或者mm为奇数,那么显然可以遍历整个棋盘。//如果n,mn,m都为偶数,那么讲棋盘黑白染色,//假设(1,1)(1,1)和(n,m)(n,m)都为黑色,那么这条路径中黑格个数比白格个数多11,//而棋盘中黑白格子个数相同,所以必然有一个白格不会被经过,所

2015-10-21 20:52:15 325

原创 hdu5411CRB and Puzzle 矩阵快速幂

//n个零件,一个模型最多可由m个零件组成//在每一个零件后面只能由特定的零件组装//问能够组成的模型的种类数//先构造一个n*n的矩阵A,那么对于每一个//A^(m-1)表示由m个零件组成,对应的零件的//的种类数//所以就是求A^1+A^2+...A^(m-1)//快速幂加一个二分可做#include#include#includeusing namespace std

2015-10-20 22:46:49 329

原创 zoj3735Josephina and RPG

//给出一个表map[i][j]表示第i个人物打败第j个人物的概率//现在给定一个挑战人的顺序,当挑战的人打败了现在挑战的//人,可以和他交换人物,刚开始可以选择任何人物//问打败所有人的最大概率为多少#include#include#include#includeusing namespace std ;const int maxn = 1e4+10 ;double dp[

2015-10-20 20:12:32 557

原创 zoj3762Alice's Print Service

//给出n中打印策略,s , p表示//表示打印的数目大于s时候,打印价格为p//m个问题,表示打印qi数目为q的最小的花费//先离线,将问题和打印策略都按照打印份数//升序排列,左边维护一个最小的价格,//右边维护一个最小的单价#include#include#include#includeusing namespace std ;const int maxn = 1e5+

2015-10-20 20:11:10 385

原创 2015 中国大学生程序设计竞赛解题报告

A. Secrete Master Plan给定两个2*2的方阵,问能否通过若干次旋转操作把第一个变成第二个水题模拟 C. The Battle of Chibi给定一个长为n(Dp[i][j] 表示长度为i且最后一位是j的种类数dp[i][j] += sum(dp[i-1][k]) (k这里的sum(dp[i-1][k]) 可以用树状数组优化 D.Pick

2015-10-20 20:02:34 1682

原创 hdu4810Wall Painting dp+异或

//给出n个数,求出所有从c(n,k)中情况//从这n个数中选出k个的到的所有数异或值之和//dp[j][k][0] 前i个数,选j个数,用二进制表示第k位是0的数的个数//dp[j][k][1] 前i个数,选j个数,用二进制表示第k位是1的数的个数#include#include#include#includeusing namespace std ;const int m

2015-10-13 21:19:41 445

原创 hdu5072Coprime

//给出n个数,问这n个数中,有多少//组a , b , c//gcd(a,b) = 1 , gcd(a,c) = 1 , gcd(b , c) = 1//或者gcd(a , b)!= 1 , gcd(a , c) != 1 , gcd(b , c) != 1//问有多少满足上述条件的组//可以构造一个图,对于两个数,互质连红边,不互质连蓝边//这个问题就变成这个图中的同色三角形的个数

2015-10-12 22:37:42 398

原创 hdu5074Hatsune Miku dp水题

#include#include#includeusing namespace std ;const int maxn = 110 ;int dp[maxn][maxn] ;int ss[maxn][maxn] ;int a[maxn] ;int main(){ int t ; scanf("%d" , &t) ; while(t--) {

2015-10-12 21:38:01 365

原创 hdu5073Galaxy dp

//n个数,最多移动k个数,使得这//n个数的segment((xi - X)^2)(1<=i<=n) //其中X为这n个数的平均数//可以考虑将k个数移动到剩下的(n-k)个数的//平均数中,然后就相当于,从n中选k个数其方差最小//然后可以将这n个数排一下序,选的n-k的数一定是//连续的,这个应该比较容易想到,然后//dp[i] 表示最后一个数为i的连续n-k个数方差//然后

2015-10-12 21:35:59 366

原创 hdu4417Super Mario 树状数组+二分

//给出n个数ai//m次询问l , r ,h//问区间[l,r]中小于h的数的个数//先离线,记录每次询问的区间的位置//然后可以用树状数组知道在为位置i小于h的数的个数//答案就是右边的个数减去左边的个数//ai和h很大,所以用二分记录数找位置#include#include#include#include#include#includeusing namespace

2015-10-10 21:16:29 360

原创 hdu4414Finding crosses 水题

#include#include#includeusing namespace std ;const int maxn = 50 ;char map[maxn][maxn] ;int n ;int dx[4] = {0 , 0 , 1 , -1} ;int dy[4] = {1 , -1 , 0 , 0} ;bool judge(int x , int y){ if(x

2015-10-10 20:08:14 498

原创 hdu4284Travel 状态dp

//n个城市,m条路,过每条路需要花费钱//在每个城市花费d[i]得到工作资格可以赚c[i]的钱//现在手上有num钱,问能否从1点开始,在给定的h(h<=15)个城市找到//工作在回到1点//除了这h点的其他点不能工作,可以经过这h个点不工作//可以先用一个floyd将任意两点的最短距离求出//由于h很小,可以用状态压缩来做,1表示已经在这个城市工作过,0表示没有//dp[i][j

2015-10-09 19:19:22 341

原创 hdu4283You Are the One 区间dp

//n个人,每个人有屌丝系数di//对于第i个人第j个出来,那么其不高兴值为(j-1)*di//可以用一个栈来控制这些人的出去顺序//问其怎样安排使得所有人的不高兴值最小为多少//用dp[i][j]表示从i开始的长度为j的区间的最小不高兴值//dp[i][j] = min(dp[i][j] ,min(dp[i][k] + dp[i+k][j-k] + k*sum[i+k][i+j-1]

2015-10-09 16:26:43 321

原创 hdu4278Faulty Odometer 数位dp

//一个数n为从1到n的数中每一位的数为3或者8时//跳过,如15229的下一个数为15240//问其实际的数为多少//直接数位dp就行#include#include#include#includeusing namespace std ;const int maxn = 20 ;int dp[maxn] ;int bit[maxn] ;int dfs(int pos ,

2015-10-08 21:02:54 254

原创 hdu4276The Ghost Blows Light 树形dp+分组背包

//给一棵树,N个点每个点都有财宝,//要在T时间从点1到点N且能得到的最大权值//一遍dfs记录从1到N的路径所要经过的点x个//然后通过这一条路径将这棵树拆开x个子树//对于这x棵子树dp[i][j]表示以i点为根的子树用时间j//最多能得到多少宝藏//用一个分组背包可以做#include#include#include#includeusing namespace st

2015-10-08 19:29:27 266

原创 hdu4268Alice and Bob 贪心+multiset

//a,b个有n张卡片,每张卡片都有高度和宽度//问a最多能盖住多少张b的卡片//一张卡片要盖住另一张的条件是高度h和宽度w都要大于另一张//很明显的贪心//对于b在a中h大于它的宽度找刚好大于等于它的//用multiset维护#include#include#include#include#includeusing namespace std ;const int max

2015-10-07 20:24:17 318

原创 hdu4751Divide Groups 二分图判断

//给出n个点,m条边,问能否可以分为两个部分//这两个部分的所有点的任意两条边都有边//可以看出是判断其补图是否为二部图//直接dfs判断一下就行#include#include#includeusing namespace std ;const int maxn = 110 ;int vis[maxn][maxn] ;int visit[maxn] ;int n ;b

2015-10-07 19:23:07 297

原创 hdu4750Count The Pairs 并查集

//给出n个点,m条边的无向图//对于一个给定的t//找出有多少对(s,t)使得从s到t的所有路线中//这些路线中权值最大得最小值小于等于t即可以//将边以权值从小到大排序//将询问以t从小到大排序//对于每一次加上一条边,如果将两个集合连接//那么可以将上的pair<s,t>为 (ss[fx]*ss[fy])*2个//再要询问值小于这个值的所有询问都加上(ss[fx]*ss[fy]

2015-10-07 18:36:09 333

原创 hdu4768Flyer 二分

//给出n个社团,每个社团对于//可以对编号为ai , ai+ci , ai + 2ci + ...ai+kci(ai+k*ci<=bi<ai+k*ci+ci)//发传单,最多有一个编号的同学受到的个数为奇数,如果有,找出这个同学//对于每一个区间,可以o(n)找出在这个区间的所有数的和,可以用二分找出//长度为1的和为奇数的区间#include<cstdio>#include<cstr

2015-10-07 18:26:53 337

原创 hdu4289Control 最大流

//给出n个点,m条双向边//每个点都有其对应的权值,问最少需要去除多少//点使得图不连通//对于每一个点进行拆点,然后求其最小割就行#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std ;const int maxn = 10010 ;const int inf

2015-10-07 18:23:48 354

原创 hdu4292Food 最大流

//n个人,每个人选一种食物和一种饮料//有f种食物和d中饮料//每个人对其中的一些食物和饮料喜欢//问怎样分配能使尽量多的人满意//用最大流可以做//一个超级源点连接食物,权值为这种食物的个数//一个超级汇点连接所有饮料,权值为饮料的个数//人为两个点,左边和食物相连,权值为1//右边和饮料相连,权值为1,左人和右人相连,权值为1#include<cstdio>#include

2015-10-07 18:22:05 304

原创 hdu4296Buildings 贪心

//给出wi , si , 求出对应//segma(wj)-si , segma(wj)-si为在第i个位置前面的所有位置wi之和//求出segma(wj)-si 的最大值的最小值//可以知道w越大越后,s越大越后,可以按照(s+w)越大越后排序#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>

2015-10-07 18:20:30 300

原创 hdu4293Groups dp

//n个人,每个人说出在他所在组前面的人的个数a和在他组后面的人的个数b//其中有些人说真话有些人说假话,问最多有多少有多少个人说真话//对于每个人所说的话,可以推测他所在区间为[a+1,n-b]//可以用dp[i] 表示右区间到i得到的最大的说真话的人的个数//用map[i][j]表示右区间为i其左区间前面一个数为j的人的个数#include<cstdio>#include<cstri

2015-10-07 18:18:57 298

原创 hdu4267A Simple Problem with Integers 线段树

// 1 a b k c 在区间[a,b]内满足条件 (i - a) % k == 0的位置加c//2 a 位置a的数//由于k<=10,所以可以开55棵线段树,存下相隔几个数取一个树,且这棵树的起点#include<cstdio>#include<cstring>#include<iostream>using namespace std ;const int maxn = 5e4+

2015-10-07 18:17:25 310

电子技术基础_模拟部分(第五版)_康华光_课后答案(无水印完整清洁版)

电子技术基础_模拟部分(第五版)_康华光_课后答案(无水印完整清洁版)

2015-10-30

Python学习手册

Python可移植、功能强大、易于使用,是编写独立应用程序和脚本应用程序的理想选择

2015-09-11

python基础教程(第二版)

python基础教程中文高清pdf【第二版】

2015-09-11

空空如也

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

TA关注的人

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