- 博客(38)
- 收藏
- 关注
原创 POJ 3101 Astronomy 轨道相遇问题,求n个分数的最小公倍数
题意:给你一个n,然后给你n个星球的周期。让你求出经过多长时间可以使所有的星球可以在条直线上。思路: 求轨道相遇问题,设经过了t个时间星球A转的角度为 (2π/T1)*t 星球B转的角度为(2π/T2)*t 他们在一条直线上所以可得:(2π/T1)*t-(2π/T2)*t=n*π,半圈就相遇,所以n取1。-->t=T1*T2/(2T1-2T2);然后需要求出所有的星球与第
2016-08-26 08:56:38 534
原创 POJ 2891 Strange Way to Express Integers解线性同余方程组(中国剩余定理不互质版)
题意:给出k个模方程组:x mod ai = ri。求x的最小正值。如果不存在这样的x,那么输出-1.题解:由于这道题目里面的ai、ri之间不满足两两互质的性质,所以不能用中国剩余定理直接求解。不过,我们可以模仿中国剩余定理的做法来解决这个问题。如果只有一个方程:x mod a0 = r0。那么,显然x的最小正值为a0+r0。根据模的性质,我们容易得知,x+a0*k
2016-08-25 19:35:11 599
原创 POJ 1061扩展gcd
扩欧的使用,要学会构建方程,首先要先写出等式关系出来,然后再将等式关系进行构建方程。这道题是:假设两只青蛙都跳了t步之后两者相遇。则 青蛙A 的位置为x+mt ,青蛙B为 y+nt。则 x+mt-y-nt=pL (p为圈数)所以t*(n-m)+pL=x-y; 套入extend_gcd 既可以得到x1(n-m)+y1L=gcd;之后求出gcd与x-y的倍数关系。
2016-08-25 10:44:43 272
原创 POJ 2947 (高斯消元解同模方程)
公司被吞并,老员工几乎全部被炒鱿鱼。一共有n种不同的工具,编号1-N(代码中是0—N-1), 每种工具的加工时间为3—9天 ,但是现在老员工不在我们不知道每种工具的加工时间,庆幸的是还保留着一些对工人制造工具的记录,对于每个老员工,他的记录包括,他开始工作的时间(在某个星期的星期几),被炒鱿鱼的时间(某个星期的星期几),在第几个星期不知道.....在这段时间里,他正好加工了k件物品,给出了这k件物
2016-08-24 22:04:06 291
原创 POJ 1222 开关问题高斯消元法
一个01矩阵,表示灯的亮灭状态,每次操作可以改变一个十字形状内的五个灯的状态。问能否将所有灯熄灭。最后输出开关的状态。思路:开灯关灯问题,5*6的灯阵,将每一个位置上开关状态看做一个变元,30个变元,而对于30个位置的灯的状态当成开关状态的解,列出30个异或方程,高斯消元解方程即可(增广矩阵)。对于每个状态,影响他的条件与五个位置的开关状态有关,让这五个状态的开关系数为1 ,其
2016-08-24 17:01:25 447
原创 POJ 3270 Cow Sorting (置换群利用) 位置交换问题
题目:有一串数字,要将它排列成升序,每次可以交换两个数,交换一次的代价为两数之和。要求代价最小。所有的数都是唯一的。将原有数列排序之后,得到目标串,这样就与原串形成了置换。1.对于单个循环群来说(大小大于1),所有的数的位置与目标位置完全不同,所以最理想的交换的情况是需要交换n-1次。例如串 2 3 4 5 1 变成1 2 3 4 5 这是最简单的循环群,需要交换n-1次并且每
2016-08-24 10:43:34 377
原创 POJ 1026 Cipher(置换群)循环节
Bod 和 Alice 计划使用一种全新的编码方案,令人惊讶的是这不是一个公开的公匙密码,但是他们的编码基于密匙,在Philadelphia on February 16th他们的会议中选择了密匙,他们选择的密匙是一个两两不等的整数序列,a1.....an,大于0并且小于等于n,编码基于一下原则。下面的信息是关键,这样关键的人物信息和数字相对齐,一个字符在i位置,编码的时候把他放在ai,a
2016-08-23 21:47:11 387
原创 POJ 1286 polya计数、burnside定理
题目大意:n个珠子串成一个圆,用三种颜色去涂色。问一共有多少种不同的涂色方法。不同的涂色方法被定义为:如果这种涂色情况翻转,旋转不与其他情况相同就为不同。解题思路:Polya定理模版题。burnside定理:对于一个置换f,若一个着色方案s经过置换后不变,称s为f的不动点。将f的不动点为C(f).则等价类数目为所有C(f)的平均值。
2016-08-23 17:10:52 234
原创 HDU 5617 多维dp降维问题,回文串匹配
给你一个n*n的矩阵。 求从(1,1)走到(n,n)所组成的回文串个数。只可以向右或者向下走。思路:1.此题的“序” 是这个二维坐标。2.影响决策的因素是前后字符串是否比配。3.状态及其考虑的方案:因为是回文串问题,所以要考虑从首尾两个位置进行枚举看看相对应的位置是否相等,同时再记录他们的对应位置的相匹配的数量。可以设从起点(1,1)和终点(n,n)同时出发,计算分别到达
2016-08-20 10:30:16 333
原创 HDU5616 背包 天平平衡问题
题目大意:有一个只能判断两边是否相等的天平,现在给你一些已知重量的砝码,问你是否可以通过这些砝码测量一个任意给定的重量(input),即可以通过在天平两侧放一定数量的砝码,使天平平衡。#include #define INF 0x3f3f3f3fusing namespace std;const int N=1000;char s[N];int a[N];int dp[N][3*N
2016-08-19 19:29:29 601
原创 POJ 1166 枚举或者高斯消元
给出9个钟表的状态,给出九种操作,问最少要操作几次能把所有的钟表调回12点。思路:对于9个钟表分别列方程,然后高斯消元即可。然后用每个未知量表示是否进行此操作。所以取值是1或者0接下来就是枚举每个未知量得系数使得每个等式都成立。#include#include#include#include#define LL long long#define bug p
2016-08-17 21:37:52 251
原创 HDU 5667 矩阵快速幂关于指数的递推
SequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1498 Accepted Submission(s): 505Problem Description Holion Augus
2016-08-16 15:58:08 247
原创 HDU 5833 高斯消元 异或方程组
题意:给出n个正整数,从中选出1个或者多个,使得选出来的整数乘积是完全平方数,一共有多少种选法。思路:用01向量表示一个数,再用n个01向量来表示我们的选择,因为完全平方数要求素因子的次数一定要是偶数的,所以我们可以统计的将奇数当作1,偶数当作0,那么就是一组可以变换成oxr的方程组,最后的结果有自由变量f个,答案是2^f-1,f求解就是求n-方程组的秩,(本题不允许一个都不选,所以减
2016-08-16 10:02:11 344
原创 UVA 10870 递推关系 矩阵快速幂
题意:f(n) = a1 *f(n - 1) + a2 *f(n - 2) + a3 *f(n - 3) + … + ad* f(n - d), n > d.求f(n)见白书 155页。 由于n太大,不能直接递推,需要用矩阵快速幂来解决,时间复杂度为O(d^3logn) 举例,d=5的矩阵关系式为: |a1 a2 a3 a4 a5|
2016-08-15 19:48:58 609
原创 POJ 1703 并查集的应用 关系并查集l两种方法
/*****************有两个帮派,有两种操作 D a b表示a 和 b不是一个帮派;A a b 表示询问a b是否是一个帮派,若至此还不确定,输出“Not sure yet”。思路:关系并查集;只要两者的关系确定了,就将他们放入同一个集合内,而另外增加一个表示关系的数组r[ ]来表示该节点与其父亲的关系。0表示同一类,1表示不同类。初始时集合只有自己一个元素,r[ ]设置
2016-08-13 21:17:29 200
原创 HDU 5807 分段 dp 将DAG分段进行
给定一个50个点的DAG图每个点有个权值w[i],给定初始3个特工所在的位置是x,y,z这3个城市,每一时刻每个人都得移动到下一个城市,并且要求每一时刻两两之间都能联系但且仅当任意两个城市之间的权值差思路:注意一点是:输入为有向图,并且输入的数据满足 u /*********************** 对于DAG问
2016-08-12 20:26:06 234
原创 HDU 5821 多校脑洞题贪心
题意:有N个盒子,每个盒子最多装一个球. 球的颜色不一定相同.现在要进行m次区间操作:每次操作 [l, r] 后可以随意将区间内的球重新分配回去.问经过上述操作后是否有可能达到给定的状态. 思路贪心.首先应该明白 待操作数据与目标数据是一一对应的关系,然后接下来就去想,如何可以判断是否可以匹配上。为每个球记录它在最终结果中的序号. 对
2016-08-12 11:44:54 318
原创 HDU 5719 贪心,脑洞题
点击打开链接题意:这儿共有nn堆稻谷,编号为11到nn。Psyche需要将这些谷堆以某种顺序排列,设最终排在第ii位的谷堆是A_iAi。她得知了一些该排列的要求: 1. 对于任意整数i \in [1,n]i∈[1,n],A_1, A_2, ..., A_iA1,A2,...,Ai的最小值为B_iBi。 2. 对于任意整数i \in [1,n]
2016-08-11 10:30:18 381
原创 HDU 5750 数学题
随便推导下, 令y=xdy=xd, 如果dd是yy的maximum positive proper divisor, 显然要求xx是yy的最小质因子. 令mp(n)mp(n)表示nn的最小质因子, 那么就有x \le mp(d)x≤mp(d), 同时有y yn, 那么x \le \lfloor \frac{n-1}{d} \rfloorx≤⌊dn−1⌋.
2016-08-10 10:05:58 368
原创 HDU 5818 2016多校赛第七场 数组模拟链表,来模拟栈
http://acm.hdu.edu.cn/showproblem.php?pid=5818比较简单巧妙的一个做法是引入一个新的栈C,每次合并的时候就把A和B合并到C上,然后把A和B都清空. push还是按正常做,pop注意当遇到要pop的栈为空时,因为题目保证不会对空栈进行pop操作,所以这时应直接改为对C栈进行pop操作. 这样做因为保证每个元素最多只在一次合并中被处理到,pop和push
2016-08-09 22:22:03 315
原创 sg函数应用 多校 HDU5795A Simple Nim 与其他题 NIM变形
点击打开链接题意:一个n堆的取石子游戏,每次可以取一堆中的任意个,或者将当前堆分为三个非空堆。求先手/后手必胜。思路:根据sg定理,游戏和的sg函数等于各个游戏的sg函数的nim和。所以需要把各个状态的sg函数打表打出来,找找规律。该题有两种操作方式,一种是任意一堆拿任意数量,另一种是将任意的一堆分成三等份。其他题目链接http://acm.hust.edu.cn/vjud
2016-08-09 18:42:19 349
原创 POJ 3468 A Simple Problem with Integers 区间和更新,区间和查找
点击打开链接#include#include#include#include#include#include#include#define LL long long#define bug puts("***********");#define lson L,mid,ind<<1#define rson mid+1,R,ind<<1|1#define lind ind<<1
2016-08-08 14:11:21 210
原创 POJ 2750Potted Flower 线段树+dp 动态求环中的最大连续子序列和
点击打开链接题意:给定一个环形序列,进行在线操作,每次修改一个元素,输出环上的最大连续子列的和。并且答案不能为全部序列的和。思路:把环从一个地方,切断拉成一条直线,用线段树记录当前区间的非空最大子列和当前区间的非空最小子列。如果环上的数都是正整数,答案是:环上数的总和-根结点的非空最小子列;否则,答案是:max{根结点的非空最大子列,环上数的总和-根结点的非空最小子列},每次问
2016-08-08 14:07:30 423
原创 POJ 2886Who Gets the Most Candies? 线段树+反素数求因子个数最多
点击打开链接题意:n个熊孩子按顺时针排列,每个人受伤都有一张牌,牌上有一个数字,从第k个孩子开始出队,出队的熊孩子卡上数字是K,则顺时针第k人是下一个出队的,负数则逆时针,第P个出队的会得到的糖果数是p的因子个数,输出得到最多糖果的人和他的糖果数,如果有多个,则输出最先出队的。思路:用线段树来存储整个区间中的剩余人的个数、然后用反素数来找因子数最多的人的出队的序号。反素数就是
2016-08-08 13:55:34 359
原创 POJ 2777 Count Color 线段树染色问题+位运算表示状态
点击打开链接给一个固定长度为L的画板 最初的全部被初始化呢为1这个颜色有两个操作:C A B C:区间AB内涂上颜色C。P A B:查询区间AB内颜色种类数。思路:因为颜色的数量十分的少,所以可以用二进制的状态1 用位运算来进行状态的转移 state=state1|state2通过lazy数组进行操作首先要理解pushdown,与
2016-08-08 13:27:40 222
原创 POJ 2528 Mayor's posters 线段树+离散化技巧
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需要的值来用,比如说区间[1000,2000],[1990,2012] 我们用不到[-∞,999][1001,1989][1991,1999][2001,2011][2013,+∞]这些值,所以我只需要1000,1990,2000,2012就够
2016-08-08 13:17:07 231
原创 POJ 3368 Frequent values RMQ应用
点击打开链接题意:给你n个不递减的序列,然后让你去求 区间[x,y]中哪个数字出现的次数最高。输出出现的次数。思路:这道题白书 RMQ专题有讲的一道例题。首先先考虑如何转换出数学模型出来,此时,求得是区间的最值问题 无更新 所以明确了用RMQ的思路,然后再考虑如何使用RMQ模型去套它,所以要将数字出现的次数作为dp的对象,找出出现次数最多的那个就行了,但此时需要考虑具体的
2016-08-05 12:43:23 202
原创 POJ 3321Apple Tree 树状数组变形
点击打开链接你一颗树,最初每个节点上都有一个苹果,有两种操作:修改(即修改某一个节点,修改时这一个节点苹果从有到无,或从无到有)和查询(查询某一个节点他的子树上有多少个苹果)。思路:树状数组维护的是区间问题,现在如何把这道题转换为区间问题是难点,如何转换呢?我们想要查询一个节点及其分支上有多少个节点的话,就需要重新,进行编号,使得一个点及其分支上的节点是连续的一个区间,这样就可
2016-08-04 22:52:11 279
原创 HDU 5781 ATM Mechine 多校赛 概率dp
点击打开链接已知ATM机中有最多n元钱,每次可以从ATM机中请求取出任意多的钱,若钱数足够则能成功取出,否则会受到一次警告.如果警告次数超过m次就会被当做小偷抓走.求在保证不能被抓走的前提下,若采取最优策略,期望多少步能够取走所有的钱.题解设当前状态dp[i][j],i为最大钱数,j为剩余报错数, 若i > 0、 j > 0, 则dp[i][j] = minik=1
2016-08-03 22:13:48 268
原创 HDU 5792 World is Exploding 2016多校赛第五场 树状数组+容斥原理
点击打开链接找出有多少个四元组(a,b,c,d)满足a≠b≠c≠d,a Ad.思路:计算像a,b这样上升的有sm对,像c,d这样下降的有bg对,ans=la*lb。这样是有重复的,重复的就是a与c重合,a与d重合,b与c重合,b与d重合这四种情况。那么减去这四种情况就ok了。可以用树状数组预处理出每一位i的左边比a[i]大的有多少Lb[],小的有多少Ls[],右边比a[i]大的有
2016-08-03 21:00:41 308
原创 POJ 2352 Stars 树状数组 与 1195二维树状数组
点击打开链接求每个小星星左下角(可以是正下方或正左边)的星星的个数。坐标按照Y升序,Y相同X升序的顺序给出(输入的形式)由于y轴已经排好序,可以按照x坐标建立一维树状数组#include#include#include#include#include#include#include#define LL long longusing namespace std;
2016-08-03 19:30:10 183
原创 差分约束系统 poj
注意:差分约束系统注意:差分约束系统;SPFA 分为用队列,用栈和用优先队列的问题。因为数据的问题有时用队列会超时,可以用栈和优先队列;有时栈会超时,可以用优先队列和队列;先建出满足所有条件的不等式组,根据建图的方向不同初始化问题也会不同。首先必须方向统一,即大于号或小于号必须统一 如果一个系统由n个变量和m个不等式组成,形如 Xj-Xi
2016-08-03 11:45:46 434
转载 图论总结,查分约束系统讲解,最短路,最小生成树,二分图
最短路径dijkstraSPFAfloyd用SPFA解决差分约束最小生成树MSTprimkruskal次小生成树二分图最大匹配和最小覆盖最短路问题无权最短路可以BFS解决,这里只讨论加权的。一、dijkstraDijkstra单源最短路算法,即计算从起点出发到每个点的最短路。Dijkstra常常作为其他算法的预处理。使用邻接矩
2016-08-03 09:29:27 1120
原创 POJ 1416 Shredding Company 整数的切割问题DFS
点击打开链接题目翻译:公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43 (= 1 + 2 + 34 + 6) 是所有可能中最接近而不超过50的。(比如1, 23, 4, 和6 就不可以,因为它们的和不如43接近
2016-08-02 10:32:36 654
原创 POJ 3274 Gold Balanced Lineup 数组Hash
点击打开链接题意:思路:sum[i][j]前i头牛的feature j的总数。sum[a][j]-sum[b][j]=sum[a][j-1]-sum[b][j-1].....=sum[a][0]-sum[b][0]求出a b的差即可。上式再转化:sum[a][j]-sum[a][j-1]=sum[b][j]-sum[b][j-1]......设c[i][j]=s
2016-08-01 22:38:19 223
原创 POJ 2049 Finding Nemo BFS 三维数组存状态, 优先队列优化时间与空间
点击打开链接题目大意:有一个迷宫,在迷宫中有墙与门有m道墙,每一道墙表示为(x,y,d,t)x,y表示墙的起始坐标d为0即向右t个单位,都是墙d为1即向上t个单位,都是墙有n道门,每一道门表示为(x,y,d)x,y表示门的起始坐标d为0即向右一个单位表示门d为1即向上一个单位表示门再给出你起点的位置(f1,f2),并保证这个点的位置不会再墙或者门中,为起点到
2016-08-01 17:20:26 330
原创 HDU 5763 Another Meaning dp+kmp优化
点击打开链接给你一个主串一个子串,然后主串中匹配到子串就可以把当前部分改为*,问主串有多少中不同的样子。纯dp做法。统计种类数的话,dp[i]={ 如果后缀串不完全匹配的话:dp[i] = dp[j-1]; 如果后缀串完全匹配的话 dp[i]= dp[i - 1] + dp[i-len2]; }#include#i
2016-08-01 11:30:32 296
原创 HDU 5773 The All-purpose Zero 第四场多校赛 LIS变形(最长上升子序列)
点击打开链接题意是:给你一个长度为10W的数组,每个数范围0-100W其中的0可以变为INT范围内的任意值问最长上升子序列的长度思路:0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的。因此我们可以把0拿出来,对剩下的做O(nlogn)的LIS,统计结果 的时候再算上0的数量。(因为本来是应该使dp[len
2016-08-01 09:40:40 240
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人