自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 hdoj 2665 主席树模版

原理:https://www.zhihu.com/question/31133885 教程:http://www.cnblogs.com/zyf0163/p/4749042.html 基本半天可以学会,不好的教程可能扣一天#include<map>#include<set>#include<cmath>#include<queue>#include<stack>#include<cst

2017-04-09 21:57:56 426

原创 机器学习实战 kNN算法

#!/usr/bin/env python3# -*- coding: utf-8 -*-#Remove dict.iteritems(), dict.iterkeys(), and dict.itervalues().#Instead: use dict.items(), dict.keys(), and dict.values() respectively.# 线代和矩阵操作库f

2017-03-10 21:12:34 465

原创 codeforces 373div1 Sasha and Array 矩阵+线段树

用线段树储存价值和,因为矩阵 a1 * b + a2 * b + a3 * b + a4 * b + a5 * b = (a1 + a2 + a3 + a4 + a5) * b; 然后进行下优化,尽量减少快速幂的运算数量#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define lson i<

2016-10-07 14:58:21 430

原创 383C - Propagating tree 线段树加时间戳

首先每次处理以一个点为根的所有子树点 就要用时间戳加线段树区间更新 因为每次add一个点,那么加减是交替的,所以线段树存储深度为奇数的点的add值 最后查询如果是偶数 ans = -ans;#include<cstdio>#include<algorithm>#include<iostream>#define maxn 200005#define LL long long#define

2016-09-08 17:33:00 466

原创 codeforces 711E 勒让德定理 逆元

要先化简再取模 公式很好推主要是化简 用到两条性质 1. gcd(2^n - k, 2^n) = gcd(k, 2 ^ n) 因为当k为奇数 2^n - k 为奇数 那等式两边都为1 当k为偶数时 2^n - k 为偶数 k = b * 2^k1 b为奇数 2^n - k = 2^k1*(2^(n-k1)-b) 2^(n-k1)-b 是奇数,所以gcd(2^n - k, 2^n) = gc

2016-09-06 22:37:45 608

原创 codeforces 711D Directed Roads dfs

首先给的每个点只有一个出度既不可能有大于一个出度 每条边可以改变方向 所以每个点最多只能在一个环上,且所有有向环的信息已经给出因为每个点只有一个出度 dfs把每个环都求出来 ans *( 2^n(环的边数) - 2) 最后ans * 2^m(链的边数)#include<cstdio>#include<algorithm>#include<iostream>#include<map>#

2016-09-06 12:46:58 322

原创 codeforces Recover the String

题目很好推 00的个数推0的个数 11的个数推1的个数 如果存在那么就判断四个数的合是否为 C(0和1的总个数,2)如果存在有解贪心一下就行即根据第二个数值和1的位置固定然后叉进0最后使其成立 有个超级坑的就是00或11的个数 是0时那0或1的个数是0 或者是1要特殊判断!!!!#include<cstdio>#include<cstring>#include<algorithm>#incl

2016-09-05 22:41:43 451

原创 湖南省赛 有向无环图 水dp

如果两个点之间有多条边,那就相当于一个点连多个相同的点然后dfs跑一下累加和就行了记得记忆化搜索剪枝#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define mod 1000000007ll#define maxn 100005#define LL long longusing names

2016-09-05 19:33:24 473

原创 hihocoder #1228 : Mission Impossible 6 模拟

总结 :1 .题意理解 2. 插入要从后往前枚举更新, 删除要从前往后枚举更新数据结构没学好。。。。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define maxn 100005using namespace std;int flagOve;int po, co

2016-09-05 12:27:07 359

原创 hihocoder Boxes 状压八进制bfs 加预处理

每三位代表第i个格子的目前位置 这三位为0代表没这个数 然后最多7个数 也就是 8^7 约等于 400000 所有从终点到起点反向预处理 学到的技巧 数据量不大要先想到搜索 如果感觉这时搜索会超时可以考虑预处理什么的#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<queue>

2016-09-04 15:45:49 316

原创 poj 3345 Bribing FIPA 树形dp

