02 2019 档案

poj1094 拓扑排序
摘要:/* 给定一组偏序关系,问最少第几步能确定次序 如果出现环,问第几步出现环 因为要求第几步确定次序或者第几步出现环,所以每次读入一个偏序关系就进行一次拓扑排序 */ #include <iostream> #include <cstring> #include <cstdio> #include < 阅读全文

posted @ 2019-02-28 16:45 zsben 阅读(159) 评论(0) 推荐(0) 编辑

三维拓扑排序好题hdu3231
摘要:/* 三维拓扑排序 将每个长方体分解成六个面,xyz三维进行操作 每一维上的的所有长方体的面都应该服从拓扑关系,即能够完成拓扑排序=如果两个长方体的关系时相交,那么其对应的三对面只要交叉即可 如 a1 b1 a2 b2反之对应的那对面不可以交叉 如a1 a2 b1 b2 同时长方体自身的对应两个面也具有拓扑关系 */ #include using namespace std; #define ... 阅读全文

posted @ 2019-02-28 16:08 zsben 阅读(168) 评论(0) 推荐(0) 编辑

hdu1811 拓扑排序+并查集缩点
摘要:/*给定两个点之间的三种关系 = 如果是=就将两点放到同一个集合里进行缩点 离线处理所有关系,先用并查集将等于关系缩成一个点 */ #include using namespace std; #define maxn 20005 struct Query{int u,v;char ch;}q[maxn]; struct Edge{int to,nxt;}edge[maxn>n>>m){ ... 阅读全文

posted @ 2019-02-28 11:15 zsben 阅读(182) 评论(0) 推荐(0) 编辑

拓扑排序基础 hdu1258,hdu2647
摘要:由这两题可知拓扑排序是通过“小于”关系加边建图的 hdu2647 阅读全文

posted @ 2019-02-28 09:35 zsben 阅读(185) 评论(0) 推荐(0) 编辑

uva11827 处理下输入
摘要:/*0.012s*/ #include #include using namespace std; int num[100], n; int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int cal() { int i, j, maxn = 0; for (i = 0; i < n - 1; +... 阅读全文

posted @ 2019-02-27 21:17 zsben 阅读(284) 评论(0) 推荐(0) 编辑

poj2116 模拟题
摘要:不知道错在哪里 阅读全文

posted @ 2019-02-27 17:28 zsben 阅读(246) 评论(0) 推荐(0) 编辑

exgcd求解同余方程的最小正整数解 poj1061 poj2115
摘要:这两题都是求解同余方程,并要求出最小正整数解的 对于给定的Ax=B(mod C) 要求x的最小正整数解 首先这个式子可转化为 Ax+Cy=B,那么先用exgcd求出Ax+Cy=gcd(A,C)的解x 然后这个式子的一个特解就是 (B/gcd(A,C))* x 要注意如果gcd(A,C)无法整除B,那 阅读全文

posted @ 2019-02-27 13:38 zsben 阅读(2220) 评论(0) 推荐(0) 编辑

uva11916 bsgs算法逆元模板,求逆元,组合计数
摘要:其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 阅读全文

posted @ 2019-02-27 11:20 zsben 阅读(233) 评论(0) 推荐(0) 编辑

poj2417 bsgs算法非逆元模板,用于求解A^x=B(mod C)的方程
摘要:参考博客 https://blog.csdn.net/clover_hxy/article/details/50683832关于欧拉定理推论的证明 https://www.cnblogs.com/aseer/p/9675610.html/* 给定A,B,C,C是质数,求出A^x=B(mod C)的解 解:A^x = A^(x % phi[C]) = B(mod C) (欧拉定理推论) x %... 阅读全文

posted @ 2019-02-26 22:44 zsben 阅读(226) 评论(0) 推荐(0) 编辑

uva11754 中国剩余定理+暴力搜索
摘要:是当y的组合数较小时,暴力枚举所有组合,然后用中国剩余定理求每种组合的解,对解进行排序即可 注意初始解可能是负数,所以如果凑不够S个,就对所有解加上M,2M。。。。 当y的组合数较大时,选择一个k/x最小的序列,枚举N=x*t+y,外层枚举t,内层枚举y,然后验证N是否是可行解 为什么要选k/x最小 阅读全文

