自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

WilliamSun0122的博客

学得越多越能感觉到自己的渺小

  • 博客(88)
  • 资源 (11)
  • 收藏
  • 关注

原创 详谈判断点在多边形内的七种方法(最全面) hdu1756 hrbust1429 为例

这几天在学计算几何,学到点定位的判断点在多边形内,书上提到了三种方法,但是有些方法的代码不全。于是网上找了找,又发现更多判断的方法,一时兴起决定学习一下,看看到底有多少种,结果一个大坑。。。 网上好多介绍的不详细(特别是转角法,最后还是google出来的),而且有些方法叫不同的名字,有点难搞啊,花了我一天多的时间。。TAT话不多说,下面分享一下。有些方法我会介绍清楚但不会画图详解,希望大家自己画图

2017-09-15 18:23:21 42618 17

原创 hdu2948 简单计算几何 判断点在三角形 矩形 圆形内

题意本质就是如标题说的计算几何。 两个人玩飞镖游戏,给出了一些形状的靶,每场比赛每个人投掷3次飞镖(Bob先手,Hannah后手),一个飞镖的得分为其在多少个靶上,最后输出获胜人的名字,平局输出Tied。 先给出一个数s代表靶的个数,之后s行代表靶。C代表圆形靶,给出圆心坐标和半径长度;R代表矩形靶,给出对角顶点的坐标x1 < x2 and y1 < y2;T代表三角形靶,给出三个点的坐标。

2017-09-12 21:07:06 1287

原创 hdu6201 思维+最长路(SPFA或Dijkstra)

题意给你一棵树,树上有点权和边权,让你选择起点S到终点T使得T-S-sum最大。(sum是S到T的距离)输出这个最大值。题解这是2017ACM-ICPC沈阳的网络赛的1008题,这里不得不吐槽一下这个网络赛的体验真的很差,好多题的数据都很弱,各种暴力都能过。。。还有个题最差交2102^{10}必过,直接导致暴力交题,最后OJ都爆了。。。相信很多做过网络赛的都心有余悸。。。这题比赛的时候没做出来,其实

2017-09-12 18:31:03 1132

原创 hdu6197 最长上升子序列(LIS)长度

题意给你t组样例,每组样例给出n(<=1e5),k(<=n),再给你n个数组成的序列。问你能不能通过减去该序列中x(<=k)个数,使该序列变成一个非递增或非递减序列。可以输出A is a magic array.,不行就输出A is not a magic array.。题解这题可以转化成最长上升子序列的题。我们正着做一遍最长非递减序列(基本就是比最长上升子序列多个=)得出其长度len,如果len+

2017-09-11 21:12:17 679

原创 最长上升子序列(LIS)长度 O(nlogn)算法 hdu1950为例

最长上升子序列最长上升子序列(Longest Increasing Subsequence,LIS),是指一个序列中最长的单调递增的子序列。 该问题有一个n2n^2的动态规划解法,这里介绍O(nlogn)O(nlog_n)的解法。设a[]是原序列,d[i]表示长度为i的上升子序列的最末元素,若有多个长度为i的上升子序列,则记录最小的那个最末元素。那么d[]肯定是单调递增的(后面会用到这个性质)。

2017-09-11 20:59:18 712

原创 线性递推式模板 hdu6198为例

今天打2017沈阳网络赛的时候,第五题好像是个找规律的题(因为我好像找出规律了,但是没写),队友直接一个模版,把我推出的前几项放进去后直接就可以把后面的弄出来。。。太强了写这篇博客保存一下这个强无敌的模板,可以解决任何线性递推式.。这个板子是我一个学长从百度之星复赛上扒的杜教的板子。所以我们现在要做的是用推出递推式的前几项.,然后扔进这个板子就可以了。mod换成题目的就OK,前几项丢的越多越好, 一

2017-09-10 23:31:21 2287

原创 输入挂 fread

