2024暑假集训测试13

news/2024/9/8 11:19:32/文章来源:https://www.cnblogs.com/Charlieljk/p/18327165

前言

  • 比赛链接。

image

从来没见过交互题,T1 狂 CE 不止心态炸了,后面的题也没打好,T2、T3 简单题都不会了,所以为啥 T4 又放黑题。

T1 大众点评

  • 原题:AT_joisc2014_d。

难点主要在交互,赛时琢磨了半场比赛终于搞明白是啥玩意儿了,可以将给定库当成压缩的一部分代码,可以调用里面的函数,输入输出已在里面,因为里面有主函数了,本地不能再打主函数了。

两两配对,大的加入 \(\max\) 集合,小的加入 \(\min\) 集合,再分别扫,共需要 \(n+\dfrac{n}{2}\) 次。

点击查看代码
#include "ramen.h"
#include<bits/stdc++.h>
#define ll long long 
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=1e5+10;
template<typename Tp> inline void read(Tp&x)
{x=0;register bool z=true;register char c=getchar();for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);x=(z?x:~x+1);
}
template<typename Tp> inline void wt(Tp x)
{if(x>9)wt(x/10);putchar((x%10)+'0');}
template<typename Tp> inline void write(Tp x)
{if(x<0)putchar('-'),x=~x+1;wt(x);}
void Ramen(int N)
{if(N==1) {Answer(0,0); return ;}vector<int>mx,mi;int maxx=0,minn=0;for(int i=1;i<=N-1;i+=2){if(Compare(i-1,i)==1){mx.push_back(i-1);mi.push_back(i);maxx=i-1,minn=i;}else {mx.push_back(i);mi.push_back(i-1);maxx=i,minn=i-1;}}for(int i:mx) if(i!=maxx) if(Compare(i,maxx)==1) maxx=i;for(int i:mi) if(i!=minn) if(Compare(i,minn)==-1) minn=i;if(!((N-1)&1)) {if(Compare(N-1,maxx)==1) maxx=N-1;else if(Compare(N-1,minn)==-1) minn=N-1;}Answer(minn,maxx);
}

T2 录取查询

  • 原题:[ABC285F] Substring of Sorted String 。

赛时心态崩了这么简单的题都没想出来。

结论就是需满足区间单调不下降且 \(s_l+1\sim s_r-1\) 之间的字符集在这个区间出现次数等于全局出现次数,线段树维护即可,复杂度 \(O(26n\log_n)\)

点击查看代码
#include<bits/stdc++.h>
#define ll long long 
#define endl '\n'
#define sort stable_sort
#define f t[p]
#define ls p<<1
#define rs p<<1|1
using namespace std;
const int N=1e5+10;
template<typename Tp> inline void read(Tp&x)
{x=0;register bool z=true;register char c=getchar();for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);x=(z?x:~x+1);
}
template<typename Tp> inline void wt(Tp x)
{if(x>9)wt(x/10);putchar((x%10)+'0');}
template<typename Tp> inline void write(Tp x)
{if(x<0)putchar('-'),x=~x+1;wt(x);}
int n,m,cnt[N];
char s[N],tt;
struct aa 
{int l,r,val[30],pre,suf;bool flag;
}t[N<<2];
void pushup(int p)
{for(int i=0;i<=25;i++)f.val[i]=t[ls].val[i]+t[rs].val[i];f.flag=(t[ls].flag&&t[rs].flag&&t[rs].pre>=t[ls].suf);f.pre=t[ls].pre;f.suf=t[rs].suf;
}
void build(int p,int l,int r)
{f.l=l,f.r=r;if(l==r){f.val[s[l]-'a']++;f.pre=f.suf=s[l]-'a';f.flag=1;return ;}int mid=(l+r)>>1;build(ls,l,mid),build(rs,mid+1,r);pushup(p);
}
void change(int p,int x,int d)
{if(f.l==f.r){f.val[s[x]-'a']+=d;f.pre=f.suf=s[x]-'a';f.flag=1;return ;}int mid=(f.l+f.r)>>1;if(x<=mid) change(ls,x,d);else change(rs,x,d);pushup(p);
}
aa ask(int p,int l,int r)
{if(l<=f.l&&r>=f.r) return f;int mid=(f.l+f.r)>>1;aa ans;if(r<=mid) ans=ask(ls,l,r);else if(l>mid) ans=ask(rs,l,r);else if(l<=mid&&r>mid){aa x=ask(ls,l,r),y=ask(rs,l,r);for(int i=0;i<=25;i++)ans.val[i]=x.val[i]+y.val[i];ans.flag=(x.flag&&y.flag&&y.pre>=x.suf);ans.pre=x.pre,ans.suf=y.suf;}return ans;
}
signed main()
{read(n); cin>>(s+1);for(int i=1;i<=n;i++) cnt[s[i]-'a']++;build(1,1,n);read(m);for(int i=1,op,x,y;i<=m;i++){read(op),read(x);if(op==1){cin>>tt;cnt[s[x]-'a']--; change(1,x,-1);s[x]=tt;cnt[s[x]-'a']++; change(1,x,1);}else{read(y);aa ans=ask(1,x,y);bool flag=ans.flag;if(flag) for(int i=s[x]-'a'+1;i<=s[y]-'a'-1;i++)if(ans.val[i]!=cnt[i]){flag=0;break;}puts(flag?"Yes":"No");}}
}