posted @ 2019-02-26 17:28 zsben 阅读(246) 评论(0) 推荐(0) 编辑

中国剩余定理
摘要:https://blog.csdn.net/niiick/article/details/80229217 拓展中国剩余定理 注意拓展欧几里得只能解出a,b,x,y,gcd(a,b)的一组特解 模板1 模板2:拓展定理 阅读全文

posted @ 2019-02-25 23:14 zsben 阅读(179) 评论(0) 推荐(0) 编辑

uva11426 欧拉函数应用,kuangbin的筛法模板
摘要:/* 给定n,对于所有的对(i,j),if[x*t]+=x*phi[t] 筛出phi表 */ #include using namespace std; #define maxn 4000005 //#define ll long long bool check[maxn+10]; int phi[maxn+10],prime[maxn+10],tot; void init(){ m... 阅读全文

posted @ 2019-02-25 13:58 zsben 阅读(155) 评论(0) 推荐(0) 编辑

lightoj1197 素数双筛,可以参考poj的那题双筛
摘要:/* 判断一个数是否是素数,只要判断这个数有没有在[2,sqrt(n)]区间的因子 同样,对于大数短区间的筛选,同样可以用这种判断方式, 先筛出sqrt(n)范围内的素数,然后用这些素数去筛出区间内的因子 */ #include using namespace std; #define maxn 1000000 #define ll long long int v[maxn],prime[m... 阅读全文

posted @ 2019-02-25 07:26 zsben 阅读(209) 评论(0) 推荐(0) 编辑

lightoj1214 大数取模模板
摘要:#include using namespace std; #define maxn 300 #define ll long long ll a,b; char s[400]; inline ll calc(int i){ return s[i]-'0'; } int main(){ int T; cin>>T; for(int tt=1;tt>s>>b; ... 阅读全文

posted @ 2019-02-20 19:59 zsben 阅读(170) 评论(0) 推荐(0) 编辑

lightoj 1220 唯一分解定理
摘要:#include using namespace std; #define maxn 1000005 #define ll long long int v[maxn],prime[maxn],m; void init(int n){ memset(v,0,sizeof v); memset(prime,0,sizeof prime); m=0; for(int ... 阅读全文

posted @ 2019-02-20 19:21 zsben 阅读(175) 评论(0) 推荐(0) 编辑

lightoj1234 打表技巧:分块打表
摘要:/* 打不了那么大的表,所以只记录分块的信息即可 */ #include using namespace std; #define maxn 1000005 double arr[maxn]; void init(){ arr[0]=0; double tmp=0; for(int i=1;i>T; while(T--){ cin>>n; ... 阅读全文

posted @ 2019-02-20 13:12 zsben 阅读(263) 评论(0) 推荐(0) 编辑

light1236 素数打表,质因数分解
摘要:不知道为什么会错 这是网上的ac代码 阅读全文

posted @ 2019-02-19 22:20 zsben 阅读(281) 评论(0) 推荐(0) 编辑

lightoj1259 线性筛的另一种写法 v变成bool标记数组
摘要:也是用线性筛,但是v用int会爆,所以这个线性筛用的是另外一种写法 阅读全文

posted @ 2019-02-19 08:40 zsben 阅读(211) 评论(0) 推荐(0) 编辑

lightoj 1282 取对数的操作
摘要:/* 前三位 len=log10n^k(乘积的长度) len=klog10n n^k=x*10^(len-1) x=n^k/10^(len-1) log10x = k*log10n - (len-1) x=pow(10,k*log10n - (len-1)) 后三位 快速幂解决 */ #include using namespace std; #define ll long long l... 阅读全文

posted @ 2019-02-16 11:12 zsben 阅读(185) 评论(0) 推荐(0) 编辑

lightoj1336 约数和
摘要:/*sigma(n)的每一项都可以看成是个pi的[0,ei]等比数列求和公式,那么sigma(n)就是n所有正约数的和要求找到sigma(x)为奇数的个数1<=x<=n */ 看题解的。。 阅读全文

posted @ 2019-02-16 10:31 zsben 阅读(144) 评论(0) 推荐(0) 编辑

light1341 唯一分解定理
摘要:一定要先打表素数,然后进行分解,直接分解是会t的 阅读全文

