Educational Codeforces Round 166 (Rated for Div. 2) - VP记录

news/2024/10/18 20:03:54/文章来源:https://www.cnblogs.com/jerrycyx/p/18474933

比赛链接

A. Verify Password

挨个判断即可,秒了。

#include<cstdio>
#include<cstring>
using namespace std;const int N=25;
int T,n;
char str[N];bool is_digit(char ch){return ch>='0'&&ch<='9';}
bool is_lowercase(char ch){return ch>='a'&&ch<='z';}bool check()
{for(int i=1;i<n;i++){if(is_lowercase(str[i])&&is_digit(str[i+1])) return false;if(is_lowercase(str[i])&&is_lowercase(str[i+1]) && str[i]>str[i+1]) return false;if(is_digit(str[i])&&is_digit(str[i+1]) && str[i]>str[i+1]) return false;}return true;
}int main()
{scanf("%d",&T);while(T--){scanf("%d%s",&n,str+1);printf("%s\n",check()?"YES":"NO");}
}

B. Increase/Decrease/Copy

因为 \(b\) 的长度只比 \(a\) 的长度大一,所以一定只会复制一次,分以下两种情况讨论:

  • 在将 \(a_i\) 化为 \(b_i\) 的过程中经过了 \(b_{n+1}\),此时只需要额外消耗复制的一次操作次数即可。
  • 没有经过,这时需要找离 \(b_{n+1}\) 最近的来化成它,而这个值只可能是其中一个 \(a_i\)\(b_i\)

对于第二种情况,刚开始做的时候我只记录了全局最大最小值,没有考虑到 \([1,2],[4,5]\) 要变成 \(3\) 这类情况并不是用全局最大最小值来计算,而是以单组最大最小值来计算,所幸很快就改对了。

