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 ②如果连接 ...
随机推荐
- Ubuntu 16.04 NVidia显卡 输入密码后 重复出现登录界面
问题根源:显卡驱动 解决办法: CTRL+ALT+F1 # 切换到命令行 sudo service lightdm stop # 关闭桌面显示管理器 sudo apt-get remove --pu ...
- a、b、n为正整数且a>b,证明:若n|(a^n-b^n),则n|(a^n-b^n)/(a-b).
- 证明n个正数的算术平均数不小于它们的几何平均数
- python 逆序按行读取文件
How to read a file in reverse order? import os def readlines_reverse(filename): with open(filename) ...
- Android kotlin http url request
kotlin.concurrent.thread{ val url = "https://hangj.cnblogs.com/" val res = try { java.net. ...
- vue post 请求 是 request payload 而不是 FromData ,以及 格式转换成 FromData 需要的 key value 格式
export function 方法名字(传进来要给后端的参数){ return request({ url : ' 后端提供的接口路径 ', method ...
- JUnit5快速入门指南-2
重复测试中容易产生的问题 //结果类 private static int result = 0; public static int count(int x) throws InterruptedE ...
- C#中的“等待窗体”对话框
这篇文章向您展示了如何在c#.net Windows窗体应用程序中创建一个等待窗体对话框.创建一个新表单,然后输入您的表单名称为frmWaitForm.接下来,将Label,Progress Bar控 ...
- vue-element-admin 全局loading加载等待
最近遇到需求: 全局加载loading,所有接口都要可以手动控制是否展示加载等待的功能 当拿到这个需求的时候我是拒绝的,因为我以及局部写好了0.0,这是要大改呀....,没办法老板的要求,只能硬着头皮 ...
- (xxl_job | quartz):XXL_JOB 对比 Quartz 一决高下!
概述: XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展. 现已开放源代码并接入多家公司线上产品线,开箱即用. 官方地址中文版:http://www.x ...