posted @ 2019-02-14 22:56 zsben 阅读(126) 评论(0) 推荐(0) 编辑

light1370 欧拉函数打表
摘要:/* 给定n个数ai,要求欧拉函数值大于ai的最小的数bi 求sum{bi} */ #include using namespace std; #define maxn 1000005 int n,a[maxn]; int phi[maxn],m,v[maxn],prime[maxn]; void init(int n){ memset(v,0,sizeof v); m=0;... 阅读全文

posted @ 2019-02-14 20:47 zsben 阅读(152) 评论(0) 推荐(0) 编辑

cf1025c 思维题
摘要:/* bwwwbwwbw wwbwwwbwb 不管从哪里断开翻转。翻转后的串再整体翻转一定是2s的子串 */ #include using namespace std; int len; char s[1000000]; int main(){ cin>>s+1; int len=strlen(s+1); if(len==1){ puts("1"); re... 阅读全文

posted @ 2019-02-13 23:42 zsben 阅读(195) 评论(0) 推荐(0) 编辑

cf1051d 简单的状态压缩dp
摘要:/* 给定一个二行n列的格子,在里面填黑白色,要求通过黑白色将格子分为k块 请问有多少种填色方式 dp[j][k][0,1,2,3] 填到第j列,有k块,第j列的颜色, */ #include using namespace std; #define ll long long #define mod 998244353 //0全白,1黑白,2白黑,3黑黑 ll dp[1050][105... 阅读全文

posted @ 2019-02-13 23:41 zsben 阅读(300) 评论(0) 推荐(0) 编辑

cf1042d 树状数组逆序对+离散化
摘要:/* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l] using namespace std; #define ll long long #define maxn 200005 ll tmp[maxn],n,a[maxn],t,sum[maxn],ans; ll bits[maxn]; void add(int ... 阅读全文

posted @ 2019-02-13 23:41 zsben 阅读(209) 评论(1) 推荐(0) 编辑

状态压缩dp小结
摘要:最近一段时间算是学了一些状态压缩的题目,在这里做个小结吧 首先是炮兵布阵类题目,这类题目一开始给定一个矩形,要求在上面放置炮兵,如果在一格放了炮兵那么周围的某些格子就不能放炮兵,求最大能放置炮兵的数量 poj1185炮兵布阵 hdu2176 炮兵布阵修改版 poj3254 炮兵布阵弱化版 poj15 阅读全文

posted @ 2019-02-13 23:37 zsben 阅读(230) 评论(0) 推荐(0) 编辑

poj2836 状态压缩dp
摘要:自己的做法是枚举i,j作为顶点的矩形,然后再更新状态S,但是这种做法是错误的 正解是先把所有矩形对求出来,然后枚举状态S,每个处理每个状态时再枚举已经求出的矩形对,用旧状态更新新状态 阅读全文

posted @ 2019-02-13 13:19 zsben 阅读(196) 评论(0) 推荐(0) 编辑

cf1076d 贪心最短路
摘要:#include #include using namespace std; #define maxn 300005 #define ll long long struct qnode{ ll v,c,id; qnode(){} qnode(ll v,ll c,ll id):v(v),c(c),id(id){} bool operatorr.c; } };... 阅读全文

posted @ 2019-02-12 23:12 zsben 阅读(131) 评论(0) 推荐(0) 编辑

cf1073c 二分+二维前缀和
摘要:#include using namespace std; #define maxn 200005 char s[maxn]; int tmp,n,x,y,sum[2][maxn]; mapmp; int judge(int mid){//能否在mid长度内修改完 for(int l=1;l+mid-1>n>>s+1>>x>>y; tmp=abs(x)+abs(y); ... 阅读全文

posted @ 2019-02-12 21:29 zsben 阅读(104) 评论(0) 推荐(0) 编辑

poj2817状态压缩 升维
摘要:/* 两两求出字符串之间最大可以匹配的值 由已知状态推导出位置状态 状态s表示已经加入到集合中的字符串,0表示串i不存在,1存在 由于字符串的加入顺序会影响结果,所以增加一维来表示 dp[S][i]表示状态集合为S,且i是新加入S的字符串的最大值 */ #include #include #include using namespace std; char a[15][15]; int dp... 阅读全文