#include<cstdio>
#include<cmath>
#include<algorithm>
#define int long long
using namespace std;const int N=1e6+5;
int T,n,a[N],b[N];signed main()
{scanf("%lld",&T);while(T--){scanf("%lld",&n);for(int i=1;i<=n;i++) scanf("%lld",&a[i]);for(int i=1;i<=n+1;i++) scanf("%lld",&b[i]);long long ans=0;bool in_range=false;for(int i=1;i<=n;i++){int x=a[i],y=b[i];if(x>y) swap(x,y); //make x<=yans+=y-x;if(x<=b[n+1]&&b[n+1]<=y)in_range=true;}ans++;if(!in_range){int add=0x3f3f3f3f;for(int i=1;i<=n;i++){int x=a[i],y=b[i];if(x>y) swap(x,y); //make x<=yif(b[n+1]<x) add=min(add,x-b[n+1]);if(b[n+1]>y) add=min(add,b[n+1]-y);}ans+=add;}printf("%lld\n",ans);}return 0;
}

C. Job Interview

这道题做的还算顺,就是没开 long long 坑了我好一会,下次要开 long long 的地方一定要第一时间开上,不要想着后面在一个一个改。

在洛谷上发了一篇题解:点击这里。

#include<cstdio>
#include<algorithm>
using namespace std;const int N=2e5+5;
int T,n,m;
int prog[N],test[N];
long long sum_prog[N],sum_test[N],sum_ok[N]; 
int cnt_prog[N],cnt_test[N];
//以上变量含义见题解内容 
//prog(rammer)程序员;test(er)测试员 long long getsum(long long sum[],int l,int r)
{return sum[r]-sum[l-1];
}
int main()
{scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1;i<=n+m+1;i++){scanf("%d",&prog[i]);sum_prog[i]=sum_prog[i-1]+prog[i];}for(int i=1;i<=n+m+1;i++){scanf("%d",&test[i]);sum_test[i]=sum_test[i-1]+test[i];}for(int i=1;i<=n+m+1;i++){cnt_prog[i]=cnt_prog[i-1];cnt_test[i]=cnt_test[i-1];if(prog[i]>test[i]) //这个候选人是预备程序员 {cnt_prog[i]++;sum_ok[i]=sum_ok[i-1]+prog[i];}if(prog[i]<test[i]) //这个候选人是预备测试员 {cnt_test[i]++;sum_ok[i]=sum_ok[i-1]+test[i];}}for(int pos=1;pos<=n+m+1;pos++){int l=0,r=n+m+1+1;while(l+1<r) //[1,l] ok; [r,n+m+1] exceeded{int mid=l+r>>1,prog_now=cnt_prog[mid]; //当前位置以前的预备程序员人数 if(prog[pos]>test[pos] && pos<=mid) prog_now--; //排除当前候选人if(prog_now<=n) l=mid;else r=mid;}int pos_prog=l;l=0,r=n+m+1+1;while(l+1<r) //[1,l] ok; [r,n+m+1] exceeded{int mid=l+r>>1,test_now=cnt_test[mid]; //当前位置以前的预备测试员人数 if(prog[pos]<test[pos] && pos<=mid) test_now--; //排除当前候选人if(test_now<=m) l=mid;else r=mid;}int pos_test=l;long long ans=0;if(pos_prog<pos_test) //程序员先满员,以后所有人只能当测试员 {ans=getsum(sum_ok,1,pos_prog)+getsum(sum_test,pos_prog+1,n+m+1);if(pos<=pos_prog) ans-=max(prog[pos],test[pos]); //排除当前候选人 else ans-=test[pos];}else if(pos_prog>pos_test) //测试员先满员,以后所有人只能当程序员 {ans=getsum(sum_ok,1,pos_test)+getsum(sum_prog,pos_test+1,n+m+1);if(pos<=pos_test) ans-=max(prog[pos],test[pos]); //排除当前候选人else ans-=prog[pos];}else{if(pos_prog==n+m+1) //程序员和测试员数量刚好够 {ans=getsum(sum_ok,1,n+m+1);ans-=max(prog[pos],test[pos]);}else return -1; //为了防止出现意想不到的情况//上面的 if/else 语句可以删去,只保留中间的处理部分 }printf("%lld ",ans);}putchar('\n');}return 0;
}

D. Invertible Bracket Sequences

赛事没做起,赛后补的。

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;const int N=2e5+5,LogN=20;
int T,n;
char str[N];
int sum[N];
vector<int> pos[N];
long long ans=0;namespace ST_Table{int f[N][LogN];
int lg2[N];
void Init(int arr[])
{for(int i=2;i<=n;i++)lg2[i]=lg2[i>>1]+1;for(int i=1;i<=n;i++)f[i][0]=arr[i];for(int k=1;k<=lg2[n];k++)for(int i=1;i+(1<<k-1)-1<=n;i++)f[i][k]=max(f[i][k-1],f[i+(1<<k-1)][k-1]); //[i,i+2^(k-1)-1]|[i+2^(k-1)][i+2^k-1]return;
}
int query(int l,int r)
{int p=lg2[r-l+1];return max(f[l][p],f[r-(1<<p)+1][p]); //[l,l+2^p-1]|[r-2^p+1,r]
}} //namespace ST_Tablevoid ClearData()
{for(int i=1;i<=n;i++)pos[i].clear();ans=0;return;
}int main()
{scanf("%d",&T);while(T--){scanf("%s",str+1);n=strlen(str+1);for(int i=1;i<=n;i++){if(str[i]=='(') sum[i]=sum[i-1]+1;if(str[i]==')') sum[i]=sum[i-1]-1;pos[sum[i]].push_back(i);}ST_Table::Init(sum);for(int left=1;left<=n;left++){int l=left-1,r=n+1;while(l+1<r){int mid=l+r>>1;if(ST_Table::query(left,mid)<=sum[left-1]<<1) l=mid;else r=mid;}int right=l;vector<int> &vp=pos[sum[left-1]];ans+=(upper_bound(vp.begin(),vp.end(),right)-1) //last <=-(lower_bound(vp.begin(),vp.end(),left)) //first >=+1;}printf("%lld\n",ans);ClearData();}return 0;
}

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

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

相关文章

计量经济学(十一)——联立方程模型的估计

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 联立方程模型(Simultaneous Equations Model, SEM)是一类包含多个相互依赖变量的统计模型,用来描述这些变量之间的相互关系。在传统的单一方程模型中,通常…

数据结构与算法 课程随记

数据结构与算法 课程随记因为有时候需要在不同设备编辑同一份文档,本地不太方便了,先在放着博客园比较省事吧。 但是博客园是不是快要四了啊,没事再整一个个人博客吧。 Class https://www.runoob.com/cplusplus/cpp-classes-objects.html大纲 定义成员函数,(无论public/pri…

pve安装后删除local-lvm并把其空间全部分给local

在安装pve的时候,系统默认分配给local的空间非常小,我们可以通过以下方法把local-lvm删除,并将其空间还给local。 在webui的pve节点的磁盘选项中找到LVM-Thin,删除data卷。删除后此处为空。 接着打开终端执行以下命令: lvresize --extents +100%FREE --resizefs pve/root此…

PYNQ Z2 读取xadc外部通道电压

使用XADC 或者JTAG只能读取XADC的内部电压, 而无法读取外部通道的电压 现在使用xsysmon.h库里面的函数进行XADC外部通道的电压 为了方便观察,增加了PL GPIO KEY LED进行观察 1. 配置ZYNQ70002.添加两个axi gpio并进行配置 AXI GPIO0AXI GPIO13. 添加XADC进行配置 这里选择axi l…

10.18 模拟赛

炼石计划 10 月 04 日 NOIP 模拟赛 #8【补题】 - 比赛 - 梦熊联盟 (mna.wang) 复盘 T1 有种 div.2 B 的风格,没秒,想看题。 T2。只判是否无解?\(k \le 100\)?把 \(200\) 个关键连通块拿出来建图跑传递闭包不就做完了。 一遍过大样例?简直不可思议,但还是把 T2 关了吧。 用…

小心!这样分享 B 站视频会暴露身份

已经有被开盒的案例了。‍ 在 2022 年 6 月 10 日 0 点,B 站在视频的网址上加了个参数 ?vd_source=XXXXXXXXXXXXXXX​,如图: ​ 经过网友的测试,这个参数值很可能就是用户 ID 的 hash 值(简单来说就是用户身份),所以如果直接复制网址的话,是有可能被“开盒”的。 ‍ 其…

局部静态变量的初始化观测

局部静态变量的初始化观测//全局变量int global=0x11111;int main(int argc, char* argv[]){ //局部变量 int temp=0x160; global=global+temp; return 0;}6: int global=0x111111;7: int main(int argc, char* argv[])8: {00401010 push …

想玩Steam游戏,但配置太低?ToDesk云电脑一招搞定!

在游戏爱好者的世界里,汇集了许多游戏大作的Steam平台无疑是一座宝库。但对于许多玩家来说,拥有一颗渴望畅玩游戏的心,却常常被低配置的电脑设备所束缚。尤其是面对硬件要求极高的3A大作时,低配置的电脑往往力不从心,卡顿、掉帧等问题让人苦恼不已。但别担心!小编最近发现…

孩子对手机有了渴望,家长该如何应对?ToDesk远程防沉迷

在现代生活中,手机已经成为我们密不可分的生活工具,日常工作社交生活都要靠手机来完成。 但近年来,手机的各类视频游戏等app诱惑在不断加大,导致孩子总是抱着手机不放,家长对此类问题头疼不已。 ToDesk远程控制软件可以另辟蹊径用远程控制软件解决掉孩子手机沉迷问题,只需…

vscode中整合豆包MarsCode编程助手

豆包MarsCode是字节跳动旗下的一款AI工具,最近在刷帖子时看到已经可以在vscode中通过插件安装MarsCode工具,接下来我们来看下操作流程以及使用效果。 第一步:首先需要注册下豆包账号 豆包 MarsCode--智能编码,一触即发! 第二步:打开vscode 后,左侧导航栏上点击扩展,搜索…

E-拼接串

题目: 思路:在已有的数组中寻找符合条件,也就是没有重复数字的子数组,以掩码的对应位的形式来表示当前子数组元素的存在,之后双重循环生成所有子数组,内层循环中,判断当前元素是否存在掩码中,存在则推出,不存在则加入掩码并标记。用另一个循环来更新 sum 数组,使得每…

低空经济如何实现商业化

随着技术的进步和政策的支持,低空经济正逐渐成为推动经济发展的新引擎。低空经济,主要指利用低空空域资源,通过有人驾驶和无人驾驶航空器的低空飞行活动,带动相关领域融合发展的综合性经济形态。当前,低空经济的商业化正面临前所未有的机遇与挑战。 技术突破是基础技术是推…