/* HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4 题意: 四个点的环,给定相邻两点距离,问从2号点出发,2号点结束,距离大于k的最短距离 d(i,j) < 30000, k <= 1e18 分析: 设 r = min(d(1,2), d(2,3)) 假设距离 k 可达,则 k+2*r 也可达(来回走的形式) 故求出所有 d[i][j] 满足 d[i][j]%2r == j 的最短距离…
Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Problem Description In HDU, you have to run along the campus for 24 times, or you will fail in PE. According to the rule, you must keep your speed, and…
Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 1384    Accepted Submission(s): 597 Problem Description In HDU, you have to run along the campus for 24 times, or you will fail in…
Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 101    Accepted Submission(s): 40 Problem Description In HDU, you have to run along the campus for 24 times, or you will fail in PE…
http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回到2结点并且不少于K的最短距离. 思路: 官方题解: 最后的答案可以表示为:$ans=p*(2w)+m$,这样一来,m的取值范围就是$(0<=m<2w)$,而因为m的不同,p值也会有所不同.所以我们用 d [ i ] [ m ]表示从起点出发,最后到达 i 点,距离对2w取模为m时的最小距离,这个…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6071 [题目大意] 给出四个点1,2,3,4,1和2,2和3,3和4,4和1 之间有路相连, 现在从2点出发,最后回到2点,要求路径大于等于K,问路径长度最短是多少 [题解] 取一条与2相连的权值最小的边w. 若存在一条从起点到终点的长度为k的路径, 那么必然存在一条长度为k+2w的路径,只要一开始在那条边上往返走就好了. 设dij表示从起点到i,路径长度模2w为j时,路径长度的最小值. 用最短…
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6071 题解 又是一道虐信心的智商题... 首先有一个辅助问题,这道题转化了一波之后就会化成这个问题: 给定\(a_1,a_2,...,a_n\)和\(K\),求使得\(\sum^{n}_{i=1}a_ix_i=B\)有正整数解且\(B\ge K\)的最小\(B\)值.在本题中\(n=4, a_i\le 30000, K\le 10^{18}\). 这好像是个最短路经典问题,但是我想了三小时根本没想到…
/* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问两串是否匹配 分析: dp[i][j] 代表B[i] 到 A[j]全部匹配 然后根据三种匹配类型分类讨论,可以从i推到i+1 复杂度O(n^2) */ #include <bits/stdc++.h> using namespace std; const int N = 2505; int t;…
Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2298    Accepted Submission(s): 740 Problem Description Chiaki has an array of n positive integers. You are told some facts about…
OO's Sequence                                                          Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)                                                                                             T…
CRB and Tree                                                             Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)                                                                                            To…
Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description In a galaxy far, far away, there are two integer sequence a and b of length…
思路:  ans[n]=  ans[n-1] + { (n,1),(n,2).....(n,n)}  现在任务 是 计算  { (n,1),(n,2).....(n,n)}(k=n的任意因子) 很明显  所有能取的k均为n的因子可以 sqrt(n) 内枚举.  若 p 为n的因子   那么  d(n,p) =p*p  *     {(n/p,1) ,(n/p,2) ...(n/p,n/p)}(后面这部分 k 取 1) 那么任务就转化成求   f(n)     f(n)表示 {(n,1),(n,2…
思路:无源汇有上下界可行流判定, 原来每条边转化成  下界为D  上界为 D+B   ,判断是否存在可行流即可. 为什么呢?  如果存在可行流  那么说明对于任意的 S 集合流出的肯定等于 流入的, 流出的计算的 X 肯定小于等于这个流量(X是下界之和), 计算出来的Y (上界之和)肯定大于等于 这个流量  肯定满足X<=Y. #include<cstdio> #include<cstring> #include<algorithm> #include<cm…
给你一个数 n ( 2 <= n <= 109 ),现在需要你找到一对数a, b (a + b = n),并且使得LCM(a, b)尽可能的大,然后输出最大的 LCM(a, b). (为什么我每次看到题目都想去暴力..Orz    题外话) 这道题先对  n = 2 的情况进行判断,从输出可以知道 n =  2 的时候 ans =  1.接着对 n 进行分情况讨论.当 n = 2k + 1 的时候,ans = k * (k + 1). 当 n = 2k 的时候: 当 k 为偶数的时候 ans…
Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1064    Accepted Submission(s): 398 Problem Description During summer vacation,Alice stay at home for a long time, with nothing to…
题意:一棵树,每个点都有自己val(1 <= val <= 1e5),而任意两个点u,v可以对lca(u,v) 产生gcd(valu,valv)的贡献,求每个点能接受到来自子树贡献的最大值. 分析:一个数w和其整数数倍的数gcd值还是w.记录每个值对应树的下标,枚举1- max{val}中的数,遍历其整数倍中两两结点的lca,检查其是否需要被更新. 其中遍历LCA的操作并不用二重循环枚举顶点,可以将顶点按dfs序排序后遍历其中相邻两点的LCA. 这里使用了RMQ的方式O(1) 查询LCA. #…
题意:有N个主武器(MW)和M个副武器(SW),每个武器都有自己的S值,和K个附加属性xi.要选取一对主副武器搭配,搭配后获得的性能由该公式得出: 求获得最大的性能为多少. 分析:由于|xm - xs| = max (xm - xs, xs -xm) .所以每种武器如果选择,则其属性xi在最后贡献中只有正负两种状态.那么对于每一种武器,其对最终贡献可能有2^K中组合, 若主武器的一种组合为S,则其选取的副武器的组合即为S的补集.所以对每一种组合S,枚举每个武器在该组合下的贡献并记录最大值. 最后…
题意:M个影片,其属性有开始时间S,结束时间T,类型op和权值val.有K个人,每个人可以看若干个时间不相交的影片,其获得的收益是这个影片的权值val,但如果观看的影片相邻为相同的属性,那么收益要减少W.每个影片只能被一个人看.求所有人能获得的收益值之和的最大值. 分析:因为人数不定,所以贪心和dp的思路被否定了.1对多的带权匹配,求最大权,这种问题显然KM是解决不了的,那么只能是最小费用最大流了.而这题要求的是最大收益,那么建负权边即可. 为了保证每个影片只被一个人观看,将其拆为入点和出点,入…
题意:N个点M条边的无向图,每条边都有属于自己的编号,如果一条路径上的边编号都相同,那么花费仅为1:改变至不同编号的路径,花费加1,无论这个编号之前是否走过. 分析:记录每个点的最小花费,再用set维护这个最小花费对应的前驱边的编号,可能有多个不同的前驱编号.如果当前状态可以更新点最小花费,那么将set清空并加入前驱编号:如果与最小花费相等且前驱的编号不在集合中,那么将前驱的状态加入集合中. *BFS要用优先队列,否则会错. #include<bits/stdc++.h> using name…
题目中没有明说会爆int和longlong 的精度,但是在RNG函数中不用unsigned int 会报精度,导致队友debug了很久... 根据每次生成的l,r,v对区间更新m次,然后求 i*ai的异或和.挺裸的线段树,只要ai<v就更新ai.在线段树结点中维护区间最小值,每次更新时,如果区间最小值>=v,那么就不用更新了. #include<bits/stdc++.h> #define lson rt << 1 #define rson rt << 1…
/** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. 思路:一个邻接矩阵(01矩阵)自身的T次方那么,a[i][j]的结果表示i到j经过T条边的方法数.(通过矩阵相乘理解 c.m[i][j] = (c.m[i][j]+a.m[i][k]*b.m[k][j]%mod)%mod; 表示i到j,通过i先到k,然后k到j:) 那么求a[1][n]的T步就是T…
/** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有前导0,删除尽量少的位数,可以任意位置删除. 输出剩余的位数.如果找不到,输出-1s. 思路: 一开始心想,这么多个位置,又不知道删除几个,排列组合的情况下,简直不可能完成. 这题是我的队友tzq想出来的.在此重新思考一下. 常规想法不可能完成.一定存在某些特殊的地方.观察题目要求,6的倍数.一个数…
/** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思路:树形dp,定义dp[i][j]表示以i为根,i节点染色为j时候的子树的染色方法数. */ #include<bits/stdc++.h> #define LL long long using namespace std; typedef long long ll; ; ll dp[maxn][…
这题的题意是给你一幅图,图里面有水滴.每一个水滴都有质量,然后再给你一个起点,他会在一開始的时候向四周发射4个小水滴,假设小水滴撞上水滴,那么他们会融合,假设质量大于4了,那么就会爆炸,向四周射出质量为一的水滴,问你在T时刻的时候,各个水滴的状态. #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <math.h> #i…
D. Events 线段树区间更新查询区间历史最小值,看似很简单的题意写了两天才写出来. 题意:n个数,Q次操作,每次操作对一个区间[l,r]的数同时加上C,然后输出这段区间的历史最小值. 思路:在线段树区间更新最值查询的基础上再用一个变量表示历史最小值,每次更新只需对当前最小值更新然后用当前最小值更新历史最小值.细节问题很不好处理,可能会有重复多次更新某个区间但是其下的子节点叶节点却没有更新,而是每次重复叠加了一个add值,这样就可能将最小值覆盖.所以我们在pushdown操作的时候应该注意如…
题目大意: 一个地方的点和道路在M年前全部被破坏,每年可以有三个操作, 1.把与一个点X一个联通块内的一些点重建,2.连一条边,3.地震震坏一些边,每年最多能重建K个城市,问最多能建多少城市,并输出操作要让字典序最小 思路: trivial:显然每年向当年可以建的城市连边,每年可以匹配最多K个城市,嗯,很明显的网络流思路,可这样方案数不太好输出 full:再仔细想想这就是多对一的多重匹配,跑一跑匈牙利就可以,K个城市可以拆点,当然简单的方法直接跑K次也可以(想一想为什么) 为了字典序最小,我们要…
hdu 6103 Kirinriki #include<bits/stdc++.h> using namespace std; int n,m,ans; ]; void doit(int l,int r) { ,nw=; for(;l<r;l++,r--) { while(l+d<r-d&&nw+abs(s[l+d]-s[r-d])<=m)nw+=abs(s[l+d]-s[r-d]),d++; ans=max(ans,d); nw-=abs(s[l]-s[r]…
/* HDU 6168 - Numbers [ 思维 ] | 2017 ZJUT Multi-University Training 9 题意: .... 分析: 全放入multiset 从小到大,慢慢筛 */ #include <bits/stdc++.h> using namespace std; const int N = 125250; int n, s[N]; int a[N], cnt; multiset<int> st; multiset<int>::it…
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6071 题目: Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 144    Accepted Submission(s): 62 Problem Description In HDU, you have…