T3 精准打击

  • [ABC290G] Edge Elimination 。

是道紫但实际没那么难,比较平凡的贪心,因为 \(d\) 很小可以暴力枚举,赛时根本没时间想。

枚举深度 \(d\),即一棵深度为 \(d\) 的子树,贪心的角度一定是从大往小拿,将 \(d-1\) 层能拿的都拿了接着向下递归即可,最后取最小值。

点击查看代码
#include<bits/stdc++.h>
#define ll long long 
#define endl '\n'
#define sort stable_sort
#define f t[p]
#define ls p<<1
#define rs p<<1|1
using namespace std;
const int N=1e5+10;
template<typename Tp> inline void read(Tp&x)
{x=0;register bool z=true;register char c=getchar();for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);x=(z?x:~x+1);
}
template<typename Tp> inline void wt(Tp x)
{if(x>9)wt(x/10);putchar((x%10)+'0');}
template<typename Tp> inline void write(Tp x)
{if(x<0)putchar('-'),x=~x+1;wt(x);}
ll T,d,k,x,a[N];
signed main()
{read(T);while(T--){read(d),read(k),read(x);a[0]=1;for(int i=1;i<=d;i++) a[i]=a[i-1]*k+1;ll ans=1e18;for(int i=d;i>=0;i--){if(a[i]>=x){ll sum=!(i==d);for(ll y=a[i]-x,j=i-1;y>0&&j>=0;j--){sum+=y/a[j];y%=a[j];}ans=min(ans,sum);}else break;}write(ans),puts("");}
}

T4 你画我猜

  • 原题:P4459 [BJOI2018] 双人猜数游戏。

总结

有点难受心态炸了,就纯心态问题了,这次和身体没关系,硬磕交互了,但是不去磕除了能把 T2 切掉 T3 好好想想还能干什么呢,交互早晚要学,挂一次印象更深刻嘛,命中注定吧。

心态需要磨炼但还是有点难受,至少最近几次没挂这么狠过,但后面的甚至赛场上要是还这样怎么办呢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51nod-3976-最长序列

https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338 https://class.51nod.com/Html/Textbook/Problem.html#problemId=3976&textbookChapterId=725 LIS是符号只有大于或小于,所以这道题就是LIS问题。 状态设计同LIS,由于答案就是…

Spring 常用的三种拦截器详解

在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。前言 在开发过…

Lambda、LINQ

1.Lambda表达式的使用示例如下:2.Linq示例:

并发容器

Java 的并发集合容器提供了在多线程环境中高效访问和操作的数据结构。这些容器通过内部的同步机制实现了线程安全,使得开发者无需显式同步代码就能在并发环境下安全使用,比如说:ConcurrentHashMap、阻塞队列和 CopyOnWrite 容器等。 java.util 包下提供了一些容器类(集合框…

win10运行交互题

这是题目给的 题目要求输入的编译命令g++ -O2 -o grader grader.cpp ramen.cpp 在\(DEV\)下是运行不了的 系统的\(CMD\)也是不行的 但我们可以用\(DEV\)中的\(system\)函数运行 int main() {system("g++ -O2 -o grader grader.cpp ramen.cpp"); return 0; }运行前在\…

15、flask-模型-models-表的操作-分页paginate()

paginate()的属性属性名 说明items 返回当前页的内容列表has_next 是否还有下一页has_prev 是否还有上一页next(error_out=False) 返回下一页的pagination对象prev(error_out=False) 返回上一页的Pagination对象page 当前页的页码pages 总页数per_page 每页显示的数量prev_num …

01-从WordCount程序理解Spark术语及术语间的关系

1. 应用程序(Application) 通过下面的代码设置应用程序名称,设置后再UI中可以看到相应的名称。 //1.设置Application的名称 val conf = new SparkConf() conf.setAppName("WordCount") conf.setMaster("local")2. Job Job由scala的执行算子生成,每个执…

leetcode-5

题目: 给你一个字符串 s,找到 s 中最长的 回文子串 示例 1:输入:s = "babad"  输出:"bab"  解释:"aba" 同样是符合题意的答案。 示例 2:输入:s = "cbbd"   输出:"bb" 提示: 1 <= s.length <= 1000…

Uniapp 之手写签名

一、效果图二、代码示例 qianming.jsexport const qianming = {data() {return {windowWidth: 0,pixelRatio: 0,context: null,points: [],oldPoints: [],qm_width: 280,qm_height: 120,qm_img: }},methods: {qm_start() {const systemInfo = uni.getSystemInfoSync()this.wind…

代码随想录day11 || 150 逆表达式求值 239 滑动窗口最大值 347 前k最高频元素

150 逆波兰表达式计算func evalRPN(tokens []string) int {// 自己想是真的想不出来,看了视频之后有了思路// 本质上逻辑就是遇到数字入栈,遇到运算符号 出栈两个元素然后计算再入栈,最终就是计算结果stack := Constructor()for _, val := range tokens{// 如果数字入栈if i…

计算机组成与体系结构-校验码

奇偶校验码 奇偶校验是一种简单有效的校验方法,这种方法通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),只能发现奇数个数据位 出错的情况.循环冗余校验码 CRC(Cyclic RedundancyCheck)循环冗余校验是一种常用的错误检测技术,用于在数据传输…

CAD快捷键命令大全(最全)

勇者无惧,强者无敌。