咕了十几场了,还是写一写吧。。

T1 玩水

发现满足三个人路径不同必须要有2个及以上的斜线相同结构,需要注意如果同一行或者同一列的话必须要相邻才行。

#include<bits/stdc++.h>
using namespace std;
char a[1050][1050];
int c[1050][1050],n,t,m;
inline void add(int x,int y,int val)
{ for(int i=x;i<=n;i+=i&-i)
for(int j=y;j<=m;j+=j&-j)
++c[i][j];
}
inline int query(int x,int y)
{ int res=0;
for(int i=x;i;i-=i&-i)
for(int j=y;j;j-=j&-j)
res+=c[i][j];
return res;
}
signed main()
{ freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
scanf("%d",&t);
while(t--)
{ int ji=0;
scanf("%d%d",&n,&m); bool bo=0;
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)c[i][j]=0;
for(int i=1;i<=n;++i)scanf("%s",a[i]+1);
for(int i=2;i<=n;++i)
{ for(int j=1;j<m;++j)
{ if(a[i][j]==a[i-1][j+1])add(i,j,1);
if(a[i][j]==a[i-1][j+1] and query(i,j)>=2){bo=1;break;}
}if(bo)break;
}
if(n==2)
{ bo=0;
for(int i=1;i<m-1;++i)if(a[2][i]==a[1][i+1] and a[2][i+1]==a[1][i+2])bo=1;
}
if(bo)puts("1");
else puts("0");
}
return 0;
}

T2 假人

待补。。

T3 切题

如果方案可行,对于最大的k个$a_i$ ,总有$\sum_{i=1}{m}min(b_i,k)>=\sum_{i=1}ka_i$。

将 b 的统计方式转换,设$c_i$为大于等于 i 的 b 的个数,那么上式为$\sum_{i-1}^{k}c_i$

于是可以线段树维护最小值。修改的话需要记录每个$a_i$的第一次和最后一次出现位置。

