Atcoder Beginner Contest 379 (A-F)

news/2024/11/14 19:46:03/文章来源:https://www.cnblogs.com/showball/p/18546646

Atcoder Beginner Contest 379 (A-F)

题目链接

A - Cyclic

#include<bits/stdc++.h>using namespace std;using i64=long long;void Showball(){char a,b,c;cin>>a>>b>>c;cout<<b<<c<<a<<" "<<c<<a<<b<<"\n"; 
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t=1;//cin>>t;while(t--){Showball();}return 0;
}

B - Strawberries

#include<bits/stdc++.h>using namespace std;using i64=long long;void Showball(){int n,k;cin>>n>>k;string s;cin>>s;int ans=0;for(int i=0,j=0;i<n;){while(j<n&&s[j]==s[i]) j++;if(s[i]=='O') ans+=(j-i)/k;i=j; } cout<<ans<<"\n";
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t=1;//cin>>t;while(t--){Showball();}return 0;
}

C - Sowing Stones

对比其余 \(C\) 题,算是有点难度的。首先如果棋子之和不等于 \(n\) ,或者最小的 \(x_i\) 不为 \(1\) ,那么无解。

因为每个棋子只能往后移动,因此我们直接贪心往后放即可。相邻的 \(x_i\) 之间的都需要移动,发现贡献是一个等差数列。

直接求即可。如果数量不够,说明无解。多的棋子直接给下一个 \(x_i\) ,注意这部分也要算贡献。最后判断一下棋子有没有剩余即可。

#include<bits/stdc++.h>using namespace std;using i64=long long;void Showball(){int n,m;cin>>n>>m;vector<pair<int,int>> a(m+1);for(int i=0;i<m;i++) cin>>a[i].first;i64 sum=0;    for(int i=0;i<m;i++) {int x;cin>>x;sum+=x;a[i].second=x;}a[m].first=n+1;sort(a.begin(),a.end());if(sum!=n||a[0].first!=1) return cout<<"-1\n",void();i64 ans=0;for(int i=0;i<m;i++){a[i].second--;int d=a[i+1].first-a[i].first-1;if(a[i].second<d) return cout<<"-1\n",void();ans+=1LL*d*(d+1)/2;if(a[i].second>d){a[i+1].second+=(a[i].second-d);ans+=1LL*(a[i].second-d)*(a[i+1].first-a[i].first);}}if(a[m].second) ans=-1;cout<<ans<<"\n";
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t=1;//cin>>t;while(t--){Showball();}return 0;
}

D - Home Garden 思维

因为只有全局加操作,因此我们可以使用类似懒标记的思想,将所有的加操作加到标记上,那么插入一个新花盆的时候,我们可以赋初值为 \(-sum\) 。然后维护好单调性,有多少个大于 \(h\) 我们直接二分即可。

#include<bits/stdc++.h>using namespace std;using i64=long long;void Showball(){int q;cin>>q;int hh=q,tt=q;vector<i64> a(q);i64 sum=0;while(q--){int op;cin>>op;if(op==1){a[--hh]=-sum;}else if(op==2){int t;cin>>t;sum+=t;}else{int h;cin>>h;int p=lower_bound(a.begin()+hh,a.begin()+tt,h-sum)-(a.begin()+hh);cout<<tt-hh-p<<"\n";tt=hh+p;}}
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t=1;//cin>>t;while(t--){Showball();}return 0;
}

E - Sum of All Substrings

经典的拆分算贡献的题目,我们发现每一位数字的贡献为 \(i\times a_i \times(10^0+10^1+...+10^{n-i})\)

等差数列求和即可。但是本题数据范围很大,要用高精度,复杂难写。我们可以用数组存取每一位的系数,

那么每次操作,就相当于区间加上一个系数,用差分解决即可。最后模拟处理一下进位即可。

#include<bits/stdc++.h>using namespace std;using i64=long long;void Showball(){int n;cin>>n;string s;cin>>s;s="?"+s;vector<i64> a(500010);for(int i=1;i<=n;i++){int x=n-i+1,y=i*(s[i]-'0');a[1]+=y;a[x+1]-=y;}for(int i=1;i<=n;i++) a[i]+=a[i-1];i64 k=0;for(int i=1;i<=n;i++){a[i]+=k;k=a[i]/10;a[i]%=10;}int cnt=n;while(k){a[++cnt]=k%10;k/=10;}for(int i=cnt;i;i--) cout<<a[i];
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t=1;//cin>>t;while(t--){Showball();}return 0;
}

F - Buildings 2

首先我们可以知道:\(l\) 能够看到的建筑物 \(r\) 一定能够看到, \(r\) 能够看到的建筑物 \(l\) 不一定能够看到。

因此想要找 \(l,r\) 都能够看到的建筑物,只需要去找 \(l\) 能够看到的建筑物中位置在 \(r\) 右边的即可。

考虑离线,将询问按照左端点进行分类。每个位置能够看到的建筑物,我们可以倒着维护一个单调队列。

然后在这个单调队列上进行二分即可。