posted @ 2019-02-12 13:27 zsben 阅读(169) 评论(0) 推荐(0) 编辑

hdu4064 三进制状态压缩 好题!
摘要:还不太会做这类题,总之感觉有点难啊。 用深搜代替打表求出一行所有的可行状态,注意要进行剪枝 这是自己理解的代码,但是tle了 阅读全文

posted @ 2019-02-12 11:45 zsben 阅读(244) 评论(0) 推荐(0) 编辑

hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
摘要:这题用直接枚举是超时的,必须要用搜索来搜索出所有可能的状态,然后再进行枚举 这是较慢的做法 阅读全文

posted @ 2019-02-11 14:39 zsben 阅读(172) 评论(0) 推荐(0) 编辑

cf1114D 区间dp基础
摘要:最简单的那类区间dp,昨天晚上心态不对,不知道在打什么。。 阅读全文

posted @ 2019-02-11 12:05 zsben 阅读(344) 评论(0) 推荐(0) 编辑

poj2411 状态压缩-铺地板题型-轮廓线解法(最优)
摘要:解法参考博客https://blog.csdn.net/u013480600/article/details/19569291 一种做法是先打出所有的状态,即满足上下配对的所有可能方案,然后再逐行进行枚举计数 dp[i][s]=sum{dp[i-1][t]},t是所有和s配对的状态 打状态时要注意如 阅读全文

posted @ 2019-02-10 14:20 zsben 阅读(298) 评论(0) 推荐(0) 编辑

poj3254 炮兵阵地弱化版,记数类dp
摘要:/* dp[i][j]表示到第i行的状态j有多少放置方式 */ #include #include #include #include using namespace std; #define mod 100000000 int dp[15][10000],mp[15][15],cur[15],ans,n,m; vectorv; inline int legal(int x){ if... 阅读全文

posted @ 2019-02-10 11:36 zsben 阅读(145) 评论(0) 推荐(0) 编辑

poj2441状态压缩dp基础
摘要:/* 给定n头牛,m个谷仓,每头牛只能在一些特定的谷仓,一个谷仓只能有一头牛 问可行的安排方式 dp[i][j]表示前i头牛组成状态j的方案数,状态0表示无牛,1表示有牛 使用滚动数组即可 枚举到第i头牛时,状态j必须有i-1头牛,然后由这个状态推导出第i头牛的状态,再清0 */ #include #include using namespace std; int n,m,k,mp[25][... 阅读全文

posted @ 2019-02-09 23:03 zsben 阅读(293) 评论(0) 推荐(0) 编辑

zoj3471 状态压缩dp基础
摘要:/* dp[S]表示状态S下的最大收益,0表示没有了,1表示还在 */ #include using namespace std; int dp[1>n && n){ for(int i=1;i>mp[i][j]; memset(dp,0,sizeof dp); int ans=0; for(int S=(1=1... 阅读全文

posted @ 2019-02-09 23:02 zsben 阅读(115) 评论(0) 推荐(0) 编辑

cf1108E2 线段树类似扫描线
摘要:/* 有点像扫描线 思路:从左到右枚举每个点,枚举到点i时,把所有以i为起点的区间的影响删去 再加上以i-1为结尾的区间的影响 */ #include using namespace std; #define maxn 200005 #define lson l,m,rt>1; build(lson); build(rson); pushup(rt); } void ... 阅读全文

posted @ 2019-02-09 21:41 zsben 阅读(101) 评论(0) 推荐(0) 编辑

poj1185 状态压缩经典题
摘要:状态压缩的好题,直接求会爆内存,先把所有可能的状态求出来存在stk里,然后f[i][k][t]表示i行状态为t,i-1状态为k,由i-1状态来推出i状态即可 注意要打好边际条件的状态,并且某个可行状态必须由前一个可行状态推出 阅读全文

posted @ 2019-02-09 17:53 zsben 阅读(139) 评论(0) 推荐(0) 编辑

cf1110F 离线+树上操作+线段树区间更新
摘要:自己搞的算法超时了。。但是思路没什么问题:用线段树维护每个点到叶子节点的距离即可 这是cf上的代码 阅读全文

posted @ 2019-02-09 14:36 zsben 阅读(205) 评论(0) 推荐(0) 编辑

