暑假集训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\)倍祖先的一整子树删 ...
随机推荐
- CF941
A link 其实,只要有第一次,那么下次随意找一个队列里有的数加\(k-1\)个进去,加上队列里那一个删掉\(k\)个,到最后一次肯定是剩\(k-1\)个. 没有第一次,就是\(n\). 点击查看代 ...
- php使用jwt作登录验证
JWT官网 https://jwt.io/ 选择第一个 composer require firebase/php-jwt use Firebase\JWT\ExpiredException;use ...
- mybatisplus实现一次多表联查+分页查询
众所周知,mybatisplus非常好用,但是他不好用就不好用在不可以多表联查.在mybatisplusjoin中提供了联查的方法,那个参数我没看懂Orz 不过,历经千辛万苦,我通过xml终于写出来了 ...
- uniapp打包所需的ios证书和证书profile文件获取的图文教程
使用uniapp进行云打包,可以打包android和ios两种app,但是uniapp官方并不能凭空产生这两种平台所需的打包证书. 那么这两种打包证书又是如何获取呢? android相对简单,使用jd ...
- midjourney 入门操作
midjourney 入门操作 settings面板 选择模型 当从 V6 切换到 Niji模型时,Current suffix会添加参数 default V6面板功能介绍 RAW Mode功能 -- ...
- python运行报警告:Cython directive 'language_level' not set, using '3str' for now (Py3)
相关: https://stackoverflow.com/questions/34603628/how-to-specify-python-3-source-in-cythons-setup-py ...
- 构建人工智能的工具 —— VXscan-R:数字孪生环境软件模块
地址: https://www.creaform3d.com.cn/zh/ji-liang-jie-jue-fang/vxscan-rshu-zi-luan-sheng-huan-jing-ruan- ...
- 易拍照 —— 毕业生图像采集操作指南——如何使用 “易拍照” 微信小程序进行图像采集
易拍照 -- 毕业生图像采集操作指南--如何使用 "易拍照" 微信小程序进行图像采集 ============================================
- 【转载】 【WarpDrive】GPU加速RL: 一块V100运行上千个智能体、数千个环境,这个「曲率引擎」框架实现RL百倍提速
原文地址: https://mp.weixin.qq.com/s/Vw39k2PteEIGLRhmh2raLQ ============================================ ...
- 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编译C++扩展模块!!!
平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和 ...