暑假集训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\)倍祖先的一整子树删 ...
随机推荐
- 仓颉编程语言技术指南:嵌套函数、Lambda 表达式、闭包
本文分享自华为云社区<[华为鸿蒙开发技术]仓颉编程语言技术指南[嵌套函数.Lambda 表达式.闭包]>,作者:柠檬味拥抱. 仓颉编程语言(Cangjie)是一种面向全场景应用开发的通用编 ...
- Microsoft Dynamics CRM 插件被限制2分钟超时解决方案
背景: 在隔离模式"沙箱"中运行的插件或自定义工作流活动将有2分钟的硬限制.如果你的插件很复杂,需要超过2分钟,有一些解决方法. CRM on premise (本地版) 选择插件 ...
- 【Oracle】SQL笔记
与MySQL的区分 https://www.cnblogs.com/bailing80/p/11440927.html 获取当前系统时间 -- 查询当前系统时间,DUAL为一张临时表 SELECT S ...
- 【Docker】07 部署挂载本地目录的Tomcat
1.拉取Tomcat镜像: docker pull tomcat:9.0.37 2.创建并运行Tomcat容器: 挂载容器的webapps目录到本机(宿主机)自己设置的目录 docker run -d ...
- ComfyUI插件:ComfyUI layer style 节点(三)
前言: 学习ComfyUI是一场持久战,而ComfyUI layer style 是一组专为图片设计制作且集成了Photoshop功能的强大节点.该节点几乎将PhotoShop的全部功能迁移到Comf ...
- AI围棋项目:KataGo
网站地址: https://katagotraining.org/ 项目地址: https://github.com/lightvector/KataGo
- 有没有使用过MindSpore的,体验怎么样啊?
看到了一个帖子: https://www.zhihu.com/question/386352303/answer/3160948468 ================================ ...
- deepin国产操作系统 nvidia-docker2 的安装
====================================== 平时偶尔使用deepin系统,突然有个 nvidia-docker 的程序需要运行,平时工作都是在用Ubuntu,所以对d ...
- Long Way to be Non-decreasing 题解
前言 题目链接:洛谷:CF. 题意简述 yzh 喜欢单调不降序列. 她有一个序列 \(a\),最初为 \(a_1, \ldots, a_n\),其中每个元素都在 \([1, m]\) 内. 她希望使序 ...
- Java数组小白版
一.数组概念 一.数组定义 数组就是指在计算机内存中开辟的连续存储空间,用于存放程序运行中需要用到的一组相同类型数据的容器. 二.数组的声明 +数组的长度 定义数组时需要确定数组的长度(元素的个数), ...