自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 luogu P2943 [USACO09MAR]Cleaning Up G

题面传送门 显然可以dpdpdp n2n^2n2暴力dpdpdp很好想,循环时直接更新答案即可。 考虑优化。 显然,如果每111头牛都分成111组,那么代价为nnn,所以我们每次枚举状态时种类不能超过n\sqrt nn​,否则为无用转移。 那n\sqrt nn​种类数之内的最左端点怎么搞呢? 显然可以尺取法。跑n\sqrt nn​趟尺取即可。 时间复杂度O(nn)O(n\sqrt n)O(nn​) 代码实现: #include<cstdio> #include<cmath> #def

2020-05-30 21:41:10 165 2

原创 luogu P6569 [NOI Online #3 提高组]魔法值

题面传送门 一眼看上去就是矩乘套路题。 又因为异或满足交换律与结合律,所以确定可以矩乘。 但是对于每个询问直接矩乘显然复杂度O(qn3logn)O(qn^3logn)O(qn3logn)会TTT 因为是010101矩乘,又因为询问只问了111号点,所以可以拿原来111的向量乘以预处理的矩阵,复杂度降为O(n3logn)−O(qn2logn)O(n^3logn)-O(qn^2logn)O(n3logn)−O(qn2logn) 代码实现: #include<cstdio> #include<c

2020-05-30 21:29:24 169

原创 luogu P6567 [NOI Online #3 入门组]买表

题面传送门 来一发不用单调队列的解法。 循环还是单调队列的循环,只不过把单调队列换成一个变量记录有几个111,循环时加减一下就好了。时间复杂度O(nm)O(nm)O(nm) 代码实现: #include<cstdio> #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) using namespace std; int n,m,k,a[1039],b[1039],t[200039],q[100

2020-05-26 20:05:06 319

原创 luogu P6566 [NOI Online #3 入门组]观星

题面传送门 直接bfsbfsbfs即可。 代码实现: #include<cstdio> #include<queue> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int a[1539][1539],x,y,n,m,k,ans,tot,pus,f[1539][1539],nowx,nowy,d[1539*1539]; int xp[9]={0,1,0,-1,0,1,1,-1,-1}; int yp[9]={0,

2020-05-26 20:00:17 261

原创 luogu P6565 [NOI Online #3 入门组]最急救助

题面传送门 没啥好说的,模拟即可。 #include<cstdio> #include<iostream> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,ans,tot,pus,num[139],h[139]; char s[139][139],a[539]; int main(){ // freopen("save.in","r",stdin)

2020-05-26 19:36:56 394

原创 P6568 [NOI Online #3 提高组]水壶

题面传送门 显然是全部把kkk个倒到一个水壶中最优。 那么我们可以前缀和。枚举右端点,利用前缀和算左端点。

2020-05-24 16:24:00 703

原创 luogu P3047 [USACO12FEB]Nearby Cows G

题面传送门 显然可以dpdpdp 第一次dfsdfsdfs,定义fi,jf_{i,j}fi,j​为在iii子树下距离在jjj以内的总和。 第二次可以容斥,用父亲节点的减去儿子节点的值。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m,k,f[100039][39],dp[100039][39],a[100039],x,y,h[100039],head; struct yyy { int to

2020-05-23 21:49:33 340

原创 CF242E XOR on Segment

题面传送门 看着像线段树。 直接二进制拆掉就可以取反操作了。 拆掉以后就是异或111或者000的操作了。 时间复杂度O(26nlogn)O(26nlogn)O(26nlogn) 代码实现: #include<cstdio> using namespace std; int n,m,k,x,y,zs,head,a[100039],f1[400039][25],f2[400039][25],sum[400039][25],z[25],ans,tot,pus; inline void hebing(i

2020-05-15 19:52:51 104

原创 CF660C Hard Process

题面传送门 明显可以尺取法。 先把每一位取反,则枚举右端点,左端点单调不降则直接暴力枚举即可。 代码实现: #include<cstdio> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,a[300039],q[300039],x,y,z,l,r=1,mid,tot,ans; int main(){ register int i,j; scanf("%d%d",&n,&m); for

2020-05-12 20:38:59 149

原创 luogu P4688 [Ynoi2016]掉进兔子洞

题面传送门 第二道YnoiYnoiYnoi题目。感觉还是很良心的。 区间相同个数,很容易想到bitsetbitsetbitset。 然后可以用莫队维护出来,最后与一下就好了。 但是相同的数怎么办呢? 离散的时候把位置空出来,之后维护一下有几个就好了。 注意加一些常数优化之类的。 代码实现: #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<bit

2020-05-10 15:16:51 203

原创 exgcd

看来别的博客都没有讲清楚,那我就来讲一下。 一下纯属作者个人思路,若有不对请提出。 在这篇文章中,///表示向下取整的除。 求ax+by=cax+by=cax+by=c的解 显然是不定方程。有无解我们可以用裴蜀定理验证,此处当做其有解。 我们可以尝试用yyy表示出xxx,比如这样:x=c−byax=\frac{c-by}{a}x=ac−by​ 考虑常数分离一下,得到x=⌊ca⌋+c−b(y%x)ax=\left\lfloor\dfrac{c}{a}\right\rfloor +\frac{c-b(y\%x)

2020-05-08 20:00:41 150

原创 我们爱序列

题面传送门 启发式合并大法吼啊。 优雅的暴力。 暴力:遍历整个数组去修改,时间复杂度O(n2)O(n^2)O(n2) 换一个思路暴力:对于每一个aia_iai​维护一个队列,每次把两个队列合并。时间复杂度仍是O(n2)O(n^2)O(n2) 那可不可以优化一下呢? 每次我们不能把小的合并到大的上面去吗,这样可以减少点常数。 等等,你确定是常数? 似乎可以算一算复杂度,对于每一个初始队列,他最多会被...

2020-05-02 21:51:55 175

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除