码迷,mamicode.com
首页 > 其他好文 > 详细

10.27考试总结

时间:2018-10-28 00:08:24      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:img   分享图片   close   方案   分享   add   span   amp   异或   

我要的幸福

题意是找出从1,1到n,m的一条路,有障碍不能走,只能走右边或者下边,每次走一步,求字典序最小方案

这道题当时想着用深搜结果麻烦了,而且答案错误。。。

题解:从终点开始向左边或者上边走,找出所有不能走的点,打上标记

注意vis[i][i]=vis[i+1][j]|vis[i][j+1],异或是有一则一,就是有能到达它的点,他就能走。如果周围都是0那他也不能走

再直接从1,1开始走,贪心地选取右边、下边的中的最小值,依次输出就是字典序最小值了

i&(1<<k)是看i的第k位是什么

1^(1<<k)是改变i的第k位

 

ksum

求一个序列前k大的子序列和,数据范围十分大

本来可以用线段树做如果数据小的话

enmmm线段树不会写蛤蛤

技术分享图片
void Add(int x, long long val)
    {
        for(; x <= n; x += lowbit(x))   tree[x] += val;
    }

long long Query(int x)
    {
        long long ret = 0;
        for(;x ; x-= lowbit(x)) ret += tree[x];
        return ret;
    }
View Code

所以用我奇特的过点法过掉两个点得20分蛤蛤

知识漏洞很大

题解:由于是正整数组成,一个序列一定比他的子序列的和大,而且一个序列l,r可以由l-1,r或者l,r+1得到

那么用堆来维护,记录前缀和,先把前缀和放进优先队列

这个优先队列是一个结构体类型的,里面存放了这个区间的左端点,右端点,区间和

还有重载bool operator < (const Node & x,const Node  &y){

return x.sum>y.sum>

}用来排序

然后每当拿出堆顶的Node,就要把他的变形放回去,作为统一的不要出现重复,可以就把左端点加1,前缀和相应减去

 

奶牛喝水专用牛棚

差分和线段树都可以

差分就是在一个区间的修改次数比较多的时候派上用场

在L端加上修改值,在R+1端减去修改值,然后计算L到R的修改值的前缀和,再与原数组对应位置相加

emmmm劳资还是没懂,为什么这道题要用差分?????????????????

 

10.27考试总结

标签:img   分享图片   close   方案   分享   add   span   amp   异或   

原文地址:https://www.cnblogs.com/SUMMER20020929/p/9863951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!