对这个也不是很了解,记录一下。namespace IO { const int MT = 20 * 1024 * 1024; char IO_BUF[MT]; int IO_PTR, IO_SZ; /// 要记得把这一行添加到main函数第一行!!! void begin() { IO_PTR = 0; IO_SZ = frea

2017-09-09 21:40:29 478

原创 详谈LCA 在线(RMQ-ST) 和 离线(Tarjan)hdu2586为例

LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。参考博客: http://www.cnblogs.com/scau20110726/archive/2013/05/26/3100812.html离线LCA的离线算法一般是基于搜索的Tarjan算法。思想: Tarjan是一个离线算法,先把所有的询问保存下来,然后开始Tar

2017-09-09 11:00:12 533

原创 RMQ-ST 详细讲解 poj3264为例

首先介绍一下什么是RMQ。RMQ (Range Minimum/Maximum Query)问题是指求区间最值的问题,这个问题用线段树同样可以解决。线段树解决方法STST算法是解决RMQ问题较优的算法,它是基于动态规划和位运算实现的。它可以通过O(nlognnlogn)的预处理对每次查询在O(1)时间得出答案,是一个很快速的算法。我们设dp[i][j]是区间[i,i+2j2^j-1]的最值,对于该区

2017-09-09 09:11:19 344

原创 玲珑杯Round#20-E 1157 造物主的戒律 动态主席树算法

当初主要就是为了这里学的主席树。 之前博客已经讲了主席树,这里也相当于模板题,看了前面的讲解应该可以直接AC了。静态主席树讲解动态主席树讲解学动态之前先学静态!!!题目链接:http://www.ifrog.cc/acm/problem/1157题意中文题目就不说了,自己看。题解这题唯一的变化就是加了一个<=x和>x的限制条件。 其实转换一下也是比较简单的,比如我们求l,r,x,k1,k2。

2017-09-08 21:03:36 458

转载 划分树 图文讲解让你一次就懂 hdu2665为例

学主席树的时候看到一篇博客说是因为一个大牛当时不会划分树而想出的另一种解决区间第k小的问题,所以在学了主席树之后我就学了下划分树。 划分树解决静态区间第k小问题比主席树的时空消耗都要少,不过好像不能解决动态区间第k小问题。转载自:http://www.cnblogs.com/hchlqlz-oj-mrj/p/5744308.html这篇博客写的非常好,所以我直接转载了。划分树划分树,类似线段树,主

2017-09-07 23:02:16 730

原创 主席树 (动态)图文讲解让你一次就懂 zoj2112为例

主席树(动态)学动态主席树之前一定要先会静态主席树。 静态主席树:http://blog.csdn.net/williamsun0122/article/details/77871278参考博客:http://www.cnblogs.com/Empress/p/4659824.html 这个博客讲的是对的,不过它的图和代码好像是错的,虽然能过,但应该是数据不够强,具体怎么错的它的博客下面评论有。

2017-09-07 19:42:45 7889 4

原创 主席树(静态) 图文讲解让你一次就懂 hdu2665为例

主席树学了几天才算初步了解了,我先讲一下无修改即静态的主席树,之后在讲带修改即动态的主席树。主席树比较抽象,感觉很难没有图只靠文字理解。 接下来进入正题参考博客:http://www.cnblogs.com/zyf0163/p/4749042.html主席树先介绍一下主席树,主席树也称函数式线段树也称可持久化线段树。(其实就是支持查询历史版本,这个在看完之后就会了解)其实主席树就是很多线段树组合的

2017-09-07 18:15:16 7901 1

原创 hdu6181 第k短路 Dijkstra(优先队列优化)+A* 2017多校1011

题意就是要你求第二短路,可以说是一个裸题。题解这题可以说类似poj2499。解题思路和它是一样的,不过这题的无向图,而且不回包含起点就是终点的情况。 poj2499对于A*算法,都知道f(n)=g(n)+h(n),这里h(n)为启发式函数。我们令这里的g(n)为从源点s到n所经过的路径,h(n)为把所有边反向后从终点t到n的最短路径dist[n]。即估值=源点到当前点的距离+当前点到终点的最短距离

2017-08-25 21:09:09 1646

原创 hdu6169 数论 思维DP 2017多校第九场1009

题意给定区间[L,R]和一个整数K,问区间内所有满足其最小因子(1除外)为K的数的和。L,R,K的范围是(<=1e11) 结果mod1e9+7题解首先,根据唯一分解定理,我们知道一个数一定能分解成若干个素数的幂的乘积。那么我们现在考虑一个数的最小因子为k,这个数应该满足什么条件?显然,首先k必须是素数,否则不可能有数的最小因子是k。其次这个数必须由k及比k大的素数的幂的乘积组成。 我们想到上面之

2017-08-23 19:01:01 671

原创 hdu6143 排列组合

题意 一个人的名字有名和姓,名和姓上各有n个字符位置,每个位置的字符从m个字符里面选择。问你有多少个人的名字其名和姓上没有相同的字符。题解 比赛的时候排列组合了半天,差点没写出来。官方题解是用容斥写的,有兴趣的可以看看别人容斥的博客。 当时比赛的时候我正着写和反着写都没写出来,最后正着里面套反写出来了。ans=C1m∗1n∗(m−1)n+C2m∗(2n−C12∗1)∗(m−2)n+...ans

2017-08-17 20:14:35 1537

原创 hdu6119 尺取 双指针

中文题就不说题意了。题解 题目已经说了区间会存在交叉,所以我们先把区间排序后把交叉的区间合并起来。然后用一个数组存放相邻两个区间的差距,之后双指针尺取即可。最后算一下如果只有一个区间时的天数。 代码还是很好懂的#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;

2017-08-14 18:42:13 596

原创 hdu6102 容斥+树状数组 2017多校第六场1007

题意 给你n个数,这n个数是1-n的一个排列。再有m次询问,每次询问一个区间[l,r]的价值。区间价值定义为sumri=lsumrj=i+1sumrk=j+1gcd(sz[i],sz[j]==sz[k])∗sz[k]sum_{i=l}^r sum_{j=i+1}^r sum_{k=j+1}^r gcd(sz[i],sz[j]==sz[k])*sz[k]。题解 这道题关键就是怎么快速求一个区间中有

2017-08-14 15:56:52 581

原创 hdu4135 容斥

题意 题目还是比较好懂的,就是给你一个区间[l,r]和一个数n,问你这个区间中有多少个数和n互质。题解 容斥的思想还是很好懂的,就是把求集合的并转换成求集合的交。但是用代码表示出来还是有难度的。 这一题给的区间范围还是很大的,我们直接求有多少个数与n互质不是很好求,可以先用补集的思想求有多少个数与n不互质。一个数与n不互质等价于其和n有一个不为1的公因子。此时问题就是求区间[l,r]中有多少个

2017-08-14 14:30:13 475

原创 hdu6103 尺取 双指针 2017多校第六场1008

题意 定义两个字符串的dis为两者字典序之差,一个字符串从前往后,另一个从后往前。现在给出一个m和一个字符串,要求求出最长的给定字符串的两个子串满足它们之间的dis小于等于m的长度。题解 dis计算类似回文串,我们可以枚举对称中点,然后用尺取的思想用双指针实现。枚举对称中点时要注意有奇偶两种情况。 具体可以看代码注释#include <bits/stdc++.h>using namespac

2017-08-11 19:57:58 484

原创 poj2449 第k短路 (单源最短路径+A*)

题目链接:http://poj.org/problem?id=2449题意 题目的意思很明确,就是让你求s到t的第k短路。不过有一个trick点就是必须要经过路径,也就是说如果s=t的话,在算第k短路时不能算s到t为0这条路。题解 基本就是裸的第k短路,而第k短路是单源最短路和A*算法的组合。对于A*算法,都知道f(n)=g(n)+h(n),这里h(n)为启发式函数。我们令这里的g(n)为从源点

2017-08-06 20:39:47 966 1

原创 hdu6069 区间筛 2017多校第四场1003

题意 设d(n)为n的因子的个数,让你求sumri=ld(ik)%998244353sum_{i=l}^r d(i^k) \% 998244353题解 这题主要用到了一些定理和欧拉筛法。 首先我们应该思考对于d(n)怎么能简单计算出来。 这里有一个定理,由唯一分解定理知n=pk11∗pk22∗...n=p_1^{k_1}*p_2^{k_2}*...,其中pip_i为素数,而d(n)=(k1+

2017-08-06 20:15:01 405

原创 hdu6070 二分+线段树 2017多校第四场1004

题意 题目转换后的意思其实就是给你n个数,让你求一个区间[l,r]使该区间内不同数的个数/区间长度最小并输出该值,精度范围是1e-4。题解 网上看了一些博客,都说是分数规划,我还没学,所以不知道。不过按网上来说:对于区间最优比率问题(分数规划问题),常规的解法是二分答案来求。我觉得这题最主要的其实就是怎么想到用二分,这个很关键。 二分为mid时,如果一个区间满足size(l,r)/(r-l+1

2017-08-05 19:15:59 675

原创 hdu6060 一次就懂 dfs+思维 多校第三场1005

题意 给出一颗n个节点的树,要求将2-n号节点分成k个集合,然后对于每个集合加上1号节点算一个联通的最小花费(最小斯坦纳树),定义为每一部分的value,问总的value最大可能是多少。题解 因为给出的n个节点本身满足是一个树,所以对于每个集合求的最小斯坦纳树其实就是最小生成树就是在给出树中联通集合所有节点加上1号节点的所有边权和。 因为每个集合都包含1这个点,因此对于每个点都至少有一条到1的

2017-08-02 20:23:20 471

原创 hdu6058 链表+思维 2017多校第三场1003

题意 给出一个n和一个k,求1~n的每个区间的第k大的数的总和是多少,区间长度小于k的话,贡献为0。题解 因为给出的n个数是1-n的全排列,所以我们从小开始枚举第k大的值,即枚举第k大的值从1到n-k+1。剩下的值不可能有k-1个数比它大所以不可能是第k大数,贡献为0,所以不用枚举。对于每个枚举的值,从该值的位置向前找k个比它大的数的位置,向后找k个比它大的数的位置。然后就可以计算所有第k大数为

2017-08-02 14:54:57 387

原创 快速乘法-hdu6063-2017多校第三场1008

题意 题意很好懂,就是那个μ(i)\mu(i) 是莫比乌斯函数,其它都好懂,就是求个和。 如果还不了解莫比乌斯,参考这: http://blog.csdn.net/williamsun0122/article/details/72510788题解 这一题看起来很复杂,不好写。我之前虽然学过莫比乌斯反演,但是看到这题还是不会写。之后过的人很多,我估计就有一些规律在里面。所以我暴力跑了一下n^k

2017-08-01 18:43:52 538

原创 线段树-单点更新-hihoCoder1077

线段树线段树是一种二叉搜索树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,它基本能保持每个操作的时间复杂度为O(lgN)。假定根结点是长度为2^h的区间,第i层有2^i个结点(层数从0开始),每个结点对应一个长度为2^(h-i)的区间。最大层编号为h,所以结点总数为1+2+4+……+2^h=2^(h+1)-1;所以一般线段树开

2017-07-31 19:06:29 414

原创 差分约束-Vijos-p1094

还没有对差分约束有了解的同学我推荐一篇大牛的博客,它的博客都讲的比较好。博客链接:夜深人静写算法-差分约束上面的大神讲的很详细,相信认真看了就会懂。 我说说我对差分约束的理解。我感觉差分约束就是将问题转换成一些不等式组,然后通过这些不等式组建边,最后就转换成求最短路、最长路、最大值、最小值等问题。(个人理解) 现在我以Vijos的p1094为例(感觉是一道不错的模版题)题目链接:https://

2017-07-25 20:16:28 404

原创 优先队列优化Dijkstra-hdu2066

DijkstraDijkstra算法适用于边权为正的情况,用于计算正权图上的单源最短路(Single-Source Shortest Paths,SSSP),即从单个源点出发,到所有结点的最短路。该算法同时适用于有向图和无向图。时间复杂度为O(n^2),n是节点数。算法思想: 首先初始化dist为INF=0x3f3f3f3f,dist[源点]=0,然后循环n次,在所有未标号的结点中,选出dist值

2017-07-24 13:29:57 762

原创 SPFA-hdu4076

SPFASPFA(Shortest Path Faster Algorithm)算法,是西南交通大学段凡丁于 1994 年发表的,其在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。SPFA和Bellman-ford一般都是用来处理带负权的最短路问题(Dijkstra不能处理带负权回路的最短路),而SPFA是在Bellman-ford的基础上优化的

2017-07-23 19:23:15 440

原创 Trie图-hihoCoder1036

Trie图Trie图相当于在AC自动机上优化了一下(感觉像是AC自动机的进阶版本),使匹配的速度更快。在学Trie图之前一定要先学会AC自动机: http://blog.csdn.net/williamsun0122/article/details/75576970Trie图是跟着fail指针一起构建的,同样,我们看图理解。(以字符集为{0,1}为例) 首先,我们必须明确Trie图就是把AC自动

2017-07-21 20:15:18 541

原创 AC自动机-hdu2222

这篇博客我以hdu2222这道模版题为例详细的讲解一下AC自动机。AC自动机简介 AC自动机(Aho-Corasick automation),该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。 一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。 要学AC自动机最好先有KMP和字典树Trie的基础,AC自动机实际上就像是在Trie

2017-07-20 19:53:52 479

原创 KMP-hdu1711

KMPKMP算法又称“看毛片”算法,是一种效率非常高的字符串匹配算法。kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法是遍历a的每一个位置,然后从该位置开始和b进行匹配,但是这种方法的复杂度是O(nm)。kmp算法通过一个O(m)的预处理,使匹配的复杂度降为O(n+m)。思想:我们首先用一个图来描述kmp算法的思想。在字符串O中

2017-07-20 19:41:35 2678

原创 java FTP 文件传输

这学期我综合实训有个课题是关于java-FTP的,所以写了这份java文件传输的代码。传上来给大家分享一下。资源链接: http://download.csdn.net/detail/williamsun0122/9898085上面这份代码是我用Eclipse写的,它包含一下功能: 首先它默认以本机的D盘为FTP服务器。需要登录,登陆后可以上传下载,实现断点续传(包含进度条),显示文件列表。以上

2017-07-19 20:56:17 398

原创 java聊天程序 基于socket 包含MySQL

这学期我们java实验的内容是用java语言写一个聊天程序,我把资源上传给大家分享一下。资源链接(不要积分,我是用IDEA写的,Eclipse自己转换一下): http://download.csdn.net/detail/williamsun0122/9898081我写的这个聊天程序是根据网上的一份代码加入用数据库MySQL链接实现登录的功能后再优化得来。本来还想实现文件传输功能,可惜没来得及。

2017-07-19 20:40:31 1592

原创 hdu1159 最长公共子序列 LCS

这题就是LCS的模板题,看了我写的LCS博客: http://blog.csdn.net/williamsun0122/article/details/72934196 应该直接就能AC。没什么说的,就是裸的LCS,直接贴代码:#include <bits/stdc++.h>using namespace std;const int maxn = 1e3+5;char str1[maxn],

2017-06-08 19:42:39 384

原创 最长公共子序列-LCS

子序列在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。比如:ABCDEFGHI的一个子序列是ADFGI。最长公共子序列理解了子序列就能简单的理解最长公共子序列。就是对于两个序列,有一个序列三满足既是序列1的子序列也是序列2的子序列而且是满足这个条件的子序列中最长的一个,它就是序列1,2的最长公共子序列。 比如:BDCABA和ABCBDA

2017-06-08 19:37:14 844

原创 Android常用控件总结

设置控件的属性有两种方法,一种是在布局文件中设置参数,另一种是在代码中调用对应方法实现,以下描述的都只是在布局文件中设置参数的方法。介绍这些控件之前先介绍下所有控件都有的4个属性id、layout_width以及layout_height,以及android:visibility。android:id = "@+id/xxx" @+id/xxx表示新增控件命名为xxxandroid:layout

2017-05-30 20:16:39 487

原创 Android常用布局管理器总结

Android中的所有UI组件都继承自android.view.View类,所有的UI组件都位于android.view包 和 android.widget包中。主要分为两大部分,View(视图:普通控件)和ViewGroup(容器:布局管理器)。LinearLayout 线性布局管理器线性布局内的控件不换行或换列,组件依次排列,超出容器的控件则不会被显示。 主要属性说明:android:ori

2017-05-30 19:19:23 1481

原创 QT常用布局管理器总结

QT主要布局管理器分类QHBoxLayout(水平布局)把子窗口从左到右排列在一个水平行上。 样例代码:QWidget *window = new QWidget;QPushButton *button1 = new QPushButton("One");QPushButton *button2 = new QPushButton("Two");QPushButton *button3 =

2017-05-30 18:23:06 1115

vs_professional__1106940743.1565103730.exe

Visual Studio 2019的专业版,是下载器,下载之后可以直接下载专业版安装了。

2019-08-07

OpenCV4.1.1.exe

OpenCV官方包,截止2019.8月最新版,版本为4.1.1。下载后可直接安装。

2019-08-07

java FTP 文件传输

java基于FTP实现的文件传输。服务端和客户端都有界面,实现断点续传,有进度条。详细见我博客。

2017-07-13

java聊天程序

java基于TCP/IP,socket的聊天程序。服务端和客户端都有界面,客户端用MySQL数据库实现登录。详细可看我博客。

2017-07-13

commons-net-3.6-bin.tar

java的commons-net的包,很全。

2017-07-12

莫比乌斯反演

比较详细的讲解了莫比乌斯反演(有例题)

2017-05-18

codeblocks主题

含有全16种codeblocks的主题,详情及如何导入见我的博客

2017-05-08

mysql-connector-java-5.1.41-bin.jar

mysql-connector-java-5.1.41-bin.jar 用于javaIDBC连接mysql的包

2017-05-01

斐波那契数列及其性质

介绍了斐波那契数列及其有关性质

2017-04-28

Switcheroo Redirector chrome 网页重定向插件

chrome用于网页重定向的插件,360极速浏览器我试的时候不行,还是推荐下的试试。

2017-04-20

org.jdesktop.swingx

java org.jdesktop.swingx包

2017-04-07

空空如也

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

TA关注的人

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