- 博客(164)
- 资源 (2)
- 收藏
- 关注
原创 HihoCoder - 1722-最小差值(尺取)
题目链接尺取法尺取法的含义大概就是取一段区间,然后区间长度不变,每次区间左移右移因为只移动一位,所以每次只用更新一个点的信息而这道题的思路就是将所有的数放在一起排序每次取出一个最小的数,然后判断该数所在的行是否已经出现过数,如果没有记录一下,然后更新该数所在行的最大值当每一行都有数时,表示已经每一行都选择了一个数此时求最小值然后再取数的时候,把最小的数弹出,继续向里面加数,直到所有的行都又选了一个...
2018-04-11 21:13:35
347
原创 HihoCoder - 1721-回文字符串2
题目链接思路:从外往内找(从内往外找是不行的)每次判断最外面的两个字符是否相同如果不相同记录一下这两个点,如果没有找到,直接输出最中间的点然后判断究竟是删除左边点还是右边点 符合题意但是题目要求是最小的所以要从都要往前找一找是否有和要删除元素相同的元素(与删除元素的中间不会有其他元素)#include<bits/stdc++.h>using namespace std;const...
2018-04-11 19:07:21
368
原创 POJ-2007-Scrambled Polygon
题目链接这道题就是极角排序判断叉积与0的大小关系#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>using namespace std;const int INF...
2018-04-10 16:30:52
245
原创 POJ-3723-Conscription
最小生成树模板题目#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;const int maxn=50010;int fa[maxn];struct edge{ int x,y,w;}e[ma...
2018-04-09 19:11:10
240
原创 51nod-1686-第K大区间
题目链接这道题是真的好思想很好思路其实也不是很难但是也不容易理解首先,这道题运用了二分因为答案一定是1~n(区间众数最多n个,最少1个)那么从1~n二分mid,二分后判断区间值比mid大的区间有几个如果大于K说明mid取的小了,应该取大一点,反之取小一点,最后找到答案那么如何判断区间值比mid大的区间有几个遍历一下所有数,如果有的数的个数等于mid,那么这个区间的右端点往右移的区间的区间值肯定都比...
2018-04-06 17:49:18
234
原创 HDU-2141-Can you find it?
二分用二分函数很好写#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;const int maxn=250000,inf=0x3f3f3f3f;long long num[maxn];long long ...
2018-04-06 15:07:34
137
原创 HDU---6000-Wash
题目链接这道题代码并不难思想也不难但是真的很难想出来虽然也算是暴力思路:开一个优先队列,按照洗衣或者脱水的时间从小到大排序将所有的洗衣机放在一个优先队列里,脱水机放到一个优先队列里如果这台机器用过,那就把时间再加一次,表示如果下一件衣服如果还要用这台机器洗,需要多长时间,然后再加入队列一直循环,知道衣服都洗完然后对于脱水,就和清洗有点不一样了甩干是从最后一件衣服开始脱水,因为脱水的时间有可能跟洗衣...
2018-04-06 10:12:15
135
原创 51Nod - 1433
题目链接思路很简单如果是9的倍数,那么其各个位上的和也为9的倍数那么,5个9就能凑一个9的倍数而90的倍数只要在后面添一个0就行了#include<math.h>#include<stdio.h>#include<algorithm>int main(){ int n; scanf("%d",&n); int ans=0;...
2018-04-05 09:37:22
185
原创 HDU-1978-How many ways
题目链接注意!机器人走到路径的终点不需要把能量全部消耗完思路:初始化dp【1】【1】为1每输入一个数,把能从这个点走到的点的值全部更新一下#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int dp[205][205];int main(){ i...
2018-04-05 09:32:17
140
原创 UVALive - 7500
题目链接题意很简单思路也不难找不超过n的最大前k项和(k(k+1))/2=n求解该方程或者用二分查找但是求解方程明显更快,思路更清晰用求根公式带入,直接求得但是!!!只要跟开根号扯上关系,数的精度问题都很成问题这时候再附加个判断,校准一下答案#include<stdio.h>#include<string.h>#include<math.h>int mai...
2018-04-05 09:26:45
292
原创 POJ-2785-4 Values whose Sum is 0(二分函数)
题目链接题意:给定n组数,给定4个集合 abcd 每组数中第一个数为a集合,第二个数为b集合.....求从每个集合中取出一个数,有多少种取的方法使其和为0(必须每个集合取一个)思路:简单的暴力一定会超时,时间复杂度为n的4次方正确的思路为ab集合的全部组合情况全部先列出来cd集合的全部组合情况也列出来排个序然后对于ab组合的全部情况在cd组合的情况中用二分查找找出来注意!要找出cd组合中符合...
2018-04-05 09:16:04
500
原创 HDU-5979-Convex
题目链接很简单的一道题知道夹角,知道三角形对应的两边长S=0.5*L*L*sin(α)那么其实是sin函数的用法sin函数的头文件为<math.h>sin()里面加入的是弧度,不是角度比如 sin(30)应该写为 sin((30/180)*π)#include<bits/stdc++.h>using namespace std;#define PI 3.141592...
2018-04-05 08:51:00
160
原创 UVA-CD
题目链接这道题就是01背包+记录路径01背包很好整,但是记录路径需要我们外开一个数组用来记录路径这是第一种方法第二种方法是dp的时候用二维数组如果那么找路径的时候,看没有加入该物品前,dp的最大值有没有改变,如果无改变,那么说明该物品没有被选上方法一:#include<cstdio>#include<cstring>#include<algorithm>u...
2018-04-03 16:41:06
379
原创 HihoCoder - 1701(注意取模和除法的矛盾)
题目链接思路非常简单!先对所有的数取模对于取模后的值相同的数来说,它们的差都为K的倍数然后用排列组合就解决了!!注意,求排列组合时有非常容易犯的错误!那就是如果取余就不要再算除法了!!那样是错误的因为给的数据也不大,所以计算组合数的时候不取余数也对也可以用c[i][j]=c[i-1][j]+c[i-1][j-1]来先预处理出所有的组合数#include<iostream>#inclu...
2018-04-03 16:25:20
163
原创 HihoCoder - 1702 --矩阵迷宫
题目链接这道题猛一看是搜索,但是搜索的话一般会超时这里就用到了DP因为只有向下和向右两个方向这个和树形DP非常的像dpr[i][j][k] 表示到达i j点并拐弯K次且方向朝右的最小代价dpd[1][i][j][k]表示到达i j 点并拐弯K次且方向朝下的最小代价#include<stdio.h> #include<string.h> #define For(a...
2018-03-31 10:47:40
282
原创 HihoCoder - 1691 数字游戏 ---全排列
题目链接这道题其实并不难!简单来说就是暴力!因为最难的部分在1如何交换数既然太难,唯有暴力!全排列全部暴力出来!然后每种情况都计算一下最小步数,求求最小值!!然后!全排列函数!next_permutation(x, x + n)全排列函数讲解自动进行全排列这里的do while不可改为whiledo while是先循环再判断,至少执行一次while是先判断再执行!如果用wile会导致原来的序列不...
2018-03-31 10:40:45
302
原创 CF 754D---- Fedor and coupons
题目链接题意:给定N个区间,选择任意K个区间,求K个区间中的公共最长区间为多少思路:贪心+优先队列如果选,那么选的区间都是 L尽量小,R尽量大这样,区间长度最长当L确定的时候,那么尽量取R最大的将区间的L从小到大进行排列然后维护一个R从小到大的优先队列(队列中只有K个元素,多余的弹出)因为每次拿一个新的区间,L是最大的,即此时L确定,那么尽量的让R最大即将队列里R最小的取出来运用了动态数组存储运用...
2018-03-28 19:44:17
232
原创 HDU--1173
题目链接这道题先考虑一维的为何要区中位数将所有的数分为两堆,左边一堆,右边一堆这时候如果选点,点如果往右移一下那么左边所有的点的距离+1同理向右边也是一样那么这时候取中间的就行,即令左右两边的点的个数都一样其实就是中位数这样拓展到二维就OK了#include<stdio.h>#include<iostream>#include<algorithm>usin...
2018-03-28 17:11:14
256
原创 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F等式(数论)
题目链接这道题是一个数论题,下面慢慢来证明:1/x+1/y=1/n;1/y右移—> 得1/x=y-n/ny令y-n=a 即n=y-a1/x=a/y(y-a) 即 1/x=a/(y*y-y*a)使等式成立即a整除(y*y-y*a)即a整除y*y最后得答案为y*y的因子数然后用约数个数定理快速解决问题注意要x<=y那么有由于y*y必定完全平方数,那么最后结果 为res/2+1...
2018-03-27 16:39:01
184
原创 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--D-psd面试(区间DP)
题目链接这道题是典型的区间DP问题关键的问题就是如何DPdp[i][j]表示从第i到j个字符中,最长的回文子序列是多少而状态转移方程为dp[i][j]=max(dp[i+1][j],dp[i][j-1],dp[i+1][j-1]+ans);ans是比较s[i]和s[j],如果是s[i]==s[j]那么ans=2,反之为0在区间DP中,每次往外扩展的时候总有3种情况1.最外围的两个字符相等,并且这两...
2018-03-26 19:25:46
154
原创 小明系列故事---捉迷藏
题目链接刚开始的思路是直接整,把能看见的大明,二明的地方全部标记出来但是交叉的地方又不好标记而且如何判定既看到大明,又看到二明直到看到了大神代码每走一步,判断一下有没有看见大明或者二明如果看到大明返回1,看见二明返回2,两个都看见返回3,一个没看见返回0用s代表当前看到几个人每次向下搜索,如果该点看到的人数与当前记录的看到的人数不一样,那么,用该点看到的人数+当前记录的看到的人数(这里重点)这样就...
2018-03-26 13:14:02
128
原创 FZU--据说题目很水
题目链接这道题不难,但是不好想思路:把城市分为两个集合,这两个集合只要不集合内部的元素互相连线,那么就不会出现3个城镇互相相连的情况#include<stdio.h>using namespace std;int main(){ int T; scanf("%d",&T); while(T--) { int n; ...
2018-03-26 12:37:27
139
原创 牛客网练习赛13---m皇后
题目链接这道题简单来说就是暴力原本思路是找出各个方向上的最远点记录一下,然后暴力所有的点然后暴力该点有多少个危险方向然后看了大牛博客,学习了新方法将所有点排序比如纵列,先排序,是同一列的排一块,扫一遍该列对于每一个元素,看一下后面有没有元素,如果有,那么该元素的下面方向不安全对于上面的元素,上面的方向不安全,两者的不安全的方向都+1其他方向的同理,总共四条直线只用扫描4次就行#include<...
2018-03-20 19:53:00
167
原创 wannafly挑战赛11----白兔的字符串
题目链接这道题的本质思想也是暴力但是是有技巧的暴力首先用到了hash算法将母串的所有情况列出来,然后存到数组里面对于子串,查询是否有该情况,一般用map,但是map太慢,这里用unordered_setunordered_set用法#include<bits/stdc++.h>#define debug(a) cout << #a << " " <<...
2018-03-15 21:04:25
190
原创 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝
题目链接这道题综合运用了搜索和树状数组原理如下先DFS一下,搜索一整棵树,将树的每一个节点标记上时序(即DFS搜索时候的顺序)记录两个,一个是往下搜的时序,一个是往回回溯的时序,这样这两个标记可以表示这个节点的全部子节点有多少个,有哪些节点(比如标记为 1 3 ,那么子节点就有2 3)建立一个空的树状数组。然后从武当派的第一名开始,将人一个一个的添加到树状数组中每次添加一个人,那么就把这个人的师...
2018-03-13 21:16:25
844
原创 计蒜客--天上的星星
题目链接这道题看似是线段树,但是其实不用线段树就可以做sum表示从(0,0)到(i,j)的所有亮度和,然后求区间的亮度,可以用容斥原理进行计算#include<bits/stdc++.h>using namespace std;int sum[2002][2002];int main(){ int n; scanf("%d",&n); memse...
2018-03-10 16:06:12
235
原创 HDU--2196---Computer(树形DP)
这道题还是比较不容易理解的主要是多用了一个dfs,多饶了一个弯这道题符合树形DP的特征,可以把问题转化为一棵树对于每一个点,计算出以此点为根的子树中的第一长的枝和第二长枝,都存起来这是一个相当重要的预处理当图转为树的时候,对于每一个点其最远点有两种情况(两种情况取最优)1.返回父节点,来寻找最远点2.直接继续向下找,找到最远点对于第二种情况,由于向下找,长度必定为其最长枝的长度,预处理中已经找到,
2018-01-18 19:53:26
283
原创 poj1236 - Network of Schools(连通图--tarjan算法)
这道题就是tarjan的简单应用大牛博客上面是tarjan算法的详解总结一下精华就是寻找循环点 ,利用栈和深搜寻找循环点搜索的过程中如果找到某点,并且点在栈中,那么说明找到一个循环了,那么这个循环就是栈中点前面的所有点比如:栈中元素从底到头为 :5 3 6 4 1 然后深搜的时候又搜到了3,这时候说明 6 4 1 3 是一个连通分量 因为6 4 1 3
2018-01-16 09:40:55
174
原创 网络流模板----最小费用最大流
最小费用最大流的思路非常简单用flow储存流量,cost储存费用每一次跑一次最短路,最短路用来寻找最小费用,然后P数组用来记录路径寻找完最短路后需要在路径中找最小流量,然后修改flow的值//需提前定义flow,cost,p,dis数组void spfa(int s,int t){ queue q; int i,v; bool vis[MAXV];
2018-01-13 17:14:30
280
原创 网络流模板-------最大流模板
网络流模板一.EK算法优点:模板简单,使用方便缺点:时间复杂度较高存图:用邻接矩阵存图算法详解//EK算法模板(s为源点,t为汇点,函数返回值为最大流)//e为邻接矩阵//p储存路径,a用来计算路径int EK(int s,int t) { queue q; int p[MAXN*2],a[MAXN*2]; int f=0;
2018-01-13 16:16:46
1636
1
原创 CF--C-- Party Lemonade(贪心)
题目链接:http://codeforces.com/problemset/problem/913/C这道题的主要思想就是贪心,看着非常像DP以至于我第一次写的时候误认为就是DP,和背包问题差不多如果用背包的角度来看,背包需要开DP数组,这个数组大小是N x M (n是物品数量,m是容量大小)这道题容量大小为1e9 明显开不了这么大的数组,虽然n很小,即使简化为一维数组,大小
2018-01-12 11:37:15
353
转载 POJ--2516 - Minimum Cost(最小费用最大流)
这道题其实不算难,是个经典的基础题目,题目并不是很容易理解有n个商店,m个提供商,k种商品接下来n行,每行有k个数字,表示这个商店需要各个物品的个数。再接下来m行,对于每一个提供商也有k个数字,表示这个提供商拥有各个物品的个数。然后,对于每个物品k,都有n行m列的矩阵。i行j列表示:从j提供商向i商店运送一个k商品的代价是多少。判断所有的仓库能否满足所有客户的需求,如果
2018-01-11 17:56:35
232
原创 POJ- A Plug for UNIX (最大流)
题意:给你n种插座和m种电器,但是发现电器和插座有些不匹配,现给你每个电器需要的插座种类。然后和插座转换器的类型求最少有多少个电器没有插座最大流问题关键问题在于建图题目中给的都是字母,需要转化为相应的数字,然后再建图每中电器都相应的转化为数字,这时候用的就是map的一一对应了然后建图:源点----->插座(转换器用来插座对插座)---->电器---->汇点
2018-01-09 20:20:58
277
原创 POJ-3281Dining(最大流)
最大流比较经典的题目,运用了一定的技巧题意:农场主有几头牛,每头牛都有想吃的和不想吃的,某天农场主忘记按照牛的喜好做饭,但是希望能尽可能的让更多的牛满足每头牛都有可以喝的,和可以吃的,求可以的满足的牛的数量第一次猛一看,二分匹配!!但是仔细想想,二分匹配好像解决不了这个问题。因为二分匹配都是两两匹配,但是这道题中,每头牛要匹配喝的喝吃的,三者之间的匹配,如果强行二分匹配
2018-01-08 17:33:21
342
原创 POJ-ACM Computer Factory(EK算法模板)
题目大意:有n台机器,P种零件,每种零件有 0 和 1 两种状态,接下来有n行,每行第一个表示机器的效率,其余表示每台机器对于P零件的需求 0 表示不需要,1表示需要,2表示无所谓。现在需要找一些生产线可以把全部的零件制造出来(使零件的状态为1,起始状态为0)。求这些的生产线的最大生产量,并记录有几条生产线和每条生产线的路径作为一道比较简单的网络流的题目!这道题的主要问题为:
2018-01-07 20:07:58
186
原创 wannafly 5-子序列
题目链接这道题就是组合数学按照高中数学的排列组合原理就假设现在有串为 abc,找长度为6的串包含abc,使abc为该串的子序列那么就这样想:有6个位置,先让abc先选,这样有C(3,6)种情况那么对于每一种情况来具体分析 例如 a_b_c_正常的思路是,每个空位有26种情况那么该情况就有26*26*26种填法但是 有
2017-12-11 20:16:29
178
原创 nowcoder 小AA的数列
这道题是二进制的改进题目,目的是利用二进制来减少时间复杂多这类题对数学要求比较高!!!首先要明确几个定理1.异或运算(^)是满足交换律和结合律2.a^b^a=b3. a^b=c a=c^b 首先!先看看这个问题是如何与二进制扯上关系的!!目的:求一个区间的异或和可以先把区间的数都看成二进制数(实质上^运算就是按照二进制算的)假如:对于二进制的
2017-11-29 20:42:57
660
原创 NYOJ-304 节能(区间DP)
典型的动规DP题但是又和一般的DP有不同这道题每次只可能有两个选择,那就是向右边走或者向左边走而且,每次走完会有一个位置,这个位置一定是最左边或者最右边开一个数组 DP[ i ][ j ][ x ] (X只取0或者1)表示从i到 j 需要的最少油量 0表示到区间i点停止,1表示到区间j点停止#includeusing namespace std;const in
2017-11-27 19:21:19
240
原创 HDU2389-Rain on your Parade(二分图匹配bfs模板)
每位顾客找伞,属于标准的二分图匹配问题,但是用深搜肯定妥妥的超时存图也不用邻接矩阵了,用邻接表#includeusing namespace std;const int MAXN = 3010;//左边节点数量、右边节点数量const int MAXM = 3010*3010;//边的数量const int INF = 0x7FFFFFFF;struct Ed
2017-11-24 16:27:45
305
原创 HDU-2255奔小康赚大钱(二分图带权匹配)
奔小康赚大钱这道题是标准的二分图权匹配首先必须满足是完美匹配,然后再在此基础上,再填权值,而且要保证权值最大那么尽量让每个人都匹配自己满意度最高的(或者说给的钱最多的)那么首先要开个数组记录一下每个人满意度最高是多少,简称期望值当一个人村民开始匹配的时候,看一下如果匹配到某一房子,正好满足村民的期望值那么说明,该房子是该村民满意度最高
2017-11-22 20:18:31
223
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人