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

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. qt 中的画图

  2. Spring详解(十)加载配置文件

    在项目中有些参数经常需要修改,或者后期可能会有改动时,那我们最好把这些参数放到properties文件中,在源代码中读取properties里面的配置,这样后期只需要改动properties文件即可, ...

  3. 集合的打印、列表List、迭代器Iterators

    集合的打印 必须使用 Arrays.toString() 来生成数组的可打印形式. 但是打印集合无需任何帮助. /** * 集合的打印 * @author myf */ public class Pr ...

  4. Java程序设计学习笔记(四)—— GUI

    时间:2016-3-24 11:24 天道酬勤  --GUI(图形用户界面)    1.GUI        Graphical User Interface(图形用户接口).        用图形的 ...

  5. ES6 class——getter setter音乐播放器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. DFS常规解题套路

    本文为xdfApp团队成员文章,原文链接:https://blog.csdn.net/sinat_37380158/article/details/106866970 作者介绍:韩沛沛, 北京邮电大学 ...

  7. C# - Timer 实现跑马灯

  8. eslint and stylelint config

    eslint: module.exports = {   root: true,   env: {     browser: true,     es6: true,     node: true   ...

  9. 文件权限的管理以及acl权限列表

    ls -l? 文件名称 上面的命令以长格式显示文件与目录,每一行都是一个文件或目录的属性数据,每个文件或子目录的属性数据又以7个字段显示,各个字段的说明如下: (1)文件类型与权限:该字段共有10个字 ...

  10. Spring BeanDefinition

    定义 /** * A BeanDefinition describes a bean instance, which has property values, * constructor argume ...