![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
方法学习
文章平均质量分 58
jason_star
我要变强!
展开
-
【HDU 1081】To The Max(求子矩阵元素和)
题目应该很容易看懂,是为了求一个矩阵之内最大的一个子矩阵的和。子矩阵的和表示的是该矩阵内所有元素的和。方法引入:首先当然十分容易的可以想到一维求子段的和。假设数组为a[110];int sum = 0, MAX = 0,n;for (int i = 0; i < n; i++){ if (sum < 0) sum = 0; sum += a[i]; if (sum原创 2014-12-06 23:55:42 · 1381 阅读 · 0 评论 -
【ZOJ】3841 Card (搜索+组合数学(重复元素的全排列)
题目大意:一副牌除掉大小王,然后有一些已经形成了序列,让你算剩下的牌能组合出多少种比给的序列小的组合。思路:搜索,分这个位置相同或者小于,假如放一个小于的,则剩下的就是全排列只不过这边的全排列是相同元素的全排列。所采取的是位置的选择的排列方式。比如1112233这个所有的情况就是c(7,3)*c(4,2)*c(2,2)题目wa了很多发。题目需要注意,是严格小于,等于是不行的原创 2015-03-22 23:27:18 · 670 阅读 · 0 评论 -
【HDU】5175 Misaki's Kiss again(反异或|搜索匹配因子做法)
思路:求出n的所有因数 然后设m=n^p[i],p[i]是n的因子,就会得到原来的数,反异或即可。 AC代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long p[10000];long long mid[1原创 2015-02-14 21:36:58 · 602 阅读 · 0 评论 -
【FZU】2185 树的路径覆盖(搜索)
题目思路:先说一下题目的意思吧,我一开始还真是看不懂,路径到底指的是什么。后来才慢慢懂了,原来他的路径指的是有几条线(可以是折线,但这一条折线不能通过重复的地方)可以把所有的边走遍。对于可以覆盖的情况,这边只需要统计出有多少个叶子,由于一棵树,你从一个点出发,你可以到达任意的一个点。所以这个答案就是(叶子数cnt+1)/2对于不可以覆盖的情况看代码注释了。#define _原创 2015-03-23 22:46:17 · 865 阅读 · 3 评论 -
【POJ】2482 矩形相交面积的变形体(重要)
题目大意:有若干个星星,给了坐标,和星星的亮度,然后给你一个大小固定的长方形,要你求出将这个长方形放咋哪个位置,长方形内星星的总亮度最大。#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeusing namespace std;#define MAX 20005#define ls rt<<1#defi原创 2015-03-18 00:06:30 · 486 阅读 · 0 评论 -
HDU 3473 Minimum Sum (划分树)
思路:这道题目可以说,只有你真正理解了划分树之后,你才会想到如何去做.首先这道题的数学思路是很容易想的.要使得数学式子的和最大,很明显.这个x是这个区间按从小到大排列之后最中间的数.所以最后的答案应该是中位数右边的和减去左边的和然后假如这个区间的数的个数为偶数个的话,还需减去一个中位数.所以这道题除了要记录划分树之外,还用sum[20][MAX]来记录前缀和.写划分树实在是要细原创 2015-03-31 21:22:15 · 381 阅读 · 0 评论 -
【CoderForce】#296 Div 2 D
题目大意:一开始看了半天看不懂,也不知道怎么做,就去看了status的代码。然后就懂了,题目是给你若干个点,每个点有一个w,然后|xi-xj|>=wi+wj的可以连一条线,题目最后求的就是最长的那条线最多有多少个点。思路:(xi,wi)它的辐射范围为(xi-wi,xi+wi)假如两个点的辐射范围相交的话,说明|xi-xj|#define _CRT_SECURE_NO_WARNINGS原创 2015-03-18 20:40:07 · 461 阅读 · 0 评论 -
【Best Coder】#36 C tree
好吧,我承认是抄别人的代码的。但感觉这道题目确实得好好学习学习。#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeusing namespace std;#define MAX 50005struct node{ int v; int id;}h[MAX],q[MAX];int co[MAX];原创 2015-04-04 23:08:25 · 822 阅读 · 0 评论 -
【HDU】 3416 Marriage Match IV(最大流+SPFA)
题目大意:让你找出有多少条没有交集的最短路。思路:先用spfa找出可行的边,然后给每条可行的边加上容量1.即表示这条边只能走一次。接下来跑一遍ISAP就可以得出答案。关于判断边可行的方法如下。先从头跑一遍spfa,得到起点到其他所有点的最短路径dis1再从尾跑一遍spfa,得到终点到其他所有点的最短路径dis2对于边u-v w假如dis1[u]+dis2[v]+w==d原创 2015-04-06 13:01:20 · 791 阅读 · 0 评论 -
A^X mod P (2013山东省赛)(用拆分思想求解重复问题)
思路:其实这道题目最终的一个思想跟我之前做过的一道二进制拆分思想是一样的。那道题目那时候是因为求解是次数很大上亿,而我最多可以的到的是百万级别的,因为数组只能开到百万那时候我很强烈的思想就是那我就每次求解一百万嘛。这边的时间接近o(1)然后重复最多也就1000次,这样时间还是很短。所以那时候就果断那样做了。这次这道题目和那道题目有相似之处。由于其中都是求解A的幂之和,每次幂原创 2015-04-07 19:45:33 · 683 阅读 · 0 评论 -
Code Forces 298 D Handshakes (思维要清楚)
题目大意:每个人需要握ai次手,有三个人话,这三个人可以选择去比赛,不和别人握手.问你入场顺序思路:对于编号来说,只要他需要握手的次数是一样的,那么无论放在哪里都是可以的.所以最终形成的序列他们需要握手的次数一定是0-k 0-x这样子的#include#include#include#include#includeusing namespace std;int a[2200原创 2015-04-14 20:25:27 · 498 阅读 · 0 评论 -
ACdream 暴力专场F
跟校赛的那道质数搜索类似.求一个数可以由多少k个数相加组成.从大到小搜索一遍就可以了.并且正好符合他的条件,学习了.#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeusing namespace std;int n,k;int ans;void dfs(int id, int sum,int原创 2015-04-29 18:57:32 · 460 阅读 · 0 评论 -
HDU Exploration (DFS判断环,以及重边可算的处理方法)
题目大意:有若干个点,每个点之间有无向边或者有向边,并且只能走一次。问有没有存在一个点能够走出去又走回来的。思路:这道题思路当时一下子就想出来了。从每一个联通块的任何一个点出发去dfs,搜到一个点,将其标记,并继续往下搜,假如这个点已经被标记过了,那么说明之前从这个点出发过,并且现在又可以回到这个点。结束!现在说一下处理边只走一次的方法:我是用奇数表示一个方向,偶数表示这个原创 2015-05-02 18:33:38 · 704 阅读 · 0 评论 -
HDU 5215 Cycle (搜索)
这个题目跟同比赛的Exploration类似,做法也类似。在那道题目只需要判断出是否存在环。而这道题目则判读这个环的边是奇数边还是偶数边。我这边采用的方法是用num表示这个点在搜索到第几条边是被搜到。下次在被搜到的时候,边数减掉上一次搜到时候的边数,就是从这个点出发回到这个点的边数了。然后判断一下奇偶就可以了。假如已经有奇数和偶数,就不用在继续搜了,直接结束,也算是小小的剪枝。#p原创 2015-05-04 15:48:45 · 790 阅读 · 2 评论 -
zoj 3876 May Day Holiday (基姆拉尔森计算公式)
大神博客:http://blog.csdn.net/u013050857/article/details/45287775转载 2015-05-01 18:02:37 · 670 阅读 · 0 评论 -
ACdream 1070 神奇的%系列二(YM)
对数据进行离线处理。这边主要是要能够想到区间的建边问题,学习了,YM大神#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#includeusing namespace std;#define MAX 110000vectorf[MAX];int a[MAX];int num2[MAX];in转载 2015-05-02 01:05:20 · 459 阅读 · 0 评论 -
【Best Coder】#34 B Building Blocks
题目思路:首先按题解的要找出w区间的方法,我是用long long型的need和out,max(need,out)表示的就是这区间所要移动的积木的数量。然后从左往右移动这个区间,可以发现, 当这个区间往下一个区间移动的时候,发生改变的只是头和尾的值。所以这边我们就不需要重新计算了,只需要将尾减去,加上新进来头的值就可以得到新一个w区间的need和out另外是处理新赠堆的情况。由于题原创 2015-03-22 09:53:10 · 571 阅读 · 0 评论 -
【ZOJ】1610 Count the Colors(线段树查找隔断的线段)
题目大意:有一条最长8000的线段,其中会被最多8000种颜色分割,问一整段是全部颜色的算1,这样每种颜色有多少段呢?这道题目一开始的思路线段树存放的自然是每一段的情况,设定-1,假如不是-1的话,就表示该段颜色都是相同的,是-1的话,表示下面颜色可以继续分。只是在查找的时候自己犯难了,想不到怎么去将所有颜色的次数查找出来。看了题解,这边用的想法是这样的,通过线段树的query功能,每原创 2015-03-12 21:41:03 · 468 阅读 · 0 评论 -
【BestCoder】#29 C GTY's gay friends(区间和 随机数判重)
题目大意:可以到相应的场次查看中文翻译。 思路:其实这道题很简单,对于一个等差数列,我们要判断他是否每个数都出现,只需要判断区间和或者是最大值是否符合即可,但这边需要注意的便是中间的重复部分。最大值的判重必要性我就不知道了,而且我也不会做,目测做也超时。 这边就写一下偷别人的区间和 随机数判重的做法 其实这边判重的方法是给一个数加上一个超过1000007的权,然后在计算和的时候,便是唯一的。原创 2015-02-07 21:46:29 · 901 阅读 · 0 评论 -
【Best Coder】#29 B GTY's birthday gift(快速幂|mod的时候记得负!)
题目大意:查看相关场次即可看到。 思路:推公式的题目,可以用快速幂加公式快速解决,也可以用二进制拆分运算的方法加快速度。 需要注意的一点在于:今后在mod之后有涉及到运算的都要加上一个mod之后再mod,或者统一都加一个mod 顺便复习一下二进制拆分的方法!! 二进制拆分的做法AC代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#i原创 2015-02-07 22:55:53 · 936 阅读 · 0 评论 -
【HDU】1394 Minimum Inversion Number(线段树求逆序数)
题目大意:给一个长度为n的序列(n<=5000),由0~n-1的数字组成。每次把最左边的数挪到最右边形成一个新的序列。那么一共可以形成n个序列。求这n个序列里面最小的逆序数是多少。 AC代码:/*线段树求逆序数思路:线段树求逆序数的方法并没有想象的那么神奇,对于求单个a的逆序数的方法则是在a到max当中寻找已经出现过的数,出现的个数便是该数的逆序数只是这边将个数通过线段树优化了,使得求解更为原创 2015-02-11 19:26:22 · 552 阅读 · 0 评论 -
【POJ】1151 Atlantis(线段树+扫描线+离散化)
题目大意:给若干个矩形,每次给的是矩形对角两个点的坐标,求所有矩形并起来的面积。 线段树扫描线典型题:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define MAX 220#defin原创 2015-02-22 17:54:07 · 638 阅读 · 0 评论 -
【POJ】1171 求矩形并的周长(线段树+扫描线+离散化)
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;#define MAX 10010#define ls rt<<1#define rs ls|1#define原创 2015-02-23 20:07:31 · 772 阅读 · 0 评论 -
【poj】2828 Buy Tickets、2182 Lost Cow(线段树-单点更新)
题目大意:人们一个一个的来排队并插队,按人到来的顺序给出每个人插队的位置(插在第几个人后面),并告知每个人的id号,输出最终队伍的情况。 思路:这道题假如你正向去处理的话,会发现,当你确定一个位置的时候,会面临之后还需要将这个位置以及这个位置后面的所有位置下调一个位置,这样在插入上,会有很大的复杂度。 所以遇到这种情况不如从后面开始向前遍历。而且这个时候他所要插入的位置便是他最终的位置,假如这个原创 2015-02-11 15:26:48 · 589 阅读 · 0 评论 -
【POJ】3279 Fliptile(十字变换搜索+二进制枚举)
/*题目大意:有一个最大是15*15的方格,只有黑(1)白(0)构成,当你反转一个的时候,将黑变成白,白变成黑他的四个方向也会跟着反转,现在就是问你怎么反转使得最后的翻转次数最少,假如反转次数相同的话字典序最小。看到这题目瞬间就犯难了,老实说,没有做过。实在不敢花时间深究,那就只能好好学了。好了, 现在解决两个问题:1、怎么搜索,能够保证搜索完的结果是正确的。这种题目我们不应该从点出发,原创 2015-02-12 14:25:22 · 937 阅读 · 0 评论 -
【POJ】1426 Find The Multiple(暴力|同余模定理|BFS)
暴力可以解决,题目要求的数据没有超出long long#include<iostream>using namespace std;long long ans;long long n;bool dfs(long long k){ if (k%n == 0) { ans = k; return true; } if (k >= 1转载 2015-02-12 15:24:15 · 712 阅读 · 0 评论 -
【POJ】3468 (线段树,区间成段按需更新)
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAX 100100#define ls rt<<1#define rs ls|1#define m (r+l)>>1long long sum[MAX << 2]原创 2015-02-14 16:49:23 · 442 阅读 · 0 评论 -
【Code Forces】518A Vitaly and Strings(思维题)
题目大意:第一个字符串小于第二个字符串。现在要找到一个字符串大于第一个字符串,小于第二个字符串。思路:其实这边不需要遍历,将两个字符串看成数来处理就可以了。这样的话就等价成两个数当中是否相邻的问题。所以只需要对第一个字符串最后一个字符加1,这样就能够保证大于第一个字符串,而且是离第一个字符串最近的那一个。加1之后可能要进行进位处理。然后与第二个字符串比较一下就可以了。#de原创 2015-03-25 12:32:00 · 551 阅读 · 0 评论 -
【Poj】2464 (线段树)
题目:平面上有若干个点,stan过其中某个点划一条垂直x轴的线(可同时过多个点),ollie过stan画的线中的某个点,画一条垂直与y轴的线,这时候将平面分为4个区域,stan的得分为第一象限和第三象限的个数,olle反之。现在题目的要求来了,有点绕:题目要求在stan画下的一条直线之后,ollie可以获得的最高分,stan获得一个分数x,最后x最大的时候,将ollie的分数输出。思路就不原创 2015-03-19 22:48:43 · 503 阅读 · 0 评论 -
【技巧】---质因子分解法
这个方法可以将一个数分成自2开始相乘的若干质数相乘。int num[1100];int n;int counts=0;for(int i=2;i*i<=n;i++)if(n%i==0)while(n%i==0){num[counts++]=i;n/=i;}if(n>1)num[counts++]=n; hdu 5108 Alexandra and Prime Num原创 2014-11-30 18:25:52 · 3146 阅读 · 0 评论 -
【Best Coder 】 32 B Negative and Positive (NP)
思路:题目是根据所给的规则,判断是否在一个区间i-j的结果等于k。其实要求i-j区间的值我们可以采用1-j的值减去1-i的值即可得到i-j的值。sum[j]-sum[i]=ksum[j]-k=sum[i]问题就可以转化成判断sum[i]是否存在,而sum[i]假如存在的话,一定在求解sum[j]之前求解过了所以我们不妨将求解过的sum[l]全部假如hash表当中,只要对sum[原创 2015-03-09 10:32:39 · 404 阅读 · 0 评论 -
Lucky Sequence(hash应用)
题目链接:http://www.homeforaoge.com/problem.php?cid=1002&pid=1题目思路:这道题与之前做的BC的一道题目类似。只不过那道题目是判断是否存在,而这道题目需要计算有多少个。相同的。sum[j]表示0~j的前缀和。假设存在一个i满足条件,即i~j区间的和为k的倍数。所以应该有(sum[j]-sum[i])%k=0;我们不原创 2015-03-21 22:13:15 · 629 阅读 · 0 评论 -
简写的最大公约数写法(不能再忘了)
long long gcd(long long x, long long y){ return y ? gcd(y, x%y) : x;}y代表的是余数,如果余数不为0,那么就继续操作,将第一个数用第二个数代替,第二个数用余数代替,简化的辗转相除法罢了~~原创 2015-03-11 23:37:50 · 1103 阅读 · 0 评论 -
CodeForces 538B Quasi Binary(不错的贪心题 进制想法)
题目思路:你现在有一些数叫quasibinary ,这些数仅由0 和1构成,如10,.101,0,1现在给你k,你要用最少的quasibinary 数,加起来等于k,先输出个数,然后输出这些数是哪些.一开始的思路比较挫,而且严重错误.这边说一下正确的思维方法:由于我们有的数仅仅是0和1,所以这边假设4135,则至少要加5次.而且也只需要5次,因为个位无论我们取什么,他每次都是1原创 2015-05-05 19:41:36 · 1354 阅读 · 0 评论