#include<bits/stdc++.h>using namespace std;using i64=long long;void Showball(){int n,q;cin>>n>>q;vector<int> h(n+1);vector<array<int,2>> Q[n+1];for(int i=1;i<=n;i++) cin>>h[i];for(int i=1;i<=q;i++){int l,r;cin>>l>>r;Q[l].push_back({r,i});}  vector<int> st(n+1),ans(q+1);int cnt=0;for(int i=n;i;i--){for(auto [j,id]:Q[i]){int l=1,r=cnt;while(l<r){int mid=l+r+1>>1;if(st[mid]>j) l=mid;else r=mid-1;}if(st[l]<=j) ans[id]=0;else ans[id]=l;}while(cnt&&h[st[cnt]]<h[i]) cnt--;st[++cnt]=i;}for(int i=1;i<=q;i++) cout<<ans[i]<<"\n";
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t=1;//cin>>t;while(t--){Showball();}return 0;
}

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

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

相关文章

centOS7 docker 安装步骤

一、安装前检查工作: 1.检查/etc/yum.repos.d/CentOS-Base.repo文件是否存在,如果不存在,从网络仓库中复制一份新的 CentOS-Base.repo 文件。 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 或者使用 wget: sudo wget -O /…

k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储

目录docker registry 部署生成 htpasswd 文件生成 secret 文件生成 registry 配置文件创建 service创建 statefulset创建 ingress验证 docker registrydocker registry 监控docker registry uidocker registry dockerfile docker registry 配置文件 S3 storage driver registry…

[68] (炼石计划) NOIP 模拟赛 #20

学了一个挺帅的 MerMaid 所以用一下 flowchart TBA(邻间的骰子之舞)style A color:#ffffff,fill:#00c0c0,stroke:#ffffff 考虑每次复制以后一定会粘贴若干次(大于零,否则没有意义),因此将复制粘贴捆绑起来考虑,设复制后连续粘贴了 \(m\) 次,则代价为 \(x+my\),贡献为让编…

团队项目Scrum冲刺-day4

一、每天举行站立式会议 站立式会议照片一张昨天已完成的工作成员 任务陈国金 用户模块接口开发凌枫 整合MD编辑器陈卓恒 完成管理题目页面谭立业 完成题目搜索页面廖俊龙 接口测试曾平凡 前端页面测试曾俊涛 完成题目模块接口开发薛秋昊 完成题目提交模块接口开发今天计划完成…

【闲话】先觉

题图太大了,遂放到里面了能 窥探 到未来的 命运 又怎样? 不愿向 命运 屈服,自以为一次次地“战胜” 命运 后却不知一切都是 命运 早就 安排 好的。亦或是他即是 命运 的代理人。 不久后的 毁灭 已成为他的梦魇,面对好友的一个个离去他 无能为力 ,只好请求 那位大人 伸出援…

团队作业4——项目冲刺-4

团队作业4——项目冲刺-4信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 在七天敏捷冲刺中,完成工大严选开发,记录每日进展和问题,更新燃尽图、签入代码,并发布集合日志总结成果GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗…

MX 2025--炼石计划 NOIP 模拟赛 #20

斥责打得抽象。T3,T4放俩难的板子。由于是MX的题,就不放题意了。 邻间的骰子之舞 发现复制操作不会超过\(64\)次,而粘贴操作肯定是越均匀越好,直接二分暴力跑就行了。点此查看代码 #include<bits/stdc++.h> using namespace std; #define rep(i,s,t,p) for(int i = s;…

EBS:物料搬运单查看人限制(创建人栏位)

EBS:物料搬运单查看人限制(创建人栏位)Applies to:Oracle Inventory Management - Version: 11.5.9 to 12.0.0 - Release: 11.5 to 12.2Information in this document applies to any platform.FORM:INVTOMAI.FMB - Response CenterSymptomsIn the Move Orders form (INVTOMA…

实景三维赋能智慧公安建设

在新型智慧城市建设的大潮中,智慧公安作为关键一环,对于提高城市安全和治理效率具有重要意义。实景三维技术以其独特的优势,为智慧公安建设提供了强有力的支撑。本文将探讨实景三维技术如何赋能智慧公安建设。一、智慧公安建设的重要性智慧公安是利用现代信息技术,实现对城…

OpenAI模型whisper 音频转文本

最近有一个音频转文本的需求,了解到了OpenAI的whisper模型可以实现。 Whisper 是 OpenAI 提供的一个通用语音识别模型,支持多语言的音频转文本功能,并具有较高的准确性。它的主要用途包括自动语音识别 (ASR)、语言翻译(将音频直接翻译成英文文本)等。Whisper 支持将长时间…

想定制RK3562主板Android系统的开机动画和桌面壁纸吗?看这篇文章就够了

本文介绍瑞芯微RK3562开发板在安卓Android13系统替换开机动画和桌面壁纸的方法,使用触觉智能EVB3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1T算力 NPU,可用于轻量级人工智能应用。 开机动画替换 将做好的开机动画文件bootanimation.zip包拷贝至 vendor/roc…

mysql可视化工具 Navicat Premium 12解压版

通过网盘分享的文件:Navicat Premium 12解压版.rar链接: https://pan.baidu.com/s/1kDLlrcaiQRYGLfN5L-IpPA?pwd=3k6h 提取码: 3k6h --来自百度网盘超级会员v8的分享1.解压到指定路径 2.快捷方式,快捷方式用不了,就直接在该文件中直接打开 3. 测试链接