暑假集训PVZ提高模拟9
没关 exe 让这货挂了一天
UPD:又挂了一晚上,现在被我正义制裁了
A.大众点评
交互红题啊,交互会写,但是忘记判 \(n=1\) 了
这个题交互库函数实现起来还是挺简单的,我 Windows 不会编译,我寻思你可以直接搓一个交互库出来啊,所以我就搓了个交互库
#include "ramen.h"
//#include"test.h"
#include<bits/stdc++.h>
using namespace std;
void Ramen(int N){
if(N==1){
Answer(0,0);return;
}
int res=Compare(0,1),maxn,minn;
if(res==1){
maxn=0,minn=1;
}
else{
maxn=1,minn=0;
}
int i=2;
for(;i+1<=N-1;i+=2){
res=Compare(i,i+1);
int jmax,jmin;
if(res==1){
jmax=i,jmin=i+1;
}
else{
jmax=i+1,jmin=i;
}
if(Compare(maxn,jmax)==-1){
maxn=jmax;
}
if(Compare(minn,jmin)==1){
minn=jmin;
}
}
for(;i<=N-1;++i){
res=Compare(maxn,i);
if(res==-1){
maxn=i;
}
else{
res=Compare(minn,i);
if(res==1){
minn=i;
}
}
}
Answer(minn,maxn);
}
#include<bits/stdc++.h>
using namespace std;
int NN,TT,_A[401],Cntt;
void Ramen(int N);
int Compare(int X,int Y){
++Cntt;
if(_A[X]>_A[Y]) return 1;
return -1;
}
int mi=0,ma=0;
void Answer(int X,int Y){
cout<<"Received Answer "<<X<<"(min) "<<Y<<"(max)"<<endl;
if(X==mi and Y==ma){
cout<<"Answer Correct. Compare Time: "<<Cntt<<endl;
}
else{
cout<<"Incorrect"<<endl;
}
}
int main(){
//文件输出版本
// ifstream="file name";
// f>>NN>>TT;
// for(int i=0;i<=NN-1;++i){
// f>>_A[i];
// if(mi==0 or _A[i]<_A[mi]) mi=i;
// if(ma==0 or _A[i]>_A[ma]) ma=i;
// }
// Ramen(NN);
cin>>NN>>TT;
for(int i=0;i<=NN-1;++i){
cin>>_A[i];
if(mi==0 or _A[i]<_A[mi]) mi=i;
if(ma==0 or _A[i]>_A[ma]) ma=i;
}
Ramen(NN);
}
B.录取查询
赛时先打的特殊性质二,我寻思这东西不妥妥的能分块,块内维护单调性,再在接口判一下就行了,所以就打了这个特殊性质的分块,后来发现这个性质是能推广的,只需要再判一下当前中间的字母是否在该区间内全部出现即可(因为出现的不全说明你这几个字母在排完序后势必还会再插入一点东西,所以就是错的),但是没时间打了,赛后发现单调性和全部出现性质还可以用线段树维护.
学长:你这是常数问题
分块版本
#include<bits/stdc++.h>
using namespace std;
int n,q;string s;
namespace subtask1{
string t;
void main(){
t=s;sort(t.begin(),t.end());
for(int i=1;i<=q;++i){
int op;cin>>op;
if(op==1){
int pos;char ct;
cin>>pos>>ct;
s[pos-1]=ct;
t=s;sort(t.begin(),t.end());
}
else{
int l,r;
cin>>l>>r;
if(t.find(s.substr(l-1,r-l+1))<t.length()){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
}
}
}
namespace subtask2{
int len,up[1001];
inline int locate(int id){
return id/len+1;
}
inline int start(int id){
return (id-1)*len;
}
inline int end(int id){
return id*len-1;
}
void main(){
len=sqrt(n);
for(int i=1;i<=n/len+1;++i){
bool isup=true;
for(int j=start(i);j<=min(n-2,end(i)-1);++j){
if(s[j]>s[j+1]){
isup=false;
break;
}
}
up[i]=isup;
}
for(int i=1;i<=q;++i){
int op;cin>>op;
if(op==1){
int pos;char ct;
cin>>pos>>ct;
s[pos-1]=ct;
bool isup=true;
for(int j=start(locate(pos-1));j<=min(n-2,end(locate(pos-1))-1);++j){
if(s[j]>s[j+1]){
isup=false;
break;
}
}
up[locate(pos-1)]=isup;
}
else{
int l,r;
cin>>l>>r;
// cout<<s<<" "<<l<<" "<<r<<endl;
bool isup=true;l--,r--;
// cout<<locate(l)<<" "<<locate(r)<<endl;
if(locate(r)-locate(l)<=1){
for(int i=l;i<=r-1;++i){
if(s[i]>s[i+1]){
cout<<"No"<<endl;
isup=false;
break;
}
}
if(isup){
cout<<"Yes"<<endl;
}
}
else{
bool isup=true;
for(int i=locate(l)+1;i<=locate(r);++i){
// cout<<"findk "<<i<<" "<<up[i]<<endl;
if((i!=locate(r) and !up[i]) or s[end(i-1)]>s[start(i)]){
isup=false;
cout<<"No"<<endl;
break;
}
}
if(isup){
for(int i=l;i<=min(n-2,end(locate(l))-1);++i){
if(s[i]>s[i+1]){
isup=false;
cout<<"No"<<endl;
break;
}
}
if(isup){
for(int i=start(locate(r));i<=r-1;++i){
if(s[i]>s[i+1]){
isup=false;
cout<<"No"<<endl;
break;
}
}
if(isup){
cout<<"Yes"<<endl;
}
}
}
}
}
}
}
}
int main(){
// freopen("test.in","r",stdin);
// freopen("sb2.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>s>>q;
if(n<=300 and q<=300){
subtask1::main();
return 0;
}
bool issubtask2=true;
for(char i:s){
if(i!='a' and i!='b'){
issubtask2=false;
break;
}
}
if(issubtask2){
subtask2::main();
return 0;
}
// subtask1::main();
}
/*
33
aaaaabbbbbababaaaabbbabaaaaabbbbb
114
6
aabbba
1
2 1 5
8
bbbbbbbb
1
2 3 7
*/
线段树版本
#include <bits/stdc++.h>
using namespace std;
const int N=100001;
int n,q;
char s[N];
struct ST{
struct stree{
int l,r,is;
char lz,rz;
int cnt[30];
}a[N<<2];
void pushup(stree &res,stree a,stree b){
res.lz=a.lz;
res.rz=b.rz;
res.is=(a.is&&b.is)&&(a.rz<=b.lz);
for(int i=1;i<=26;i++){
res.cnt[i]=a.cnt[i]+b.cnt[i];
}
}
void build(int p,int l,int r){
a[p].l=l;
a[p].r=r;
if(a[p].l==a[p].r){
a[p].lz=a[p].rz=s[a[p].l];
a[p].is=1;
a[p].cnt[s[a[p].l]-'a'+1]=1;
return;
}
int mid=(a[p].l+a[p].r)/2;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
pushup(a[p],a[p<<1],a[p<<1|1]);
return ;
}
void change(int p,int x,char k){
if(a[p].l==a[p].r){
a[p].cnt[a[p].lz-'a'+1]=0;
a[p].lz=a[p].rz=k;a[p].cnt[k-'a'+1]=1;
return;
}
int mid=(a[p].l+a[p].r)/2;
if(x<=mid) change(p<<1,x,k);
else change(p<<1|1,x,k);
pushup(a[p],a[p<<1],a[p<<1|1]);
}
stree ask(int p,int l,int r){
if(l<=a[p].l&&a[p].r<=r) return a[p];
int mid=(a[p].l+a[p].r)>>1;
if(r<=mid) return ask(p<<1,l,r);
if(l>mid) return ask(p<<1|1,l,r);
stree res;
pushup(res,ask(p<<1,l,r),ask(p<<1|1,l,r));
return res;
}
}tree;
int main(){
cin>>n>>(s+1)>>q;
tree.build(1,1,n);
while(q--){
int op;cin>>op;
if(op==1){
int x;char in;
cin>>x>>in;
tree.change(1,x,in);
}
if(op==2){
int l,r;
cin>>l>>r;
ST::stree res=tree.ask(1,l,r);
if(res.is){
bool flag=true;
for(int i=res.lz+1;i<=res.rz-1;i++){
if(res.cnt[i-'a'+1]!=tree.a[1].cnt[i-'a'+1]){
flag=false;
break;
}
}
if(flag){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
else cout<<"No"<<endl;
}
}
return 0;
}
C.精准打击
明天填坑
后记
你说得对,但是我被僵王博士的复仇恶心到了,我一共五路植物,车砸没两条,放三只橄榄球加两只巨人吃我一路半,放火球欺负我没寒冰菇烧了一路,我还打个牛魔,遂将题目改为暑假集训PVZ提高模拟9
今天电影后半段挺好看的,前半段不评价的原因是我没看
“你能不能不要放盗来的图了” “我这图不是盗的”
暑假集训PVZ提高模拟9的更多相关文章
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 20190820 Tue 集训总结&NOIP模拟 27
低谷度过了? 但是skyh阿卡了,还是反衬出我的辣鸡. T1知道要sort,却忘了判重,正解不如暴力分高,555. T2成功化出正解柿子,然后化过头了,化出了无法DP的柿子. 果然不够强,大神们一眼就 ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
- #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...
随机推荐
- Java 中的一些知识点
Java 中的一些知识点 Java 中的知识点 与C++相关 toString方法 super 与C++相关[了解的不是很多] 在Java程序中:一个方法以 ; 结尾,并且修饰符列表中有 native ...
- 解锁 SQL Server 2022的时间序列数据功能
解锁 SQL Server 2022的时间序列数据功能 SQL Server2022在处理时间序列数据时,SQL Server 提供了一些优化和功能,比如 DATE_BUCKET 函数.窗口函数(如 ...
- mp实现一个自连接查询
起因是我设置了一个考核表结构,其中包含指标值,指标当前值,是主副指标等列. 后面我要进行考核的验收的时候,我发现验收要取得的是主当前指标值/主指标值以及副指标当前值/副指标值.如果想要让这两条数据一次 ...
- midjourney 入门操作
midjourney 入门操作 settings面板 选择模型 当从 V6 切换到 Niji模型时,Current suffix会添加参数 default V6面板功能介绍 RAW Mode功能 -- ...
- Python获取指定网段正在使用的IP
Python获取指定网段正在使用的IP #!/usr/bin/env python # -*- coding: utf-8 -*- ''''' 使用方法样例 python test20.py 192. ...
- 初看vue3源码
因为工作的原因又回到了vue的领域,需要加深对vue和vue生态的了解 也许平时比较多人手机看别人解析怎么看vue源码的,自己动手看vue源码的还是比较少,这次我想自己动手看看 首先 吧代码获取到本地 ...
- 【ElasticSearch】突破深度分页限制的分页方案
一.场景需求 最近在忙一个新的项目,数据源是ES,但是功能就是对文档进行翻页查询 ES提供了分页查询,就是from + size深度查找,但是使用有限制,只能在1万条内 我和同事的意见是1万条之后的数 ...
- 【DataBase】MySQL 13 分组查询
视频参考自:P59 - P68 https://www.bilibili.com/video/BV1xW411u7ax 分组查询 GROUP BY -- group by 子句 -- 要注意!grou ...
- 【SqlServer】02 SSMS工具基本使用入门
之前的安装中除了SqlServer,还有一个SSMS管理工具 数据库的访问依赖于工具 SSMS提供了两种登陆方式: 创建用户: 删除用户: 创建数据库: 删除数据库: 创建表: 设置表的字段,字段名称 ...
- 【Redis】03 Redis 数据类型、相关补充、常用命令
redis的数据类型 1,概述 使用Redis进行应用设计和开发的一个核心概念是数据类型. 与关系数据库不同,在Redis中不存在需要我们担心的表, 在使用Redis进行应用设计和开发时,我们首先应该 ...