自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

P.H.S

码农

  • 博客(172)
  • 收藏
  • 关注

原创 汇编语言实验11

编写子程序,实现大小写转换data segment db "Beginner`s All-purpose Symbolic Instruction Code.",0data endscodesg segmentassume cs:codesgstart: mov ax,data mov ds,ax mov si,0 call letterc

2017-11-09 18:35:00 531

原创 汇编语言 实验7

寻址方式在结构化数据访问中的应用访问data segment 时使用三个指针bs,si,di。三个偏移量独立增长。data segment db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982' db '1983', '1984', '1985', '1986', '1987', '1988', '

2017-11-09 15:10:09 462 1

原创 SPOJ COT Count on a tree

SPOJ COT Count on a tree主席树,倍增LCA题意求树上A,B两点路径上第K小的数思路同样是可持久化线段树,只是这一次我们用它来维护树上的信息。我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表上。比如说我们从一棵树的根节点进行DFS,得到根节点到各节点的距离dist[x]——这是一个根-x路径上点与根节点距离的前缀和。利用这个前缀和,我们

2017-10-24 11:58:44 290

原创 UVALive 3353 Optimal Bus Route Design

UVALive 3353 Optimal Bus Route Design二分图最大完美匹配题目题目给出一个带权有向图,找若干个圈,使得每个结点切好属于一个圈,并且所有圈的总长度最小,如果没有满足条件的就输出N。思路拆点,每个点拆成入和出。建边时比如1到2,就建1到2`。权为负的。 然后这是一个二分图图,跑二分图最大完美匹配。 注意原图不存在的边要加上,权为负无穷。 最后跑完的匹配权值要是小于

2017-10-23 18:50:50 237

原创 UVA 11248 Frequency Hopping

UVA 11248 Frequency Hopping网络流题意给定一个有向网络,每条边均有一个容量。问是否存在一个从点1到点N,流量为C的流。如果不存在,是否可以恰好修改一条弧的容量,使得存在这样的流?思路先求一次最大流,如果流量至少为C,则直接输出possible,否则需要修改的弧一定是最小割里的弧。依次把这些弧的容量增加到C,然后再求最大流,看最大流量是否至少为C即可。 很可惜,这样写出来的

2017-10-23 13:35:57 313 1

原创 ZOJ 2532 Internship

ZOJ 2532 Internship网络流题意CIA公司想采用新技术升级网络,在实验测试阶段,他们想升级其中的一段网络以便观察新技术在多大的长度上提升网络的性能,你作为实习生的任务是调查那一段网络能提高CIA总部的宽带。思路找割边集。 判断一段网络可不可以提升网络就要看它是不是满流,如果满流则可能在升级后提升CIA总部的宽带,但是如果提升后并不能增广,即不能提升CIA总部的宽带,所以判断一段是不

2017-10-22 20:57:12 251

原创 UVALive 3126 Taxi Cab Scheme

UVALive 3126 Taxi Cab SchemeDAG最小路径覆盖题意现在有n个客户,他们要乘出租车,他们每个人,有一个出发时间t,起点位置和终点位置。现在要安排尽量少的出租车送他们到目的地。出租车必须在客户出发前至少提前一分钟赶到那个客户出发的位置才行,或者这个客户就是这辆出租车的第一个乘客。让你输出需要的最少的出租车数。思路DAG的最小路径覆盖。先开始我们建边,如果客户u和客户v能用一辆

2017-10-22 15:58:11 261

原创 UVALive 3415 Guardian of Decency

UVALive 3415 Guardian of Decency二分图最大独立集题意一个老师带他的一群学生去旅游。带走的这群学生整体必须满足给出四个条件之一。问最多能带走多少学生。思路最大独立集就是,选最多的点,使得他们之间没有连边。 将不能共存的学生建边,跑匹配,独立集等于总点减去匹配数。不过注意,匈牙利是对有向二分图的。如果循环使用for(int i=1;i<=n;i++){ for

2017-10-21 21:55:36 358

原创 HDU 5919 Sequence II

HDU 5919 Sequence II主席树处理序列问题题意给你n(n≤2∗105)n(n≤2*10^5)个数,每个数的大小0<Ai≤2∗1050<A_i≤2*10^5。再给你m(m≤2∗105)m(m≤2*10^5)个询问。对于每个询问输入l,r,表示Al…Ar这个区间我们得到每个数第一次出现的位置下标的排列,假设这个区间有k个不同的数,我们得到的排列是p1<p2<p3<...<pkp1<p2<

2017-10-21 13:03:14 177

原创 2014 Benelux Algorithm Programming Contest (BAPC 14)

2014 Benelux Algorithm Programming Contest (BAPC 14)算5题?嘻嘻Gym - 101512B Button Bashing水题#include<bits/stdc++.h>using namespace std;const int maxn=7206;const int inf=0x3f3f3f3f; int t[maxn],d[2*maxn]

2017-10-21 12:13:06 927

原创 NWERC 2015 模拟赛

NWERC 2015 模拟赛 Gym 101485感觉西北欧的题有点简单啊Jumbled Communication水题,暴力处理0到255所有数,在暴力查询即可,注意边界溢出之类的。#include<bits/stdc++.h>#include<stdlib.h>#define M(a,b) memset(a,b,sizeof(a))#define lson l,mid,rt<<1#def

2017-10-18 12:26:58 285

原创 UVA 11419 SAM I AM

UVA 11419 SAM I AM二分图最小点覆盖,输出方案题目给出一个R×C的网格,网格上棉纺了一些目标。可以在网格外发射子弹,子弹会沿着垂直或水平方向飞行,并且打掉飞行路径上的所有目标。你的任务是计算出最少需要多少子弹,各从哪个位置发射,才能把所有目标全部打掉。思路 二分图最大匹配的König定理及其证明König定理:最小覆盖数等于最大匹配数。把目标所在的坐标,转化为XY结点,行看成X结点,

2017-10-17 13:56:49 223

原创 UVA 11383 Golden Tiger Claw

UVA 11383 Golden Tiger Claw带权二分图最大完美匹配,深入理解KM算法题意题意:给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立。先输row,再输出col,再输出全部总和(总和应尽量小)。思路利用KM算法中的l(x)+l(y)>=w(x,y)。算法结束

2017-10-16 21:12:06 236

原创 Gym 100273A Ants

Gym 100273A Ants二分图最大完美匹配题意给出n个蚁群与n个苹果树坐标(任意三点不共线),使得每一个蚁群对应一个苹果树,且蚁群到苹果树的路线不相交。保证有解,求总距离最短的方案。思路二分图最大(小)匹配,将权值变为负的来处理最小匹配,别忘了初始化也要初始化成负无穷。 容易想到完美匹配模型。 然后考虑路线相交的问题。对于四个定点,构成的两条不共点的线段。相交线段长度之和一定大于不

2017-10-16 20:41:05 326

原创 UVA 11354 Bond

UVA 11354 Bond最小生成树,LCA,ST题目给出一张n个点m条边的无向图, 每条边有一个危险度,有q个询问, 每次给出两个点s、t,找一条路, 使得路径上的最大危险度最小。思路首先,我们可以发现,如果求一个最小生成树, 那么任意两点, 在生成树上有唯一路径, 而且这条路径上的最大危险值一定最小。 然后在最小生成树上做路径最小值的询问,处理出LCA,在用RMQ。代码#include<b

2017-10-16 15:01:19 247

原创 Tarjan

Tarjan#include<bits/stdc++.h>#define M(a,b) memset(a,b,sizeof(a))#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;const int MAXN=1007;typedef long long LL;struct Targan{

2017-10-15 21:53:11 188

原创 匈牙利板子

匈牙利板子#include<bits/stdc++.h>#define M(a,b) memset(a,b,sizeof(a))#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;const int MAXN=2049;typedef long long LL;vector<int> g[MAXN

2017-10-15 21:40:25 235

原创 CSAPP LAB2 BombLab

CSAPP LAB2 BombLab给一个可执行文件,需要按顺序输入6个字串,每个字串是一个小炸弹的密码。通过反汇编找出每个字串的内容。考察汇编语言,gdb的使用。关于GDB的使用终端下输入gdb进入GDB,使用file <文件名>加载二进制文件,加载后只是读取符号表,并不执行。使用set args <参数>给程序设置参数,可以为空(我遇到了没设置参数,但参数不为空的情况>_<,所以还是清一下参数

2017-10-10 13:29:27 1653

原创 HDU 3874 Necklace

HDU 3874 Necklace线段树,离线询问题意给一个数组,m个询问。每次询问一个区间,求区间内数的和,重复数只计算一次。思路离线询问后按右端点排序,从左往右扫数字,开个hash记录上次该数出现的位置。线段树模拟数组,出现就在位置上放数,没出现就置零,统计区间和。这样每次扫到一个数,如果他没出现,就放到线段树上;如果他出现了,那么把它从上次出现的位置删掉,放到新的位置,更新hash数组。每次询

2017-10-10 00:38:17 184

原创 HDU 5289 Assignment

HDU 5289 Assignment单调队列、线段树题目给一个数列,求满足下列条件的子区间的个数: 对于子区间[L, R]内的任意两个元素的差值小于k。思路暴力O(nlognlogn)O(nlognlogn)(967ms): 两个set维护,双指针ij。i指向区间首端元素,j指向区间尾端元素。set统计最值。如果最大值减最小值大于k了,那么在set中吧j指向的元素移除,j++。单调栈O(n)O

2017-10-09 00:27:04 177

转载 输入输出挂模板

ACM输入输出挂模板原文地址%大佬,谢谢!1. 一般输入输出挂template <typename T> inline bool scan_d (T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0; //EOF while (c != '-' && (c < '0' ||

2017-10-07 16:24:30 202

原创 HDU 4436 str2int

HDU 4436 str2intSAM计数题意给出一些数字串,每个数字串可以分成若干数字,比如123可以分成1,2,3,12,23,123。求所有数字串分成的数字的集合的和。思路SAM的计数问题。首先多串建SAM,中间用特殊字符(’9’+1)分开。统计时忽略这条转移边就好。然后这样想:有个节点代表串12,转移边转移到节点代表123,那123节点的贡献就是12*10+3。如果一个节点代表多个串,比如节

2017-10-02 00:57:01 189

原创 CSAPP LAB1 DataLab

CSAPP LAB1 DataLab参考大佬1 参考大佬2 那个不用if的绝对值挺好的,据说可以加速绝对值计算,但是我测试并没有快多少>_<int abs(int x){ int res=x>>31; res=(x+res)^res; return res;}有一些太复杂了不想想了,就直接抄大佬了。用的时候再补吧~/* * CS:APP Data Lab *

2017-10-01 20:33:26 2393

原创 CodeForces 427D Match & Catch

CodeForces 427D Match & CatchSAM题意给两个串,求一个最小子串的长度,使得它是两个串的公共子串,且在两个子串中均只出现一次。思路对第一个串建自动机,求公共子串就是常规思路,不过跑的时候开个num数组记录,到一个点说明这个点代表的子串们出现了一次,记录这个次数,这是第二个串的次数。第一个串的次数在SAM中处理出来,那个endposamu数组。至于每个状态,跑到了就说明这个

2017-09-28 19:38:10 244

原创 SPOJ NSUBSTR Substrings

SPOJ NSUBSTR Substrings后缀自动机SAM题意给一个字符串长度n,求他所有长度为k的子串中出现最多的串的出现次数。要求输出所有k的答案。思路SAM,拓扑排序统计每个状态的endposamu(即每个状态的字符串出现的次数)后: 求出每一个状态的|endpos(st)|后,我们还需要求出每个长度的子串最多出现了多少次。假设ans[l]表示长度为l的子串最多出现的次数。不需要对于每

2017-09-26 21:57:14 330

原创 SPOJ SUBLEX Lexicographical Substring Search

SPOJ SUBLEX Lexicographical Substring SearchSAM,后缀自动机,计数题意给一个字符串S,将他的所有子串(去重)按字典序排序,给q个询问,问拍第k个子串是谁。思路后缀自动机的计数问题。后缀自动机每个状态都代表一个或几个字符串。统计每个节点能到达多少个跟他具有相同前缀的字符串。换句话说就是统计每个点通过trans边能到多少个串。方法可以dfs,也可以基排。基排

2017-09-26 18:07:10 198

原创 SPOJ LCS2 Longest Common Substring II

SPOJ LCS2 Longest Common Substring II后缀自动机题意给出若干串,求所有串的最长公共子串。思路SAM。 对于第一个串建SAM,用后面的串在上面跑。开个数组统计每个状态的最大长度,每个字串搞完了后合并到一个新数组上。合并每个字串的长度时各字串之间取min。最后统计每个状态的max即可。然后WA。。。因为每个可匹配的状态x的前驱状态y也是可以匹配的。。但是在自动机上跑

2017-09-26 01:05:45 184

原创 SPOJ LCS Longest Common Substring

SPOJ LCS Longest Common Substring后缀自动机题意给你两个字符串AB,长度250000,求最长公共子串长度。思路后缀自动机O(n)O(n)算法。对A串建自动机,用B串在上面跑。当前状态设为S,当前字母c,若S有c的转移边,那么S走到新状态,长度加1;否则沿失配边往上走,直到新状态存在c的转移边,长度更新为新状态的最大长度。代码粘的板子,MAXN忘了改导致内存占用巨大,不

2017-09-25 14:21:27 175

原创 HYSBZ 1483 梦幻布丁

HYSBZ 1483 梦幻布丁模拟链表,链表启发式合并题意N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色.思路暴力建出布丁的链表,记录每种颜色的起始位置,结束位置。合并时将一个颜色的链表遍历,全改成另一种颜色,统计对ans的影响。并将链表连起来。为了防止退化,统计出每个颜色的size,进行

2017-09-23 21:02:50 293

原创 POJ 2114 Boatherds

POJ 2114 Boatherds点分治题意给一棵带边权的树,给一系列询问,问是否存在一条路径,使得路上权值和恰好为K。思路点分治。 100个询问,每次做一遍点分治。点分治记录所有路径长度,在二分查找是否有满足条件的长度。代码#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespa

2017-09-22 23:45:41 215

原创 [bzoj2152]聪聪可可——点分治

bzoj 2152 聪聪可可点分治题意给定一棵带权树,需要统计路径长度为3的倍数的路径条数。思路重学点分治。 主要操作就是找重心,那个getrt函数。mx[x]表示x最大的儿子的size,注意这个最大的儿子包括他父亲。所以最后那句mx[x]=max(mx[x], n-sz[x]);就是统计他父亲那边的size。getdis和calc函数都是暴力计算,getdis(x,f)是统计x的子树中的dis情

2017-09-22 15:27:17 186

原创 2017广西邀请赛补题

2017广西邀请赛模拟传送门HDU 6182 A Math Problem数学题。。我和老谭都做过,就交给学弟去做。实际上回忆一下计组的知识,1616=26416^{16}=2^{64},longlong就爆了。所以这题答案最大16,预处理15以内的数,暴力判断就好。#include<bits\stdc++.h>#define M(a,b) memset(a,b,sizeof(a))#defi

2017-09-21 20:27:02 288

原创 2017 ACM/ICPC Asia Regional Qingdao Online

2017 ACM/ICPC Asia Regional Qingdao Online5题。。。还好吧。。。不过有个300人做出来的我们没做出来,稍微有点遗憾。按过题顺序:上来我开了01,发现是个水题,抄了一发板子,WA。。发现有100+人提交,没人通过。。。感觉自己naive,就暂时放到一边。学弟开了08,发现水题,写了一发,WA,改了改过了。。1008 Chinese Zodiac#include

2017-09-18 01:42:02 465

原创 2017ACM乌鲁木齐网预

2017乌鲁木齐网预A#include<iostream>#include<cstdio>#include<ctime>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#define N#define Musing namespace std;typedef long long LL;int

2017-09-09 18:28:48 220

原创 HackerEarth The Grass Type

HackerEarth The Grass Typestd::map的启发式合并,树上问题题意一棵树,每个节点有一个int。问每个节点u的子树中,两个不同节点(a,b)满足val[a]*val[b]=val[u]的pair(a,b)有多少个。思路map的启发式合并,dfs时将子树的结果合并到根上,并查询pair即可。复杂度O(nlog2n)O(nlog^2n)。代码#include<bits/std

2017-09-07 13:58:40 284

原创 Codeforces 570D Tree Requests

Codeforces 570D Tree Requestsdsu on tree题意给一棵树,每个节点有一个字母。一些查询Q(x,d),查询x及其子树中,与根节点距离为d的所有字母是否可以构成回文串。思路两种思路,dfs序+树状数组或dsu on tree。dfs序+树状数组 我们可以跑一遍dfs序,这样子树在dfs序中连续。dfs时同时处理出距根所有距离的节点。然后离线询问,按深度排序,开26个

2017-09-06 23:48:53 299

原创 Codeforces 246E Blood Cousins Return

Codeforces 246E Blood Cousins Return数据结构,dsu on tree题意一棵树,每一个点有一个颜色(字符串),每一次询问以某一个点为根的子树中与其距离为k的点有多少种颜色。思路dsu on tree。因为第二次dfs时每个深度的信息都要记录,就对每一个深度开一个set,记录这个深度下出现过的颜色即可。 dfs完一个节点,将它的深度加上询问的深度,就是实际深度,查

2017-09-06 14:20:43 300

原创 Codeforces 375D Tree and Queries

Codeforces 375D Tree and Queries数据结构,dsu on tree题意给一棵树,每个节点有颜色,给一些查询(k,v),问k及其子树中,出现大于等于v次的颜色有多少种。思路dsu on tree。复杂度O(nlog2n)O(nlog^2n),dsu的nlogn加上树状数组的logn。dsu的过程中用树状数组维护出现t次的颜色的种数。dfs完一个节点处理他的所有询问。代码#

2017-09-06 12:55:30 339

原创 HDU 6133 Army Formations

HDU 6133 Army Formationsdsu on tree题意给你一棵n个节点的二叉树,每个节点有一个提交任务的时间,每个节点总的提交任务的罚时为:提交这个节点和其子树所有的任务,每个任务提交时间的总和为该点的罚时。求每个节点提交完所有任务的最小罚时思路树上启发式合并。考虑有这样一个数据结构, 可以动态往一个多重集里面添加数字, 删除数字, 并查询多重集中元素的sumofsum. 这个

2017-09-05 16:21:07 225

原创 Codeforces 600E Lomsat gelral

Codeforces 600E Lomsat gelral树上启发式合并题意一棵树,每一个点有一个颜色,统计以每一个节点为根的子树中出现次数最多的颜色的编号,如果有多个颜色,统计他们的和。思路学习了一下dsu on the tree,安利一下良心博客1,博客2,以及CF官方解答。 算法的大致过程: 首先将树轻重链剖分,在dfs的过程中先dfs轻儿子,再dfs重儿子。 假设某一个点的儿子都已

2017-09-05 15:34:01 304

空空如也

空空如也

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

TA关注的人

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