HDU
BrooksBUAA
这个作者很懒,什么都没留下…
展开
-
[HDU 5213]Lucky:莫队+容斥原理
点击这里查看原题莫队好题,用F(l1,r1,l2,r2)表示答案,则根据容斥原理,减去两个数均在[r1+1,r2]内的情况,减去两个数均在[l1,l2-1]内的情况,再加上两个数均在[r1+1,l2-1]内的情况即为答案: F(l1,r1,l2,r2)=f(l1,r2)-f(r1+1,r2)-f(l1,l2-1)+f(r1+1,l2-1) 于是把每个询问分成4个区间进行莫队/* User:Sma原创 2017-04-11 17:26:38 · 304 阅读 · 0 评论 -
[HDU 5731]Solid Dominoes Tilings:状压DP+容斥原理
点击这里查看原题这题是POJ 2411的升级版。dp[i][j]表示长为i宽为j的方案数,打个表预处理一下。然后枚举列的切割方案,因为一共有m-1条竖线,因此有2^(m-1)种情况。cnt[i]表示按当前的列分割方案,宽为i的矩形的方案数,f[i]表示在当前列分割情况下,前i行的情况数,f[i]=cnt[i]-sigma{f[j]*cnt[i-j]}(0/* User:Small Language:原创 2017-05-03 08:28:00 · 476 阅读 · 0 评论 -
[HDU 2167]Pebbles:状压DP
点击这里查看原题比HDU1565更复杂的一道状压DP,需要多记录一位左上角的情况。每次换行的时候不需要考虑左上角,但是需要将每一位左移一位图转自http://blog.csdn.net/sf____/article/details/15026397 /* User:Small Language:C++ Problem No.:2167 */ #include<bits/stdc++.h> #def原创 2017-05-02 14:58:27 · 437 阅读 · 0 评论 -
[HDU 1565]方格取数(1):状压DP
点击这里查看原题格点转移/* User:Small Language:C++ Problem No.:1565 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; int n,p,q,a[20][20]; ll f[2][1<<20],ans; void solve(){原创 2017-05-02 11:13:48 · 566 阅读 · 0 评论 -
[HDU 1226]超级密码:BFS
点击这里查看原题n只有5000,设vis[i]表示模n为i的最小的c进制数(在代码里,vis[i]表示模n为i的数是否已出现),可以用BFS来求解,若位数大于500或该余数已出现过,则不再加入队列,找出最小的模n为0的数即为答案。/* User:Small Language:C++ Problem No.:1226 */ #include<bits/stdc++.h> #define ll long原创 2017-04-12 21:54:49 · 299 阅读 · 0 评论 -
[HDU 5371]Hotaru's problem:Manacher
点击这里查看原题先做一遍Manacher求出每个位置的回文串长度,然后暴力枚举第二个串的位置,为了优化,只找比答案更优的。/* User:Small Language:C++ Problem No.:5371 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const原创 2017-04-12 20:57:17 · 371 阅读 · 0 评论 -
[HDU 4739]Zhuge Liang's Mines:状压DP
点击这里查看原题题目中只有20个点,因此可以枚举每种选点方案,然后进行状态压缩DP。f[i]=max(f[i],f[i^t]+4) (我因为判断函数写错,WA了好几次)/* User:Small Language:C++ Problem No.:4739 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 us原创 2017-04-12 20:00:29 · 409 阅读 · 0 评论 -
[HDU 5950]Recursive sequence:矩阵乘法
点击这里查看原题问题实际上为求f(n) = f(n−1)+2f∗(n−2)+n^4,其中 f(1)=a,f(2)=b。那么 (n+1)^4 = n^4+4n^3+6n^2+4n+1 所以光 (n+1)^4 这个矩阵就能构造出 5∗5 的一个矩阵来, 然后 f(n) = f(n−1)+2∗f(n−2) 这个是 2∗2 的矩阵,所以构造出来就应该是 7∗7 的转移矩阵 A : {f[i-1],f[i-原创 2017-04-12 17:58:32 · 326 阅读 · 0 评论 -
[HDU 2841]Visible Trees:容斥原理
点击这里查看原题一个点能被看见的条件是gcd(x,y)=1,因此,问题转化为n,m范围内有多少数对的gcd为1。 可以运用容斥原理,先求一个莫比乌斯函数,然后计算每一行的合法的数目。/* User:Small Language:C++ Problem No.:5475 */ #include<bits/stdc++.h> #define ll long long #define inf 99999原创 2017-04-12 16:57:50 · 461 阅读 · 0 评论 -
[HDU 5441]Travel:并查集
点击这里查看原题离线处理,将所有边和询问读入后按x排序,从小到大加边,若不在同一个联通块内则ans加上两个联通块合并后的答案,减去原来的两个块的答案。/* User:Small Language:C++ Problem No.:5441 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namesp原创 2017-04-12 14:43:50 · 295 阅读 · 0 评论 -
[HDU 4864]Task:贪心
点击这里查看原题将所有机器和任务按x由大到小排序,若x相同则按y由大到小排序。 对每个任务,从所有时间大于等于它的机器中选择能力最小的去执行这个任务。/* User:Small Language:C++ Problem No.:4864 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using names原创 2017-04-12 11:53:27 · 260 阅读 · 0 评论 -
[HDU 5923]Prediction:并查集
点击这里查看原题考虑到n很小,对于树上每个点,选择它便会同时选择它的所有祖先,因此可以对每个点维护一个并查集,询问时做并查集合并即可。 复杂度O(nm+nk)。 不知道为何,我的get函数不加inline就会TLE,加上立马就过了,因为这个问题调了好几个小时。/* User:Small Language:C++ Problem No.:5923 */ #include<bits/stdc++.h原创 2017-04-12 10:46:22 · 425 阅读 · 0 评论 -
[HDU 5710]Digit-Sum:其他
点击这里查看原题可以从*2后各位数和的变化来考虑,如果某一位≥5,那么 *2后必然会进位,于是本位-10,前一位+1,总共减少9,因此我们只需要考虑两个问题: 数字总和应该是多少? 应该有多少位>4? 其实这两个问题可以同时解决,设S(n)=x,则S(2n)=2x-9k,k为正整数,那么,(2b-a)/9b*x一定为正整数,因此,可以设c=2b-a,d=9b,求gcd(c,d),则S(n)=d/gc原创 2017-04-12 09:49:15 · 603 阅读 · 0 评论 -
[HDU 1796]How many integers can you find:容斥原理
点击这里查看原题典型的容斥原理,枚举所有取数情况求最小公倍数 有几个坑需要注意: 输入的数可能有0 所有数的最小公倍数可能会爆int /* User:Small Language:C++ Problem No.:1796 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std原创 2017-04-11 19:32:00 · 270 阅读 · 0 评论 -
[HDU 4135]Co-prime:容斥原理
点击这里查看原题问题可以转化成求[1,x]中与n互质的数的个数,则答案为cal(1,b)-cal(1,a-1),现在的问题就是如何去求cal(1,x) 这个需要用到容斥原理,对n进行质因数分解,然后减去[1,x]中有含有一个质因数的数的个数,加上含有两个质因数的数的个数,减去三个……,以此类推,得到答案/* User:Small Language:C++ Problem No.:4135 */ #原创 2017-04-11 19:12:31 · 416 阅读 · 0 评论 -
[HDU 3949]XOR:线性基
点击这里查看原题线性基教程https://blog.sengxian.com/algorithms/linear-basis 本题要求第k小的异或和,那么可以将k转为2进制数,对于第i位,如果为1,那么答案异或上g[i]。注意的一点是如果基的元素数小于n,那么存在异或和为0的方案,因此需要将k减1/* User:Small Language:C++ Problem No.:3949 */ #inc原创 2017-06-13 14:58:10 · 406 阅读 · 0 评论