- 博客(18)
- 收藏
- 关注
原创 hdu5493 Queue
题意:n(题解:对于第i高的人,前面有min(x,n-x-i)个人比他高 于是我们可以从低到高为他们安排位置 可以用树状数组维护,到某个点时,前面还有多少个空位置 然后二分,查找刚好有min(x,n-x-i)+1个空位置的点,放进去这个人就可以///num表示身高,x表示前面或后面有多少人比他高struct po{
2016-09-21 15:48:27 243
原创 hdu5489 Removed Interval
题意:长度为n(题解:对于某一位,可以假设出现在最终的序列中,那么可以算出以这个数为头后面的LIS(可以从后往前处理),然后还可以算出以这个数结尾(类似于O(nlogn)计算LIS),去掉前L个的LIS,两者相加-1就可以算出最终的LIS 需要注意的是,如果L出现在最后位置时的情况int a[100010];///存从后往前处理时的LISint b[100010
2016-09-21 13:54:00 330
原创 hdu5898 odd-even number
题意:问(l,r)内,连续的奇数有偶数位,连续的偶数有奇数位,有多少这样的数字题解:数位dp,注意前导0就可以LL dp[20][20][2][2];int wei[20];///weishu表示处理到了第几位,pre代表前一位是奇数还是偶数,len表示前面奇数或偶数连续的长度,zero表示是否有前导0LL dfs(int weishu, int pre, int len, i
2016-09-20 14:15:45 280
原创 hdu5894 hannnnah_j’s Biological Test
题意:m个人需要坐在有n个座位的圆桌上,使得任意两个人之间距离至少为k,座位都不相同,人可以看做相同题解:可以想象成每一个人后面至少跟着k个座位 当一个人的位置确定以后,就变成了sum = C(n - 1 - m * k ,m - 1)
2016-09-19 21:16:37 225
原创 hdu5900 QSC and Master
题意:n题解:很明显,区间dp 感觉像是括号配对一样,要不是()()这样,要不就是(())这样 但需要注意的是,类似于(())这样时,里面的()必须是完全去掉int T,n,a[310],b[310],c[310][310];///c用于记录里面是否是完全使用LL dp[310][310];void donggui(){
2016-09-18 21:33:52 407
原创 hdu5901 Count primes (计算1-1e11内有多少素数)
题意:计算1 ~ n内有多少素数(n 题解:刚开始心想分段打表,结果跑了好久,没出结果,放弃 结果是Meisell-Lehmer,从来没听过,做为模板吧 详情https://en.wikipedia.org/wiki/Prime-counting_function//计算1-n内有多少素数//复杂度O(n*(2/3))#incl
2016-09-18 21:21:58 716
原创 codeforces716c Plus and Square Root
题意:贼长,初始2,第i次操作时,可以连续加好多次i,当到达某一个完全平方数时,开更,开更后必须满足膜(i+1)==0,求每次操作需要加多少次i题解:根据题意 a[i] + ans[i] * i = a[i+1] * a[i+1] ans[i] = (a[i+1] * a[i+1] - a[i]) / i a[i] % i == 0
2016-09-18 10:10:17 558
原创 51nod 1714 B君的游戏
题意:玩儿游戏,可以把一个数x变成xi,xi&x == x,问先手能不能赢题解:这个转换,也就说把x变成二进制后,只能在原来有1的位置上写1,并且,至少有一位不写1 很容易想到,一个数的sg值,只跟这个数的二进制有多少个1有关,转换也很好想,但时间肯定来不及 其实只要把所有( 以前也想到过这种打表,当时数据很大,好像有1e5
2016-09-14 19:52:58 748
原创 codeforces714e Sonya and Problem Wihtout a Legend
题意:一串数字,要求变成严格的上升子序列的最小花费,花费为abs(a-temp)题解:做这题之前,可以先去做做hdu5256 考虑两个位置i,j(i= j - i ,也就是说a[j] - j >= a[i] - i 那么考虑新的数列a[i] - i,只要保证这个数列是上升的就可以(可以存在相等) 首先把a[i]都变
2016-09-14 14:12:12 836
原创 hdu5726 && hdu5869
hdu5726 GCD题意:n个数,q次询问,每次询问给出(l,r),问区间的gcd,并且有多少个区间和这个区间gcd相同题解:求区间啊gcd比较简单,直接线段树就可以,怎么求有多少个区间呢? 假设知道了处理到上一位的gcd都有哪些,那么通过上一位的gcd,就可以求出到本位的所有的gcd 性质,n个数,所有数可能组成的gcd,有大概log
2016-09-13 17:21:22 397
原创 hdu5875 Function
题意:一个区间,m次询问(l,r),求a[l]%a[l+1]%...%a[r]题解:比赛时候,想到的是二分线段树,说了以后,学弟说可能会退化,当时没多想,其实仔细想想,构造不出来那样的数据吧,线段树常数比较大,看到队友用RMQ,常数小 其实本质差不多,就是先找前一半的最小,看看是不是小于a[l],如果是,就继续在左找,没有就在右找,如果右也没有,就退int a[1
2016-09-12 21:48:12 232
原创 hdu5876 Sparse Graph
题意:给2e6的点,2e5的边,求补图中,单源点到所有点的最短路题解:比赛时候,没有仔细考虑这个,发现其实挺水的 边少的,一半是用bfs 维护两个set,set1中,记录的是,没有处理的点,set2中是刚刚处理的点 经过一个点时,把连接的点,且在set1中的点,放到set2中,然后set1中的点就可以处理,交换set
2016-09-12 20:12:24 232
原创 2016 Multi-University Training Contest 2
hdu5734 Acperience题意:说了一大堆,求求和(wi - x * bi),使和最小,wi已知,x非负数,bi取-1或1题解:列出二次方程,初中知识各种变就行 最后答案是(n * 求和(wi^2) - (求和(wi*bi))^2)int main(){ int t; cin>>t; while(t--){
2016-09-09 15:21:18 246
原创 2016 Multi-University Training Contest 3
hdu5752 Sqrt Bo题意:给一个数n,n 题解:肯定是大数,但JavaBigInteger没有直接开方的函数,倒过来想,平方5次最大得到多少即可import java.util.Scanner;import java.math.BigInteger;public class Main { public static void main(String[] args
2016-09-08 13:42:10 276
原创 codeforces 545D. Queue
题意:给你一个序列,如果这个数比他前面所有数字的总和大于等于,那么他就是开心的,否则就是不开心,让你重新更改顺序,使开心的人最多题解:首先,排序,对于开心的,留下来,不开心的,扔到最后,这还可能使后面开心的变多。int a[100010];int main(){ int n; cin>>n; for(int i=0;i<n;i++){ scanf("
2016-09-07 21:11:01 319
原创 Codeforces 689D Friends and Subsequences(二分+RMQ)
题意:给两个数列a,数列b,求有多少个区间[l,r],使得a区间的最大值等于b区间的最小值题解:首先,满足maxi=lrai−mini=lrbi≤maxi=lr+1ai−mini=lr+1bi 因为左端点固定,区间越大,最大值越大,区间越大,最小值越小。 然后就可以枚举左端点,二分右端点,求出所有的max-min == 0即可,区间查
2016-09-07 16:46:23 241
原创 Codeforces 678E Another Sith Tournament(状压dp,概率dp)
题意:n个人的擂台赛,起初主角选一个人作为擂主,然后主角选择人上去打擂,直到剩最后一个人,并且主角是擂主,问最后主角是擂主的概率最大是多少题解:dp[i][j]表示i状态下,j是擂主,最后主角胜出的概率 dp[i][j] = max(dp[i - (1 ans = max(dp[((1 刚开始一直没想通为何要倒着dp
2016-09-07 11:24:26 412
原创 概率dp
来写一个概率dp专题light oj 1027 有n个门让你选,每个门有一个数字,正数代表x分钟后出去,负数代表x分钟后回到起点重新开始然后问你出去的时间期望是多少分钟如果是一个正数,那么x分钟后就可以出去,如果是一个负数,那么等x分钟后,继续回到起点,那么答案就是ans = (正数的个数 / 总个数) * (正数的和 / 正数的个数) + (负数的个数 / 总
2016-09-06 19:23:30 224
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人