自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

熟睡的哲学家的博客

https://github.com/zmh69695328

  • 博客(36)
  • 资源 (2)
  • 收藏
  • 关注

原创 模板之快速幂和求逆元

ll mypow(ll a,ll b){ ll sum=1LL; while(b){ if(b&1) sum=(1LL*sum*a)%mod; a=(1LL*a*a)%mod; b>>=1; } return sum;}void ext_gcd(ll a, ll b, ll &d, ll &x, ll &y)//拓

2017-07-31 17:11:10 448

原创 RMQ之ST表维护区间极值

令d[i][j]表示从i开始,长度为2^j的一段元素中的最小值,用递推方式计算,d[i][j]=min(d[i][j-1],d[i+2^j-1,j-1),就是将[i,i+2^j]的这段区间一分为二,然后取两段区间的极值就可以了。2^j小于等于n,所以一般来讲数组第二维开30就够了。至于递推的计算顺序,j总是与前一项j-1有关,所以对j的循环放在外层,就不会破坏计算顺序。查询操作就是,令

2017-07-31 10:08:24 237

原创 Dart game UESTC - 927 计数,完全背包

题目大意:现在有1-20这些分值,每个数都可以得到i分,或者是i*2分,或者是i*3分。中间有一个25分,可以得到25分或者是50分。问你必须最后一次得分为2倍得分的方案数,使得得分加和为N分。方案不同的定义是分割的方法不同,对顺序没有要求,所有,最后一次为2的方案数=所有情况的方案数-没有2倍得分的方案数用类似完全背包的方法去统计一下答案就好了#i

2017-07-30 21:19:03 259

原创 过河 FZU - 2255 dp

Problem C 过河Accept: 3    Submit: 5Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description遥远的YS星球上,生活着两种物种名为Yellow和Star,简称物种Y和物种S。神奇的是物种Y的体重始终为50kg,物种S的体重始终为100kg。

2017-07-30 16:24:13 249

原创 迷宫 FZU - 2256 基础的树形dp

Problem 2256 迷宫Accept: 93    Submit: 288Time Limit: 1500 mSec    Memory Limit : 32768 KB Problem Description某一天,YellowStar在人生的道路上迷失了方向,迷迷糊糊之中,它误入了一座迷宫中,幸运的是它在路口处发现了一张迷宫的地图。经过它的观察,它发现

2017-07-30 11:31:54 253

原创 Salty Fish FZU - 2253 简单dp

Problem A Salty FishAccept: 108    Submit: 400Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description海边躺着一排咸鱼,一些有梦想的咸鱼成功翻身(然而没有什么卵用),一些则是继续当咸鱼。一个善良的渔夫想要帮这些咸鱼翻身,但是渔夫比较懒,所以只

2017-07-30 10:31:58 452

原创 英语考试 FZU - 2254 最小生成树

Problem B 英语考试Accept: 33    Submit: 188Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习。这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m。

2017-07-29 11:07:58 210

原创 Count UVA - 1645 递推 统计有根树 水

题意:求n个节点的有根数,有多少种情况满足每个深度中所有节点的子节点个数相同。设d[n]为有n个节点的满足题意的个数。可以这样考虑,根节点儿子的个数为i的情况有d[(n-1)/i]种,i整除(n-1).#include #include #include #include #include #include #include #include

2017-07-29 01:10:13 222

原创 Another a+b FZU - 2058 二分查找匹配值

a[i] + a[j] = M and 1初始的顺序其实没有关系排序以后,对于要查找与a[i]匹配的值,范围[0,i-1].#include #include #include #include #include #include #include #include #include #include using namesp

2017-07-28 22:38:24 249

原创 Magic FZU - 2280 字典树加树状数组

题意:给n个长度      有两种操作      2 k 选中第k个字符串,问你有多少个字符串满足w[i]      1 k y 把第k个字符串的权值修改为y用树状数组维护权值出现的个数,因为要满足后缀关系,所以用字典树反向插入,在节点位置标记,使得之后插入的字符串到达该节点时,更新个数,插入的顺序是长度从小到大,因为有相同字符串存在,所以为每个

2017-07-26 17:38:14 573

原创 POJ 2481 Cows 树状数组 区间包含

给定每个奶牛的能力值范围,求每个奶牛能力值被包含的个数,就是区间被其他区间包含的个数排序,按右端点从大到小排序,相等时,左端点从大到小。然后每次跟新左端点上的数量,+1,统计1-左端点中包含的端点个数。#include #include #include #include #include #include #include #include

2017-07-26 10:42:41 192

原创 GCD HDU - 1695 容斥原理+欧拉函数打表

求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1先转换成gcd(x/k,y/k)=1的对数,所以区间的范围为(1,b/k)和(1,d/k),设b是较小的那一个,统计的时候分为两部分,一个是(1,b/k),枚举i,i的范围(1,b/k),加上phi[i]。另一个是,它们区间的范围是(1,b/k)和(b/k+1,d/k),怎么统计呢?我们枚举i,b/k+1如

2017-07-25 10:37:49 217

原创 我的spfa

const int INF=1e9+100;int d[505];struct edge{int to,cost;};vector g[505];bool spfa(int n){ int cnt[505]; bool vis[505]; for(int i=1;i<=n;i++){ memset(vis,false,sizeof(vis));

2017-07-24 11:55:51 268 2

原创 计算几何常用函数

const double eps=1e-9;//精度const int INF=1<<29;const double PI=acos(-1.0);int dcmp(double x){//判断double等于0或。。。 if(fabs(x)<eps)return 0;else return x<0?-1:1;}struct Point{ double x,y; P

2017-07-23 14:06:35 403

原创 NZAU 1207: Candies 线段树区间更新加区间合并

题意:给你一数组,数组的值只有0(A糖果)和1(B糖果)两种,对这个数组有两种操作:(1)把区间L到R的值更改为v, (2)询问从区间L到R最多有多少个1是连续的。线段树维护三个值  pre,sub,suf  分别代表前缀,子串,后缀连续为1的个数,三个值的更新方式为下图,很好理解void pushup(Node &rt,Node a,Node b,int l,int r){ int

2017-07-21 17:40:43 164

原创 Interesting Calculator UVA - 12664 bfs

bfs,尝试每一种操作,并记录下到达该状态的最小费用和次数,费用相同时,次数要最小。#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;const ll INF

2017-07-21 11:02:49 164

原创 Free DIY Tour HDU - 1224 DAG上的最长路 dp 水题

因为是DAG,所以正着更新反着更新都可以#include #include #include #include #include #include #include #include #include #include using namespace std;const int INF=1e9+10;typedef long long ll;vector g[105

2017-07-21 09:21:54 193

转载 转载 qwb的博客 前缀和 和 取尺法 详细例题讲解

前缀和一维前缀和问题1静态区间求和问题2求是否有子区间之和m等于x问题3n个数选数字之和整除n问题4从两端延伸的问题问题5先区间更新然后再区间查询二维前缀和问题1静态子矩阵求和问题2先子矩阵更新然后再子矩阵查询取尺法问题1处理同一类连续区间问题2一类具有单调性的问题前缀和

2017-07-20 18:06:18 578

原创 Sum of Consecutive Prime Numbers UVA - 1210 连续素数之和

紫书p343素数打表,再求前缀和,最后通过两重循环,通过前缀和快速求出区间值,找到满足的数就答案+1#include #include #include #include #include #include #include #include #include #include using namespace std;const int INF=1e9+10;ty

2017-07-20 18:04:49 296

原创 Sum of Different Primes UVA - 1213 不同素数之和的个数 dp

紫书p343令d[i][j]为数i分成j个不同素数的个数 d[i][j]+=d[i-prime[k]][j-1] prime[k]因为不允许有重复元素,所以计算的顺序就很关键,先从各个素数从小到大开始枚举,然后i和j都是逆序枚举,如果不逆序的话,就可能导致重复出现,类似01背包。#include #include #include #include #include #inc

2017-07-20 17:52:58 255

原创 病毒 CSU - 1120 最长公共上升子序列

求最长公共子序列,相较于普通的lcs,还多了一个大小的判定,所以令d[i][j]为第一个序列中的前i项和第二个序列中的第j项作为公共上升子序列的末尾时的最大值,因此有了确定的大小依据,相等时,d[i-1][k]+1,k#include #include #include #include #include #include #include #include #include

2017-07-20 14:34:28 243

原创 NZAU 1203: One Stroke 树上二分前缀和

因为这是颗完全二叉树,节点都是按次序编号的,所以递归顺序很明确,判断终止条件也很明确,枚举每个点,并更新以深度为下标的前缀和,二分找到离当前节点最远且到当前节点的权值小于等于k的点。#include #include #include #include #include #include #include #include #include #include using n

2017-07-20 10:54:10 255

原创 NZAU 1202: GCD 矩阵快速幂 gcd和fib数列一些结论

斐波那契数列的性质 - Milkor - 博客园http://www.cnblogs.com/Milkor/p/4734763.htmlfn      *    1   1     =   fn-1fn-1        1   0          fn-2所以  1   1 ^ n   *   1   结果中的 第二行第一列的值就是fn           1  

2017-07-19 17:01:39 205

原创 Repairing a Road NBUT - 1465

枚举每条边,那么耗费时间就是dis(1, x) + (t - dis(1, x)) + vi * ai ^ (-t) + dis(y, C) ,dis代表u到v的最短路,可知因为是最短路,1到u和v到c肯定不会经过(u,v)这条边,所以求出t-vi*ai^(-t)的最小值就可以了,t的范围(dis(1,x),dis(1,c)) 求导求零点就行了,f'(t) = 1 - ln(ai) * vi

2017-07-19 13:41:40 246

原创 最短的名字 CSU - 1115

字典树,因为没有一个人的名字是其他人的前缀,所以只要保存下每个节点经过的次数即可,次数为1时可以保证唯一。两种方法,动态和静态#include #include #include #include #include #include #include #include #include #include using namespace std;const int I

2017-07-19 09:38:08 259

原创 三家人 CSU - 1111

trick就在于三家人原来是各自只做分内的事,即平均分配任务,现在c太太出的钱是用来让其他两位太太帮她做事,所以a太太所获得的钱应该是她现在做的工作减去原本该做的工作除以c太太的任务量乘上c太太支付的钱、、、#include #include #include #include #include #include #include #include #include #inc

2017-07-18 17:20:40 316

原创 最优对称路径 CSU - 1106

既然是对称走,那么先把对称的格子相加,转换成一个左上三角的样子,要统计所有合法路径中,数字之和最小的路径有多少条?,而我们在统计时的每一次转移都需要走一个最短的路才能保证最终走到副对角线时可能是所有到达对角线上中最短的路,所以事先用bfs求出(0,0)到每个格子的最短路,然后记忆化搜索条数。#include #include #include #include #include #i

2017-07-18 16:47:39 292

原创 打怪升级 CSU - 1105

+1药水每次有多少用多少,所以存在的决策问题就是*2药水何时用,用多少?最多10瓶*2药水,2^10=1024,远远大于每个战役所需的最大力量值100,所以搜索加剪枝就可以过。因为使用药水都是在战役之前,也就是上一个战役之后,所以定义一个power的变量代表下一个状态下的力量值。#include #include #include #include #include #inc

2017-07-18 13:12:09 370

原创 Number Sequence POJ - 1019

可以看成是1,12,123,1234,12345,。。。这样组合而成,所以每增加一项,第i项增加的位数为log10(i)+1首先确定对给定的n,它属于上面的第几项?再确定它是这一项中哪一个数字的第几项。#include #include #include #include #include #include #include #include #include #incl

2017-07-16 09:23:46 176

原创 CF Round #424( Div.2) D. Office Keys

首先要知道,对于任意的ai所以可以二分答案,check函数如下bool judge(ll limit) { int num=0; int m=0; for(int i=0;i<n;i++) for(int j=m;j<k;j++) { if(abs(b[j]-a[i])+abs(b[j]-p)<=limit

2017-07-15 16:00:48 225

原创 Sumdiv POJ - 1845 A^B的所有约数之和

A^B的所有约数之和为:     sum = [1+p1+p1^2+...+p1^(a1*B)] * [1+p2+p2^2+...+p2^(a2*B)] *...* [1+pn+pn^2+...+pn^(an*B)].用递归二分求等比数列1+pi+pi^2+pi^3+...+pi^n:(1)若n为奇数,一共有偶数项,则:      1 + p + p^2 + p^3

2017-07-15 10:17:39 210

原创 筛素数

bool isprime[50000005];//用true表示i是素数int prime[3001135];//第i个素数int get_prime(int n){ int p=0; for(int i=0;i<=n;i++) isprime[i]=true; isprime[0]=isprime[1]=false; for(int i=2;i<=n;i++){ if(ispri

2017-07-15 09:52:59 211

原创 Code POJ - 1850

要求后一位比前一位的字典序大,统计它是满足这个条件的数的第几个,数位dp,d[pos][pre]  统计到pos位,前一项是pre的个数。#include #include #include #include #include #include #include #include #include #include using namespace std;const

2017-07-15 08:41:52 191

原创 The Cow Lexicon POJ - 3267 dp

给出一个字符串和一些单词,让你删除尽可能少的字母在字符串中,使得这些单词可以组成这个字符串。d[i]=min(d[i],d[k]+cnt)对于每个i,在0到i的范围内可能存在符合某些单词的序列存在,注意,不是字串,所以枚举每个单词,从后往前匹配,同时计算不同的字母的个数,即删除的个数cnt,k即为匹配之后在字符串中的下标。#include #include #include

2017-07-11 22:48:55 201

原创 Add Again UVA - 11076

一句话:将每个位上的每个不重复的数所作的贡献加起来就是所要求的答案贡献的话  计算该数在这个位上出现的次数,也就是求有重复元素的重排列,它等于n!/(n1!*n2!...*nk!) n为ni之和,ni为各个数出现的次数,最后再乘上在该位的权值(10^k)#include #include #include #include #include #include #include

2017-07-09 17:49:10 186

原创 uva 1276 多重背包

二进制拆分  将cash作为背包的容量,那么硬币所占背包的体积便是数量*面额,价值也是数量*面额#include #include #include #include #include #include #include using namespace std;const int INF=1e9+100;int w[1005],c[1005];int d[10

2017-07-05 15:49:21 164

循序渐进Linux第2版+标签+139M

循序渐进Linux第2版循序渐进Linux第2版循序渐进Linux第2版

2018-01-26

空空如也

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

TA关注的人

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