![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm
文章平均质量分 74
matrix5247
这个作者很懒,什么都没留下…
展开
-
poj3213
传送门 http://poj.org/problem?id=3213 题目大意:两个矩阵(N 矩阵乘法最低复杂度就是N^3的啊,要计算每一个的话,妥妥超时,但这题规定,只有可能一个地方出错,可以通过求出前一个矩阵的列和,后一个矩阵的行和,进行简化,十分巧妙。 #include #include #include #include #include #i原创 2016-05-25 16:06:24 · 485 阅读 · 0 评论 -
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 · 279 阅读 · 0 评论 -
概率dp
来写一个概率dp专题light oj 1027 有n个门让你选,每个门有一个数字,正数代表x分钟后出去,负数代表x分钟后回到起点重新开始然后问你出去的时间期望是多少分钟如果是一个正数,那么x分钟后就可以出去,如果是一个负数,那么等x分钟后,继续回到起点,那么答案就是ans = (正数的个数 / 总个数) * (正数的和 / 正数的个数) + (负数的个数 / 总原创 2016-09-06 19:23:30 · 223 阅读 · 0 评论 -
codeforces724c Ray Tracing(扩展欧几里得)
题意:从(0,0)沿(1,1)射出来一个东西,在封闭的(n,m)(n,m题解:第一感觉,肯定是把该平面展开,然后在所有展开的平面中对应的点,满足最小的dx == dy的就是解 对于横坐标,所有展开后的点的横坐标有可能是a,2*n-a,2*n+a。。。公式2*x*n ± a 纵坐标类似2*y*m ± b 要撞到,满足2*x*原创 2016-10-09 13:56:11 · 389 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 317 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 329 阅读 · 0 评论 -
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 · 242 阅读 · 0 评论 -
51nod 1624取余最长路
题意:3*n(n题解:如果是普通的不需要膜的话,就是普通的dp,但是有膜以后,会产生后效性,因此,就不会dp了 如果暴力的话,复杂度n^2 换个角度,也就是找两个拐点,使得sum[1][x]+sum[2][y]-sum[2][x-1]+sum[3][n]-sum[3][y-1]最大就可以 考虑优化,对于sum[2][y]-原创 2016-10-10 21:36:33 · 532 阅读 · 0 评论 -
51nod 1503 && codeforces570e Pig and Palindromes
题意:n*m的格子,每个格子上有一个字符,从(1,1)走到(n,m)只能向下和向右,问走过的字符串是回文的个数有多少题解:比较容易想到是dp,dp[step][x1][y1][x2][y2],表示第step步到(x1,y1)和(x2,y2)共有多少种方案 但这样的话,时间空间都爆炸 可以用滚动数组优化掉一维,但空间还是会爆炸原创 2016-10-12 17:11:08 · 296 阅读 · 0 评论 -
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 · 410 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
hdu5876 Sparse Graph
题意:给2e6的点,2e5的边,求补图中,单源点到所有点的最短路题解:比赛时候,没有仔细考虑这个,发现其实挺水的 边少的,一半是用bfs 维护两个set,set1中,记录的是,没有处理的点,set2中是刚刚处理的点 经过一个点时,把连接的点,且在set1中的点,放到set2中,然后set1中的点就可以处理,交换set原创 2016-09-12 20:12:24 · 232 阅读 · 0 评论 -
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 阅读 · 0 评论 -
hdu5726 && hdu5869
hdu5726 GCD题意:n个数,q次询问,每次询问给出(l,r),问区间的gcd,并且有多少个区间和这个区间gcd相同题解:求区间啊gcd比较简单,直接线段树就可以,怎么求有多少个区间呢? 假设知道了处理到上一位的gcd都有哪些,那么通过上一位的gcd,就可以求出到本位的所有的gcd 性质,n个数,所有数可能组成的gcd,有大概log原创 2016-09-13 17:21:22 · 397 阅读 · 0 评论 -
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 · 835 阅读 · 0 评论 -
51nod 1714 B君的游戏
题意:玩儿游戏,可以把一个数x变成xi,xi&x == x,问先手能不能赢题解:这个转换,也就说把x变成二进制后,只能在原来有1的位置上写1,并且,至少有一位不写1 很容易想到,一个数的sg值,只跟这个数的二进制有多少个1有关,转换也很好想,但时间肯定来不及 其实只要把所有( 以前也想到过这种打表,当时数据很大,好像有1e5原创 2016-09-14 19:52:58 · 748 阅读 · 0 评论 -
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 · 552 阅读 · 0 评论 -
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 · 713 阅读 · 0 评论 -
51nod 1605 棋盘问题
题意:n*m的棋盘,每次可以将x(x==1 || x是质数),如果x*x内都是1的话,将他们都变成0,问先手赢还是后手赢题解:博弈,没有sg函数,刚开始想可能会和前后顺序有问题 有点儿想不到了 然后发现,x只能是1或者质数,所有x肯定是奇数,那x*x肯定也是奇数 如果当前有奇数个1,那么变后就有偶数个1原创 2016-10-08 16:03:19 · 242 阅读 · 0 评论