dp[i][j] 代表第i个点获取j个体积所需最小价值, 每个物品的体积就是它所支配的子节点的数量,价值就是它的点值了#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<map>#include<vector>#define maxn 205us

2016-09-04 11:06:22 379

原创 poj 2486 树形dp

dp[i][j][0] 代表走到第i个点 还能走j步 最后返回i的最大价值 dp[i][j][1] 代表走到第i个点 还能走j步 最后不返回i的最大价值 一般目标来回往返并每步都有消耗的题都是这种记录往返标识的dp#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define maxn 204u

2016-09-03 20:52:46 418

原创 poj 1947 Rebuilding Roads 树形dp背包

dp[i][j] 代表以i为根 大小为j需要拆的最小边数 然后dp 注意边界处理对于每个子节点x不连的话dp[i][j] + 1连得话就是 dp[i][j - k] + dp[x][k]; 然后除了根节点最后计算结果都要加1因为还要把跟父节点相关的边拆掉 #include<cstdio>#include<cstring>#include<algorithm>#include<iostrea

2016-09-03 15:14:16 357

原创 poj 1155 TELE 树形背包dp

dp[i][we] 代表节点为i 给k个消费者提供信号的所赚钱术 这时we就是背包容量,每个子节点的每个dp[son][j] 0 <=j<= num[j]; 就是各个物品了#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define mini -100000000#define maxn 3005

2016-09-02 21:09:44 463

原创 codeforces 218D Choosing Capital for Treeland 树形DP

给一个有向树每条边可以改变方向求改变的最小边数使其最后连通 先dfs一下求出以1为根的每个点与儿子联通的最小改变数 然后再dfs合并它与父亲的联通信息#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cstdlib>#define maxn 200005using namesp

2016-09-02 16:53:13 524

原创 hdoj 2196 Computer 树形dp经典题

首先简单的树形dp求祖宗到儿子的最长距离并记录最短距离是哪个儿子 此时对于每个点只维护了儿子到它的最短距离 还要记录祖宗到它的最短距离这时需要再跑一遍dfs把每个点与祖宗相关的到它的最长边搞出来 经典模型必须熟悉啊!!!!!!#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<ve

2016-09-02 13:01:50 387

原创 hdoj 5787 K-wolf Number 数位dp xjb搞水过

二维记录前五个数的转态和先后顺序 数组53MB水过。。。。#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define LL long longusing namespace std;LL dp[18][100001][4];LL l, x[20];bool judge(LL n, LL k

2016-09-01 22:55:51 492

原创 hdu 4352 XHXJ's LIS 状压数位dp

求a - b 的按每位值来最长lis长度为k的个数 当求lis时 每加入一个数看此时的lis中有没有数大于等于它且前一个数小于它,有的话将这个位置替换成这个数,没有的话把它填入到末尾 lis+1 所以dp[i][sym][len] 代表 推到第i位,此时组成状态为sym, 最后lis长度为len的方案数 注意处理前导0#include<cstdio>#include<algorithm>#

2016-09-01 20:49:35 326

原创 hdu 4507 吉哥系列故事――恨7不成妻 数位dp

dp[i][mod1][mod2][0] 为 第i位后 数位和%7为mod1 数值%7为mod2 的满足条件的累加值的和 dp[i][mod1][mod2][1] 为 第i位后 数位和%7为mod1 数值%7为mod2 的满足条件的累加平方值的和 dp[i][mod1][mod2][2] 为 第i位后 数位和%7为mod1 数值%7为mod2 的满足条件的数量和 然后累加值 和 数量都是最普通

2016-09-01 15:58:20 329

原创 spoj BLANNUM 数位状压dp

这题刚开始想的关系不对是因为没有考虑这个奇偶是相对于出现的数字来说的 所以dp[1024][1024][21][2] 一维代表出现的数字的状压形记录,二维表示出现数字奇偶的记录,三维代表推到第几位,四维代表是否有前导非零数 然后数位dp就行了#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#inc

2016-09-01 10:50:15 353

原创 codeforces 55D Beautiful numbers 数位dp

