
HDU
alusang
T^T
展开
-
HDU 5857
一道智商题,说水也行,没有算法,模拟就行,说不水也行,看你用什么方法模拟。比赛的时候讨论的两个序列有几个元素,当总个数为奇偶的情况再分左右哪边的多,再分多的那边个数的奇偶。。。写了10+次还是不全面。上网查了大神们的代码解析,他们用的都是讨论区间位置关系。两个区间只有不相交和相交但是不包含和包含三种关系。做一下简化处理可以使后两种情况合并为一种,所以只有两种情况。然后确定中位数在这翻译 2017-04-11 20:54:30 · 318 阅读 · 0 评论 -
hdu-3292-佩尔方程+矩阵快速幂
这个题理解完了可以提取出x^2-n*d^2=1这个式子,一看就是典型的佩尔方程,然后求解第k项就行了。要注意n是完全平方数的时候无解。求最小特解用的暴力#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <vector...原创 2018-07-29 17:48:49 · 211 阅读 · 0 评论 -
hdu-4990-矩阵快速幂 or 等比数列+快速幂+除法取模
这个题有两种解法,一个是等比数列加快速幂,二是矩阵快速幂。矩阵快速幂很好做,代码这里不写了:题目已知奇数项a[n]=a[n-1]*2+1,偶数项a[n]=a[n-1]*2。分别拆分可得奇数:a[n]=a[n-1]+2*a[n-2]+1,偶数项:a[n]=a[n-1]+2*a[n-2]+1。发现都是同一个式子,所以直接矩阵快速幂就可以了等比数列就是列出前几项观察可得a[n]=2^(n-1)+...原创 2018-07-26 19:32:40 · 472 阅读 · 0 评论 -
hdu-2256-共轭数+矩阵快速幂
首先我们可以自然地发现原式然后联想到共轭数的性质想到,并且那么,也就是说因为,这样把上式取整得(是整数部分,是非整数部分的系数,再说下共轭数的性质还有一个)那么再去想如何求我们可以设那么由此得最终得到递推式也就是 构造矩阵得,且,#include <iostream>#include <cstdio>#incl...原创 2018-08-10 09:48:10 · 296 阅读 · 0 评论 -
hdu-5451-共轭数+矩阵快速幂+循环节
这个题构造矩阵这里就不讲了,详情见hdu-2256这个题由于太大了,所以根本没法做,于是就想去寻找循环节这里先说下方法,不说为什么(因为我也没弄懂QAQ)循环节就是mod*mod-1,这样把指数模掉这个循环节就好啦,也算是降幂了#include <cstdio>#include <cstring>#include <iostream>u...原创 2018-08-10 10:50:56 · 224 阅读 · 0 评论 -
hdu-2767-Tarjan求强联通+缩点
先讲一些知识点(强联通都知道就不说了)根据这个还有这个总结得极大极小连通子图(貌似有的离散课本讲了):极大的就是本身,极小就是包含连通图中所有顶点,但是在多加一条边就会产生环,减少一条边就无法构成连通,也就是生成树无向连通图的极大连通子图是其本身(唯一),极小连通子图是其生成树(不唯一)无向不连通图的极大连通子图就是各个连通(不唯一),极小连通子图是各个连通的生成树(不唯一)有...原创 2018-08-10 20:54:01 · 210 阅读 · 0 评论 -
hdu-2066-最短路
这个题只要把小孩的家看做0节点,把和小孩家相邻的城市和他家连起来且边权值为0即可(QAQ)这里用spfa,好久不写了有点生疏#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <vector>#includ...原创 2018-08-14 14:01:12 · 207 阅读 · 0 评论 -
hdu-2087-kmp
看了刘汝佳的mp算法于是去刷lkuangbin专题,网上也有用next函数的,这里就不说了https://blog.youkuaiyun.com/starstar1992/article/details/54913261/void getFail(char *b,int *c)//递推求失配函数,即模板串匹配自己{ int m=strlen(b); c[0]=0; c[1]...原创 2018-08-07 16:37:02 · 432 阅读 · 0 评论 -
hdu-1465-错排公式
这样想,错排n位时,先把其中一位错排,假设把一个数k放在第一位,那么有n-1种放法,然后1可以随意放置,但是有两种情况。1:1放在了第k位,也就是1和k交换了,那么剩下的直接错排有F(n-2)种方法;2:1不放在第k位,此时相当于F(n-1)(这个我没想懂)。所以递推公式就是F(n)=(n-1)*(F(n-1)+F(n-2))。#include <cstdio>#include...原创 2018-08-08 13:08:36 · 202 阅读 · 0 评论 -
hdu-1251-Trie(字典树)
这个题要查询是以某个串为前缀的串的个数那么我们可以利用val数组,初始为0,然后每次插入一个字符串的时候就令该串的所有节点val值+1最后要查询的串的最后一个字符所对应的编号的val值就是以查询串为前缀的串的个数这里再说下字典树的ch[i][j]记录的是编号为i的节点的子节点j的编号比如说ab这个串,当a编号是7时,ch[7]['b'-'a']储存的就是b的编号#includ...原创 2018-08-13 10:52:46 · 582 阅读 · 0 评论 -
hdu-4825-Trie(字典树)
这个题是找亦或最大的,那么越高位亦或得1越好,所以可以从最高位开始取反找,如果有就选,没有就只能选相同的#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <vector>#include <stack&...原创 2018-08-13 21:16:55 · 277 阅读 · 0 评论 -
HDU-1231-
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在今年的数据结构考卷中,...原创 2017-01-30 23:08:07 · 290 阅读 · 0 评论 -
hdu-3829-二分图匹配(最大独立集)
这个题需要找到矛盾所在也就是有的小朋友喜欢某只狗(猫),但是另外一个小朋友却不喜欢这只狗(猫)那么如何建图呢考虑到,如果这只狗(猫)不被移除,那么两个小朋友中必有一个小朋友不高兴所以我们建图可以将有矛盾的两个小朋友建立双向边(双向边是因为:有矛盾的两个小朋友不可能A高兴能表示B不高兴,但是B不高兴却不能表示A高兴)然后进行二分图匹配,匹配完找到的是有多少对矛盾的小朋友(但是...原创 2018-08-24 11:58:10 · 330 阅读 · 0 评论 -
hdu-5884-二分(+玄学)
这个题正确做法是二分K然后去验证每次验证都是K叉哈弗曼树,也就是排序完了在每次合并最小的K个数但是要注意一点开始有N个数字,归并完应该是1个,也就是合并了N-1个每次归并会把K个数字变成1个,也就是每次减少了K-1个那么如果N-1不是K-1的倍数,需要优先处理前(N-1)%(K-1)+1个最小的数以上是正确做法,下面再说玄学事情1.如果用优先队列会慢很多(很快的都是双队...原创 2018-08-24 13:39:56 · 194 阅读 · 0 评论 -
hdu-6222-佩尔方程 or 规律打表
这个题要说的东西太多了。1.可以根据题意暴力打表,找出规律,用Java大数打表即可,此处不多说2.这个题是一个简单的佩尔方程,这里说一下方程的几个特点,不证明佩尔方程的一般形式为 其中,d>1且d不是完全平方数,当d为完全平方数时,只有 这一组特解如果(x1,y1),(x2,y2)为方程的两组解,那么(x1*x2+d*y1*y2, x1*y2+x2*y1)也是方...原创 2018-07-29 00:28:18 · 939 阅读 · 1 评论 -
hdu-6301-思路贪心
这个题如果从直接的想法做很简单,但是时间肯定过不去,难处理的在于如何把用完了的数字重新利用这个题解是dls的代码,大体思路是用pre[i]记录i所在的区间的左端点,然后设置一个标记用来记录已经处理完的位置(不是填完数字的位置,是既填完了数字又将可利用的数字处理完了的位置),当标记小于pre[i]时表明:从标记到新的区间左端这个区间的数字可以重新利用了,然后用set回收一下。这样就解决了这个问题...原创 2018-07-24 19:43:56 · 203 阅读 · 0 评论 -
HDU-1215
打表求所有因数#include using namespace std;#define maxn 500005int a[maxn];int main(){ for(int i=1;i<maxn;i++) for(int j=i+i;j<maxn;j+=i) a[j]+=i; int t,n; cin>>t; w翻译 2017-05-14 21:05:19 · 301 阅读 · 0 评论 -
POJ 2955
01背包变形一般人第一眼看去都是dp被捉到的概率,找抢的钱的最大值,但是dp浮点数是很不现实的,那么就要转换,转换成dp所有的和,找最大的安全概率。#include #include #include using namespace std;struct P{ int mon; double gai;}p[10005];double dp[10005];原创 2017-05-25 22:10:10 · 305 阅读 · 0 评论 -
HDU-1257
#include using namespace std;int d[2000];int main(){ int n; while(cin >> n) { d[1]=1e8; int m=1; int x,j; for(int i=1;i<=n;i++) {原创 2017-05-15 22:09:08 · 196 阅读 · 0 评论 -
HUD 2955
01背包变形一般人第一眼看去都是dp被捉到的概率,找抢的钱的最大值,但是dp浮点数是很不现实的,那么就要转换,转换成dp所有的和,找最大的安全概率。#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct P{ int mon; double gai;}p[10005];原创 2017-05-25 22:13:34 · 279 阅读 · 0 评论 -
HDU-1789
两种方法:1:把分数从大到小排序然后去安排每天的任务,如果安排不了了就舍弃。#include #include #include #include #include using namespace std;int arr[1005];struct P{ int day; int score;} p[1005];int cmp(const P &a,翻译 2017-05-16 17:25:26 · 165 阅读 · 0 评论 -
HDU-1785
数学题,atan2(y,x)求向量与x轴正方向夹角(弧度)。#include #include #include #include #include #include using namespace std;struct P{ double x; double y; double z;} p[1005];int cmp(const P &a,c原创 2017-05-16 17:57:28 · 194 阅读 · 0 评论 -
POJ 3342
第一种方法:弗洛伊德最短路#include #include #include #include #include #include using namespace std;int Mao[105][105];int main(){ int m,n; while(cin >> m >> n && m && n) { memset(原创 2017-07-25 21:01:40 · 219 阅读 · 0 评论 -
HDU 2688
这题同一个代码可能过也可能不过,网上的题解基本上是同一种做法。个人写的细节差异会容易TLE。原创 2017-11-15 18:02:30 · 234 阅读 · 0 评论 -
hdu-2571-简单DP
这题场上因为没发现初始化不能为0疯狂wa....QAQ#include #include #include #include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;int t,n,m;int G[22][1003];int ans原创 2018-03-28 21:03:38 · 110 阅读 · 0 评论 -
HDU-1069-经典DP
这个题题意就是选出一部分排列好的砖使得砖的高度最高。两个处理上的点:1.加入砖块时要加入输入的全排列,假设高度是3时,2.4.3这组加进去还要加进去4.2.3。例如:排完序后面一块砖是5.4.3,由于宽度相等,所以就不能选择了,实际上把这块2.4.3旋转一下变成4.2.3就能选择了。2.排序。排序要先排宽度再排长度,反之亦可,就是不能按照面积排(我一开始就按照面积排序怎么也不对QAQ)。然后就开始...原创 2018-05-22 15:37:18 · 1154 阅读 · 1 评论 -
hdu-1074-状态压缩dp
第一次做状态压缩dp。这里注意一个点就是枚举n个作业的顺序不同从而使得更新条件不同。当正向也就是1-n枚举时候,dp[i]>=dp[i-temp]+score更新。当逆向也就是n-1枚举的时候,dp[i]>dp[i-temp]+score更新。题目要求多解下输出最小字典序,而且输入是按照字典序从小到大输入的,当逆序遍历时候,因为输出的是x-(1<<pre[x])这个状态,要...原创 2018-07-04 22:12:35 · 240 阅读 · 0 评论 -
hdu-1078-记忆化搜索
这个题一看就想到搜索,嗯,然后记忆化一下就好了。#include <cstring>#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <queue>#define INF 0x3f3f3f3f...原创 2018-07-17 23:25:51 · 174 阅读 · 0 评论 -
hdu-1114-完全背包变形
首先根据题意一眼就知道是完全背包,但是要求最小值,那么就把dp初始化为INF然后将背包大小为0的时候初始化为0,将max改为min,完全背包即可。但是这里说明两点1:为什么这样就是求出恰好装满的最小值呢?最小值就是min,好理解,而恰好是利用的j>=w[i]。当背包不断增大时,首先存进去的肯定是j=w[i]的,此时是恰好装满。2:网上的题解都是一位数组滚动的,这里用的二维,做的时...原创 2018-07-18 14:30:10 · 192 阅读 · 0 评论 -
hdu-6201-DFS
这个题我们可以建图再去搜索当一条边连接的两个城市能够从一个到另一个能赚钱的话比如说输入 x y z,如果x城市到y城市能赚钱(也就是price[y]>=price[x]+z)就建立一条从x到y的单向边那么DFS从所有入度为0的点开始沿着边搜索,势必钱是越赚越多的所以更新赚的钱即可#include <iostream>#include <cstri...原创 2018-08-29 20:28:32 · 175 阅读 · 0 评论