说说:这道题初看完全不知道如何下手,但最终也不过就是个二分查找而已,其实不用二分也行,从1开始遍历从显示的结果来看花费的时间是一样的。首先,讨论N是正数的情况。很明显这是个等差数列求和的问题,当总和任然小于N的时候,那么显然此时的n还不够大。当然若直接等于N了,那输出答案就好了。如果最后总和大于N了,但两者之差为奇数,这显然是不行的,因为把序列中任何一个数变为其相反数,那总和都相当于减去一个偶数。所以此时n需要进一步变大,直到两者的差为偶数。最后将序列中的某些正号变为负号,不过具体的我们不用管,问题就解决啦...
分类:
其他好文 时间:
2014-08-07 15:48:20
阅读次数:
232
不得不说这个题就是炫酷啊!
首先说一说思路吧,是这么想的:
1.弄四重循环,爆破,明显会超时。
2.为了处理多重循环,就枚举a+b+c,只需要在d中找到a+b+c的相反数即可,超时
3.枚举a+b,只需要在c+d中找到a+b的相反数即可,TMD超时!
4.循环只能优化到这个程度了,再优化就得用哈希表直接调用了。
这个题的哈希表也是新的知识,由于本题a+b的值可能很大很大,所以以...
分类:
其他好文 时间:
2014-08-06 14:48:21
阅读次数:
241
【题意描述】对于给定的四个序列,从每个序列中选出一个数,并让四个数相加,输出所有相加和为0的情况数目。【解题思路】我们可以考虑前两列的数字相加之和一定与后两列相加和互为相反数,那么我们可以枚举出前两列数字之和,并且,枚举出后两列数据之和的相反数,并对之排序,然后利用二分法进行查找即可。【AC代码】#...
分类:
其他好文 时间:
2014-08-05 18:42:39
阅读次数:
190
题目地址:HDU 4908
这个题是从m开始,分别往前DP和往后DP,如果比m大,就比前面+1,反之-1.这样的话,为0的点就可以与m这个数匹配成一个子串,然后左边和右边的相反数的也可以互相匹配成一个子串,然后互相的乘积最后再加上就行了。因为加入最终两边的互相匹配了,那就说明左右两边一定是偶数个,加上m就一定是奇数个,这奇数个的问题就不用担心了。
代码如下:
#include
#inclu...
分类:
其他好文 时间:
2014-08-03 23:17:46
阅读次数:
240
题目地址:HDU 2686 HDU 3376
这两道题目除了数据大小外是一样的。前者只有30*30,但是后者却成了600*600。。本来以为前者代码用到后者会超时,迟迟没敢交,但是感觉能用费用流的话也只能这么做了,于是改了改数组大小就交上去了。还真没超时。。
这题又是一道关于来回最短路的。最大费用可以把费用改成相反数,最后再转成相反数就是最大费用了。
建图思路是拆点,限制每个点只...
分类:
其他好文 时间:
2014-07-27 11:42:55
阅读次数:
249
uva 269 - Counting
Patterns
题目大意:给出n和k,要求找出满足的序列,要求为n元组,由-k到k组成,并且和为0。求出所有满足的元组个数,并且对于左移,右移,水平翻转,每个元素取相反数相同的视为一种,用字典序最大的表示,输出按照字典序最小的输出。
解题思路:因为表示的时候按照字典序最大的表示,一开始枚举开头的位置,那么在后面的数的绝对值就不会大于该数。最后...
分类:
其他好文 时间:
2014-07-22 00:16:37
阅读次数:
246
在最大概率法分词的程序中,由于每个词出现的次数分布非常不均匀,而且我们要计算每个词出现的概率,对于出现次数比较少的词概率就很小,求句子中词的概率之积的时候,需要将好多非常小的数作乘法,可能会将超出计算机所能表示的数的最小范围。为了便于计算,常常要将每个词的概率求对数后在进行计算,但是由于对概率求对数后变为负值,因此要求对应的相反数。所以一个词出现的次数越多,最后求得对应的值越小,我们将这个值称为这...
分类:
其他好文 时间:
2014-07-19 02:46:06
阅读次数:
236
1 /* 2 做网络流的题建图真的是太重要了! 3 本题是将人所在的位置和房子所在的位置建立边的联系,其中man到house这一条边的流量为 1, 费用为两者的距离 4 而方向边的流量为 0, 费用为正向边的相反数(也就是沿着反向边进行增广时,费用要减少,更改先前错误的选...
分类:
其他好文 时间:
2014-06-27 20:08:40
阅读次数:
260
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1002题意:求下面这种造型的生成树的个数。思路:生成树的个数可以用那个矩阵A:A[i][i]等于i的度数,A[i][j]等于i到j的边数的相反数。那么A的任意一个n-1阶的行列式(就是删掉任...
分类:
其他好文 时间:
2014-06-23 06:18:06
阅读次数:
227
首先分成一半2^17和2^18,并且把其中一半变成相反数,然后枚举一半二分查找另一半,在找到的位置前后也找找。
这里用到了二级排序,有很多细节要处理,不多说了。
巨坑的一个地方就是,不能用系统的abs,要自己手写,简直坑死。。
#include
#include
#include
#include
using namespace std;
typedef long long ...
分类:
其他好文 时间:
2014-05-22 12:01:31
阅读次数:
220