dp[i][lcm][mod] i 推到第几位 lcm 为 比i高的位的值的最小公倍数, mod为此时的数值 %(lcm(1, 2, 3, 4, 5, 6, 7, 8, 9) = 2520)的价值 dp[i][lcm][mod] 的值为这个状态时 0 - (i -1)位选择的方案数使其最后数值%所有位的lcm为0 因为2520能够整除任意由1 - 9 形成的最小公倍数所以%2520 最后判

2016-08-31 19:29:50 272

原创 hdu 3709 Balanced Number 数位dp

瞎猜的规律:除0以外 每个数只有一个中心或者没有,中心是本题定义的中心 dp[i][mid][sum] 代表给第i位填数, 中心点定义为mid, 比i高的位与中心的距离为sum 距离定义左正右负 坑点数组要开大和0要特殊考虑#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define LL

2016-08-31 15:44:31 310

原创 hdu 5072 Coprime 容斥 同色三角形

n个点之间都有边相连颜色为红或黑, 那对于每个点能形成异色三角形的方案为blackEdge[i] * redEdge[i] ,这n个点能形成异色三角形的方案数为 sum (blackEdge[i] * redEdge[i]) /2 (1<=i<=n) 如果两个数互质就是红边不互质就是黑边,抽象出这个基本模型就行了这个是难点。。。 判断 每个点有几个点与其互质分解质因子用容斥原理也是最基本的方法#

2016-08-30 22:16:40 442

原创 spoj LCM Sum

一个数论定理 对于n >= 2 小于它与它互质的数的和 为 n*phi*(n)/2 然后lcm(a,b) = a * b / gcd(a, b) 时间太紧 所以打表预处理枚举每个数然后找到每个能整除它的数加上一部分欧拉函数的和#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<ios

2016-08-30 18:04:08 313

原创 hdu 4390 容斥组合数学

先抽象出 n个相同物品放在m个不同抽屉里的模型 结果为C(n, n+m-1) 然后本题要求抽屉里必须放物品 所以要反向思维容斥求出有抽屉不放物品的方案数 为大于等于一个为空的方案减大于等于两个为空的方案加大于等于三个为空的方案。。。。#include<cstdio>#include<cstring>#include<vector>#define LL long longusing nam

2016-08-30 15:04:43 277

原创 hdu 2204 Eddy's爱好 容斥

根据指数的质数分解进行容斥 比如 k = a^3 且 k = b ^ 5,那么 k = c ^ 15 所以 a 的可选个数 加 b的可选个数减去c的可减个数就是总的个数了因为 a^3和b^5有重复的#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<string>#include<c

2016-08-29 13:01:00 464

原创 Hdu 4335 What is N? 欧拉函数降幂公式 + 循环节