#include<bits/stdc++.h>
using namespace std;
int fir[564545],sec[554545];
int n,m,b[250001],a[250001],tmp[250001],q,val[250001],c[250001];
int minn[250010<<3],tag[250010<<3];
inline void pushup(int x){minn[x]=min(minn[x<<1],minn[x<<1|1]);}
inline void pushdown(int x){minn[x<<1]+=tag[x];minn[x<<1|1]+=tag[x];tag[x<<1]+=tag[x];tag[x<<1|1]+=tag[x];tag[x]=0;}
inline void build(int x,int l,int r)
{ if(l==r){minn[x]=val[l];return ;}
int mid=(l+r)>>1;
build(x<<1,l,mid);build(x<<1|1,mid+1,r);
pushup(x);
}
inline void update(int x,int l,int r,int L,int R,int val)
{ if(l>=L and r<=R){minn[x]+=val;tag[x]+=val;return;}
if(tag[x]!=0)pushdown(x);
int mid=(l+r)>>1;
if(mid<R)update(x<<1|1,mid+1,r,L,R,val);
if(mid>=L)update(x<<1,l,mid,L,R,val);
pushup(x);
}
signed main()
{ freopen("problem.in","r",stdin);
freopen("problem.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)scanf("%d",&a[i]),tmp[i]=a[i];
for(int i=1;i<=m;++i)scanf("%d",&b[i]);
sort(tmp+1,tmp+1+n);
for(int i=1;i<=m;++i)c[min(b[i],n)]++;
for(int i=n-1;i;--i)c[i]+=c[i+1];
c[0]=0;for(int i=1;i<=n;++i)c[i]+=c[i-1];
for(int i=n,sum=0;i;--i)
{ sum+=tmp[i];
val[n-i+1]=c[n-i+1]-sum;
}
for(int i=n;i;--i)if(!fir[tmp[i]])fir[tmp[i]]=n-i+1;
for(int i=1;i<=n;++i)if(!sec[tmp[i]])sec[tmp[i]]=n-i+1;
build(1,1,n);scanf("%d",&q);
for(int i=1;i<=q;++i)
{ int opt,pos;
scanf("%d%d",&opt,&pos);
if(opt==1)
{ int pre=a[pos];
a[pos]++;
int p=fir[pre];
update(1,1,n,p,n,-1);
if(!fir[a[pos]] and !sec[a[pos]])sec[a[pos]]=p;
else fir[a[pos]]=p,sec[a[pos]]=p;
if(fir[pre]==sec[pre])fir[pre]=sec[pre]=0;
else fir[pre]=p+1; printf("%d\n",minn[1]>=0);
}
if(opt==2)
{ int pre=a[pos];a[pos]--;
int p=sec[pre];
update(1,1,n,p,n,1);
if(!fir[a[pos]] and !sec[a[pos]])fir[a[pos]]=p;
else fir[a[pos]]=p,sec[a[pos]]=p;
if(fir[pre]==sec[pre])fir[pre]=sec[pre]=0;
else sec[pre]=p-1;
printf("%d\n",minn[1]>=0);
}
if(opt==3)
{ ++b[pos];
if(b[pos]<=n)update(1,1,n,b[pos],n,1);
printf("%d\n",minn[1]>=0);
}
if(opt==4)
{ --b[pos];
if(b[pos]<n)update(1,1,n,b[pos]+1,n,-1);
printf("%d\n",minn[1]>=0);
}
}
}

T4 天下第一

LCT维护连通性不会,待补。。

NOIP 模拟 六十八的更多相关文章

  1. NOIP 模拟 六十九

    0+30+40+90, 菜..... T1 取石子 考试扔了将近两个小时,最后也没有回忆起博弈论的相关内容.. 现在只会50pts.正解待补. #include<bits/stdc++.h> ...

  2. 《剑指Offer》题六十一~题六十八

    六十一.扑克牌中的顺子 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字. 六十二.圆圈中 ...

  3. 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)

    1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...

  4. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

  5. 六十八、SAP中内表插入的三种方法之二,COLLECT的使用,用于计算数字字段之和

    一.使用COLLECT时,如果关键字没有,那么插入,如果有则求所有关键字列的和,代码如下 二.sy-index在循环中,每次循环从1开始递增 三.查看T_DATA数据 四.如下 五.循环时候,我们查看 ...

  6. SpringBoot进阶教程(六十八)Sentinel实现限流降级

    前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Senti ...

  7. FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发

    在之前的文章:FastAPI(六十七)实战开发<在线课程学习系统>接口开发--用户登陆接口开发,今天实战:用户 个人信息接口开发. 在开发个人信息接口的时候,我们要注意了,因为我们不一样的 ...

  8. 第六十八篇、OC_按照某一字段对数值进行排序

    代码中是根据"create_time_" 进行排序   ascending:决定的是升序还是降序排序 NSSortDescriptor *sortDescriptor = [[NS ...

  9. (六十八)使用XMPPFramework登录

    按照XMPPFramework的官方样例,应该把登录代码放置在AppDelegate中,并且让注销成为私有方法. XMPPFramework进行登录的步骤如下: ①连接主机,并且发送JID ②如果连接 ...

随机推荐

  1. Kafka源码篇 --- 小白也能看懂的Producer的初始化及元数据获取流程

    最近在研究kafka的源码,发现有些小伙伴的源码写的很不错,就想转载一下,让更多的人知道和学习一下. https://blog.csdn.net/weixin_43167418/article/det ...

  2. linux下查看磁盘使用内存及清除日志内存

    1.查看磁盘内存 df -h 2.清理日志内存 echo "">catalina.out

  3. Ubuntu 系统安装、配置

    windows下制作安装U盘 使用工具:Universal USB Installer ubuntu下制作安装U盘 使用工具:Startup Disk Creator(自带) 选择国内源:Switch ...

  4. group by分组查询

    有如下数据: 一个简单的分组查询的案例 按照部门编号deptno分组,统计每个部门的平均工资. select deptno,avg(sal) avgs from emp group by deptno ...

  5. CountDownLatch能不能在多个线程上添加await?

    在CountDownLatch类的使用过程中,发现了一个很奇怪的现象: CountDownLatch countDownLatch = new CountDownLatch(2); Runnable ...

  6. Linux档案权限篇之一

    一.查看档案的属性 "ls" 第一列为档案的权限: d:代表是目录 -:代表是文件 l:代表是连接文件(相当于windows里面的快捷方式) b:代表块设备(如硬盘) c:代表字符 ...

  7. idea字节码插件JClassLib——阅读JVM字节码

    idea字节码插件JClassLib--阅读JVM字节码 生成字节码文件并查看 查看字节码文件的方式:javac 文件名.java 即可生成.class文件,但是这种方式不方便 java:是运行字节码 ...

  8. 并发编程之:BlockingQueue

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 队列 学过数据结构的同学应该都知道,队列是数据结构中一种特殊的线性表结构,和平时使用的List,Set这些数据结构相比有点特殊,它的特殊之处在于它只允 ...

  9. 【Azure 应用服务】Python flask 应用部署在Aure App Service中作为一个子项目时,解决遇见的404 Not Found问题

    问题描述 在成功的部署Python flask应用到App Service (Windows)后,如果需要把当前项目(如:hiflask)作为一个子项目(子站点),把web.config文件从wwwr ...

  10. 枚举类enum

    一.枚举类 package com.xxx.xf.common.enums; import com.xxx.xf.workday.contant.HolidayContant; /** * @Auth ...