tarjan求lca :并查集+dfs
摘要://参考博客 https://www.cnblogs.com/jsawz/p/6723221.html#include using namespace std; #define maxn 420000 struct Query{int to,nxt,lca;}q[maxn]; struct Edge{int to,nxt;}edge[maxn>n>>m>>p; for(int i=1;i... 阅读全文

posted @ 2019-02-08 19:34 zsben 阅读(168) 评论(0) 推荐(0) 编辑

cf1110E 思维
摘要:/* Ci'=Ci+1 + Ci-1 -Ci Ci+1 - Ci' = Ci - Ci-1 Ci' - Ci-1 = Ci+1 - Ci; 即求一次Ci’等价于交换Ci和Ci-1 与 Ci+1和Ci的差值 那么只要差值排序后的数组是相同的即可 */ #include using namespace std; #define maxn 100005 vectorv1,v2; int a[maxn... 阅读全文

posted @ 2019-02-08 13:51 zsben 阅读(195) 评论(0) 推荐(0) 编辑

cf1110d 线性dp
摘要:很精练的一道题 阅读全文

posted @ 2019-02-08 11:45 zsben 阅读(216) 评论(0) 推荐(0) 编辑

cf842D 01字典树|线段树 模板见hdu4825
摘要:一般异或问题都可以转换成字典树的问题,,我一开始的想法有点小问题,改一下就好了 下面的代码是逆向建树的,数据量大就不行 如果是把集合中存在的元素进行建树,就不会出现字典树大小无法确定的问题,但是每次查询要改一下,即如果第i位是1,那就往字典树的0子树找,反之往1子树找,并且如果先找的子树已经满了,即 阅读全文

posted @ 2019-02-07 18:50 zsben 阅读(125) 评论(0) 推荐(0) 编辑

cf842C 树形dp+gcd函数
摘要:树形dp用一下就好了 阅读全文

posted @ 2019-02-07 18:43 zsben 阅读(279) 评论(0) 推荐(0) 编辑

cf581F 依赖背包+临时数组 好题
摘要:这题得加个临时数组才能做。。 阅读全文

posted @ 2019-02-04 20:28 zsben 阅读(261) 评论(0) 推荐(0) 编辑

hdu5758 思维,树形dp
摘要:/*可以推测从叶子结点传送到叶子节点才能使传送次数最少,如果是偶数个叶子结点,那么传送leaf/2次就是答案,如果是奇数个叶子结点,则还有单独一条链需要覆盖dp[u]表示覆盖完u为根的子树需要走的边数,显然在满足传送次数最少的条件下,dp[u]是可以递推的 设以u为根节点,v是u的儿子,如果v就是叶 阅读全文

posted @ 2019-02-03 15:07 zsben 阅读(228) 评论(0) 推荐(0) 编辑

hdu4044 依赖背包变形 好题!
摘要:由于不是求最大的可拦截的HP值,而是要将最小值最大化,那么就需要分配每个子树用的钱数以达到最小值最大化 第一步解决如何分配钱使得结点u的子树中用了j元钱后可以拦截的HP最大,这就是变形的分组(依赖)背包,即枚举m元钱,在子树v用t元钱,在v之前的子树用j-t元钱 用Max[v][j]数组记录u的前v 阅读全文

posted @ 2019-02-02 13:27 zsben 阅读(158) 评论(0) 推荐(0) 编辑

cf861D 字典树+时间戳
摘要:好久没碰字典树之类的题了,搞起来有点生疏 阅读全文

posted @ 2019-02-01 19:28 zsben 阅读(289) 评论(0) 推荐(0) 编辑

cf1106E 线性dp+multiset
摘要:之前看错题目了,以为父亲的选择时按最大收益来的。结果并不是 /*注意题目中说只要某个时间父亲可以取得红包,他就取硬币数最多同时耗时最小的那个就是不管后续如何,不一定满足最大收益 dp[i][j]表示时间i被干扰j次所得的最小收益dp[i][j]=dp[a+1][j]+b; <a,b>是时间i可取的价 阅读全文

posted @ 2019-02-01 14:16 zsben 阅读(634) 评论(0) 推荐(0) 编辑

导航

统计

点击右上角即可分享
微信分享提示