a^n mod c= a^(n mod phi(c) + phi(c)) mod c (n >= phi(c) ) n! mod phi(c) = 0 n!的因子只需包含 phi(c) 因为 这题phi(mod) 不会太大 然后所有的n! mod phi(c) 都等于0 最后问题转化成有多少个nmod p = b; (a + b)^n = (a mod p + b mod p) ^ n (m

2016-08-28 16:16:52 1071

原创 poj 2480 Longge's problem 关于欧拉函数和积形函数推导

已知欧拉函数是积性函数 当 n = m1 * m2 m和m2互质 已知∑gcd(i, N) 1<=i <=N. 的值等于 ∑phi(n/i) * i 1 <= i <= n && n/i ==0 因为两个数a, b要使他们的公约数为i 那么必须有a%i=0且b%i=0 且a/i和b/i互质 所以求 n/i 的欧拉函数即为剩下的乘数可选个数因为欧拉函数是积性函数, 积性函数的和还是积性函数

2016-08-28 12:17:05 532

原创 hdu 5071 模拟

不跟没说过话的打开窗口说bye wa太多因为搞大新闻哈希,暴力来什么事也没有 大模拟总结 1:写的时候要小心谨慎 2:题目要仔细读不放过任何小点 3:注意long long 数组什么的 4:分析复杂度感觉能过就不用想着优化#include<cstdio>#include<al

2016-08-27 18:51:36 532

原创 hdu 3501 筛素数 + 容斥模板

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#define mod 1000000007ll#define LL long longusing namespace std;// 筛素数bool flag[50000];int cnt = 0,prime[

2016-08-27 18:48:01 437

原创 Codeforces Round #367 (Div. 2) 十字链表

建立一个单向的十字链表 每个元素有两个指针 一个指向右元素一个指向下元素 然后两个矩形互变时 把对应四个边的右指向和下指向互换就实现了两个方块的位置互变了复杂度由o(n^2)优化到O(n) 最后通过指针指向一个个输出各个位置的值By blacktea123, contest: Codeforces Round #367 (Div. 2), problem: (E) Working routine

2016-08-25 22:13:56 354

原创 Codeforces Round #368 (Div. 2) E. Garlands 二维树状数组

枚举每条链 把每条链上的点的价值都加到树状数组去,然后枚举询问把每个包括这条链的一部分的询问的答案添加这部分答案,用树状数组查询。。。。 时间复杂度 q*k*log(n)*log(m) 可怕明显超时啊cf机子跑得太快了居然都过了#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vec

2016-08-25 20:18:13 324

原创 codeforces Educational Codeforces Round 16 D. Two Arithmetic Progressions 扩展欧几里得

先用exgcd等式求k的通解 然后根绝函数的单调性确定可选整数的区间注意点很多有点恶心 然后求个数就行了 坑点是整数运算两个数相除 a/b 的结果为正返回小于等于结果的第一个数,结果为负返回大于等于结果的第一个数 //1 9 3 11 49 109#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>

2016-08-25 15:06:52 389

原创 poj 2887 Big String 块状链表

操作太少 所以分块然后直接线段树寻找块插入后面就行了//块状链表#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define lson i<<1#define rson (i<<1) + 1#define maxn 1055using namespace std;struct BK{

2016-08-23 09:38:55 401

原创 poj 3225 线段树1,0互变 全变0全变1模板

区间更新 当这区间值相同时翻转记录清0因为此时值固定翻转无效了#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<queue>#define lson i<<1#define rson (i<<1)+1#define maxn 70000*2us

2016-08-23 09:36:40 473

原创 hdoj 5724 Chess 博弈初学

组合博弈 就是转化成取石子模型,然后把se函数通过mex运算求出来,几个独立的游戏的se[i]值抑或起来是0后手赢,非零前手赢#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int sg[2200000];int ve[1000],l;void g

2016-08-20 20:32:19 358 1

原创 hdoj 1588 矩阵快速幂 二分等比数列求和模板

等比数列求和可以二分#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define LL long longusing namespace std;LL mod,n,k,b;//快速幂struct ma{ LL m[4][4],row,col; ma() {

2016-08-18 23:04:26 344

原创 poj 1903 Jurassic Remains 中途相遇法

中途相遇法就是 2^n种状态 不全部枚举 先枚举2^*(n/2)个状态 再枚举后 n/2个 2^(n/2)种转态 再与前面 2^(n/2)个相匹配这样复杂度会降很多,二分的思想#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<map>using namespace std;map<

2016-08-18 23:00:09 550

原创 poj 1635 Subway tree systems 判断树的同构 树的最大最小表示法模板

想象成括号匹配,dfs把同优先级的括号由小到大按字典序排个序就是树的最小表示法了#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>using namespace std;string a,b;string treeMinPress(

2016-08-18 22:56:29 666

原创 hdoj 5834 Magic boy Bi Luo with his excited tree 树形dp

假设 1 为 根节点 dp[i][0] 代表从自己出发选择到儿子节点最后必须返回自己的最大价值 dp[i][1] 代表从自己出发选择到儿子节点最后可选择不回来的最大价值 并记录最后选择的离开节点 id[i] 树形dp先跑一遍出来再第二遍 dfs 因为每个节点也可以流向父节点所以要合并 玛德太弱了超级复杂啊!!!!!!!!!!!!!! 分两种情况 一种是这个点正好是父节点的id,也就是父

2016-08-17 23:15:23 317

空空如也

空空如也

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

TA关注的人

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