hdu 3388 Coprime 容斥原理 二分查找
Coprime
刚开始不知道用二分,因为没有发现序列单调不下降的性质;
留意二分查找需找到下界。
二分查找起点的右边界取m*n是不够的,实际查找到的结果可能远大于该值。
1 | /** Aug 27, 2015 9:25:32 PM |
较为神奇的是,把以上代码的check()函数(实现容斥原理的计算)替换为以下实现后,效率大有提升。
1 | static long check(long n,int low){ |
刚开始不知道用二分,因为没有发现序列单调不下降的性质;
留意二分查找需找到下界。
二分查找起点的右边界取m*n是不够的,实际查找到的结果可能远大于该值。
1 | /** Aug 27, 2015 9:25:32 PM |
较为神奇的是,把以上代码的check()函数(实现容斥原理的计算)替换为以下实现后,效率大有提升。
1 | static long check(long n,int low){ |
为了高效求出数列的项 $ a_i=\sum\limits^n_{i=1} i^4 $,不使用通项公式是无法实现的。
另外实际分解所得的质因数的种类并不多,无需浪费大量时间、空间筛选大质数。
1 | /** Aug 27, 2015 2:45:37 PM |
另有一个未知的通过矩阵快速幂计算该数列项的方法(求以下矩阵的n次方)。
1 | 1 | 4 | 6 | 4 | 1 |
0 | 1 | 4 | 6 | 4 | 1 |
0 | 0 | 1 | 3 | 3 | 1 |
0 | 0 | 0 | 1 | 2 | 1 |
0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 1 |
1 | void init() |
最后以这种方式取得计算结果(再乘上以下矩阵):
1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
1 | matrix A; |
具有教科书性质的容斥原理应用实例。
能不重复、不遗漏地选出所有合数,也就能得到质数。
1 | /** Aug 26, 2015 9:40:09 PM |
1 | /** Aug 22, 2015 5:23:42 PM |
磕磕绊绊的,到底有几大难?
期初是有过转化为背包问题的尝试,但是忽视了数位DP的处理手段;可先扩大枚举范围,再从中筛选。
预处理的两套循环不能杂糅在一起,因为先通过递推求了第i位、限制F(x)==j的解,然后才相加得到第i位、限制F(x)≤j的解。
筛选时注意“小于”的枚举方式。
最后还应留意B为可行解的条件。
1 | /** Aug 22, 2015 4:28:18 PM |
并没有实现有些题解中所说的O(nlogn)或O(30n)的算法,但总的运行时间还是较短的?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Problem Description
Victor has a machine. When the machine starts up, it will pop out a ball immediately. After that, the machine will pop out a ball every w seconds. However, the machine has some flaws, every time after x seconds of process the machine has to turn off for y seconds for maintenance work. At the second the machine will be shut down, it may pop out a ball. And while it’s off, the machine will pop out no ball before the machine restart.
Now, at the 0 second, the machine opens for the first time. Victor wants to know when the n-th ball will be popped out. Could you tell him?Input
The input contains several test cases, at most 100 cases.
Each line has four integers x, y, w and n. Their meanings are shown above。
$ 1\leq x,y,w,n\leq 100 $ .Output
For each test case, you should output a line contains a number indicates the time when the n-th ball will be popped out.Sample Input
2 3 3 3
98 76 54 32
10 9 8 100Sample Output
10
2664
939
n-1的问题,自己刚开始出了点差错:
1 | /** Aug 22, 2015 7:03:37 PM |
WA过一发,因为忽视了金额的分布范围。
1 | /** |
明显搞复杂了,做了一回出题人眼中的“火星人”T_T
平面上的整点就是无法构成正三角形、正五边形、正六边形,没这点见识就只有瞎弄。。。
简化到这个地步,正方形的判断就应该仔细点了吧?四条边及两对角线的长度比较都写上,
1 | /** |
多么有教育意义的猜公式,猜不出就别偏执了。。。
f[i]=s[i-3]+1,s[i]=s[i-1]+f[i],…
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
1 | /** |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description
Can we divided a given string S into three nonempty palindromes?Input
First line contains a single integer $ T \leq 20 $ which denotes the number of test cases.
For each test case , there is an single line contains a string S which only consist of lowercase English letters. $ 1\leq |s| \leq 20000 $Output
For each case, output the “Yes” or “No” in a single line.Sample Input
2
abc
abaadadaSample Output
Yes
No
赛时的Hash做法:
1 | /** |
首次尝试去hack别人不成,还被人黑了,立马TLE
题解介绍的多种方法中,个人认为二分+hash代码量较少,如何实现?
字符串是可递归形式构造的,求解也是递归的;
但是递归时划分的三种情况,最终并没有做好化归
1 | import java.io.*; |
状态压缩方面,虽然想到了用一维的x+y替代二维的x,y,但并没有做到位。
既然可以转化成二维DP,还有何搜索必要
寻找合适的出发点时,不要陷入“极近点”而丢失了“最近点”!
1 |
|