NOIP 模拟 六十八
咕了十几场了,还是写一写吧。。
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 模拟 六十八的更多相关文章
- NOIP 模拟 六十九
0+30+40+90, 菜..... T1 取石子 考试扔了将近两个小时,最后也没有回忆起博弈论的相关内容.. 现在只会50pts.正解待补. #include<bits/stdc++.h> ...
- 《剑指Offer》题六十一~题六十八
六十一.扑克牌中的顺子 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字. 六十二.圆圈中 ...
- 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- 六十八、SAP中内表插入的三种方法之二,COLLECT的使用,用于计算数字字段之和
一.使用COLLECT时,如果关键字没有,那么插入,如果有则求所有关键字列的和,代码如下 二.sy-index在循环中,每次循环从1开始递增 三.查看T_DATA数据 四.如下 五.循环时候,我们查看 ...
- SpringBoot进阶教程(六十八)Sentinel实现限流降级
前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Senti ...
- FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发
在之前的文章:FastAPI(六十七)实战开发<在线课程学习系统>接口开发--用户登陆接口开发,今天实战:用户 个人信息接口开发. 在开发个人信息接口的时候,我们要注意了,因为我们不一样的 ...
- 第六十八篇、OC_按照某一字段对数值进行排序
代码中是根据"create_time_" 进行排序 ascending:决定的是升序还是降序排序 NSSortDescriptor *sortDescriptor = [[NS ...
- (六十八)使用XMPPFramework登录
按照XMPPFramework的官方样例,应该把登录代码放置在AppDelegate中,并且让注销成为私有方法. XMPPFramework进行登录的步骤如下: ①连接主机,并且发送JID ②如果连接 ...
随机推荐
- Python中的reduce()函数
reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...
- linux使用xampp安装MediaWiki环境
1.下载并安装xampp 下载xampp 在下载页面下载. 放置到相应目录 将xampp-linux-x64-5.6.3-0-installer.run文件复制到部署机器的/root目录下 安装 [r ...
- mycat<三>
server.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed u ...
- pgsql学习
--求所有人的薪水的总和,平均值,最大值,最小值 select sum(sal) , avg(sal), max(sal) , min(sal) from emp; --求总的行数 select co ...
- sychronized
说一下 synchronized 底层实现原理? synchronized可以保证方法或者代码块在运行时, 同一时刻只有一个方法可以进入到临界区, 同时它还可以保证共享变量的内存可见性. Java中每 ...
- springboot开启矩阵传参MatrixVariable
/** * 根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对. * 规范中没对对应的术语.一般 "URL 路径参数" 可以被应用,尽管更加 ...
- linux shell 删除满足正则表达式的文件
用find配合xargs rm find . -type f -name "to_delete_file_[a-z]_*_[0-9].jpg" | xargs rm
- Mysql主从复制、半同步复制、并行复制
MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方 ...
- vue element-ui .el-dialog 限制高度
<style scoped> /deep/ .el-dialog { height: 78vh; overflow: auto; } </style>
- 安装 Ubuntu 21.04 后必备的绝佳应用大合集(持续更新中)
@ 目录 一.Google Chrome 浏览器 1.下载 2.安装 3.设置搜索引擎 二.火焰截图(替代QQ截图) 1.简介: 2.安装: 3.设置快捷键: 三.VLC视频播放器(替代Potplay ...