补题中~

A - Vacation Validation

枚举判定。

时间复杂度\(O(n)\)。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
int n,l,r;
bool solve(){
for(int i=l;i<=r;i++) if(s[i]=='x') return 0;
return 1;
}
signed main(){
cin>>n>>l>>r>>s;
s=' '+s;
cout<<(solve()?"Yes\n":"No\n");
return 0;
}

B - 1D Akari

策略就是对于每一个.的连续段,选且仅选取其中一位置为o

时间复杂度\(O(n)\)。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
bool v=1;
signed main(){
cin>>s;
for(char i:s){
if(i=='.'){
if(v) cout<<"o",v=0;
else cout<<".";
}else{
cout<<"#";
v=1;
}
}
return 0;
}

C - Concat (X-th)

暴力枚举\(K^N\)种选择,然后nth_element或者排序来求第\(x\)小。

时间复杂度\(O(K^N\times N)\)。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,k,x,idx,a[15];
string s[15],t[100010];
void dfs(int pos){
if(pos>k){
idx++;
for(int i=1;i<=k;i++) t[idx]+=s[a[i]];
return;
}
for(int i=0;i<n;i++){
a[pos]=i;
dfs(pos+1);
}
}
signed main(){
cin>>n>>k>>x;
for(int i=0;i<n;i++) cin>>s[i];
dfs(1);
sort(t+1,t+1+idx);
cout<<t[x]<<"\n";
return 0;
}

D - Match, Mod, Minimize 2

据题意,\(A_i,B_i<M\)。

所以对于我们重排的序列,如果记答案初始为\(\sum\limits_{i=1}^n A_i+B_i\),那么如果\(A_i+B_i\ge M\)则额外产生\(-M\)的贡献,否则不产生贡献。

所以我们是要让\(A_i+B_i\ge M\)的数量尽可能多。

因此我们将\(A,B\)排序,两个指针\(p_1,p_2\)分别指向\(A\)的最小值、\(B\)的最大值,匹配成功则都移动,并答案\(-M\),否则仅\(p_1\)移动。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10;
int t,n,m,a[N],b[N];
signed main(){
cin>>t;
while(t--){
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;i++) cin>>a[i],ans+=a[i];
for(int i=1;i<=n;i++) cin>>b[i],ans+=b[i];
sort(a+1,a+1+n),sort(b+1,b+1+n);
for(int i=1,j=n;i<=n;i++)
if(a[i]+b[j]>=m) ans-=m,j--;
cout<<ans<<"\n";
}
return 0;
}

E - Development

看到\(n\)的范围,想到使用Floyd求解,\(f[i][j]\)为\(i,j\)间的最短时间。

询问操作直接对着\(f[][]\)统计就行了。

加边操作也很好实现,每次加边\(O(n^2)\)地利用这条边重新松弛一遍即可。

再考虑建机场的操作。首先想到每建一个机场就和其他机场之间连一条权值为\(T\)的边,然后依次松弛。然而这样是\(O(n^3)\)的,无法接受。

但是这道题有一个很好的特性,就是机场之间构成了一个团(完全子图),意味着任意两个机场之间可以自由来往。所以两点之间的最短路,最多只能坐一次飞机。因为多次飞机一定可以用一次飞机上位替代。

因此我们重新定义\(f\)为不坐飞机的最短路,用\(g[i]\)表示离\(i\)最近的机场的距离,输出\((i,j)\)的答案时,和\(g[i]+g[j]+T\)取一次\(\min\)即可。

时间复杂度\(O(n^3+n^2q)\)。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=501;
int n,m,k,t,q,f[N][N],g[N];
bitset<N> is;
void ap(int u){//在u点建机场
is[u]=1;
for(int i=1;i<=n;i++){
g[i]=min(g[i],f[i][u]);
}
}
signed main(){
cin>>n>>m;
memset(f,0x3f,sizeof f),memset(g,0x3f,sizeof g);
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
f[u][v]=f[v][u]=min(f[u][v],w);
}
for(int i=1;i<=n;i++) f[i][i]=0;
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}
}
}
cin>>k>>t;
for(int i=1,u;i<=k;i++) cin>>u,ap(u);
cin>>q;
int op,x,y,z;
while(q--){
cin>>op;
if(op==1){
cin>>x>>y>>z;
f[x][y]=f[y][x]=min(f[x][y],z);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=min({f[i][j],f[i][x]+f[y][j]+z,f[j][x]+f[y][i]+z});
if(is[j]) g[i]=min(g[i],f[i][j]);
}
}
}else if(op==2){
cin>>x;
ap(x);
}else{
int ans=0,s;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if((s=min(f[i][j],g[i]+g[j]+t))!=f[0][0]) ans+=s;
}
}
cout<<ans<<"\n";
}
}
return 0;
}

官方题解的思路是额外创建一个\(0\)号节点,任意机场到\(0\)号节点有一条权值为\(T\)的边,\(0\)号节点到任意机场有一条权值为\(0\)的边。这样建一个机场就相当于两次加边操作了。

F - Paint Tree 2

G - Concat (1st)

[题解]AtCoder Beginner Contest 416(ABC416) A~E的更多相关文章

  1. 题解 AtCoder Beginner Contest 168

    小兔的话 欢迎大家在评论区留言哦~ AtCoder Beginner Contest 168 A - ∴ (Therefore) B - ... (Triple Dots) C - : (Colon) ...

  2. [题解] Atcoder Beginner Contest ABC 270 G Ex 题解

    点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...

  3. [题解] Atcoder Beginner Contest ABC 265 Ex No-capture Lance Game DP,二维FFT

    题目 首先明确先手的棋子是往左走的,将其称为棋子1:后手的棋子是往右走的,将其称为棋子2. 如果有一些行满足1在2右边,也就是面对面,那其实就是一个nim,每一行都是一堆石子,数量是两个棋子之间的空格 ...

  4. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  5. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  6. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

  7. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  8. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  9. AtCoder Beginner Contest 173 题解

    AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...

  10. AtCoder Beginner Contest 172 题解

    AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...

随机推荐

  1. Intellij IDEA 设置JDK版本

    问题描述: 项目JDK版本不对 如果项目JDK版本不兼容,在编译或者启动项目的时候抛出如下异常提示信息: Error:(29, 34) java: -source 1.7 中不支持 lambda 表达 ...

  2. 洛谷 P3201 [HNOI2009] 梦幻布丁

    洛谷 P3201 [HNOI2009] 梦幻布丁 祭我AC的第十道紫题. 听了一下午的 才调出来. 题意分析 洛谷传送门 给一个序列a,有两种操作-- 1 x y将序列中所有x全部变成y 2查询当前序 ...

  3. Antd VUE中table子表同时只展开一个子信息的说明

    前言 在网上搜索了很久,很多方法都不太好用,不过经过整理发现,有一个方式是最简单的,比网路上那些copy粘贴的千篇一律的错来说,其实真正的使用方式很简单 想必大家要实现的效果都是上图这样的 <t ...

  4. 解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)

    1. 引言 在上一篇文章<使用Vditor将Markdown文档渲染成网页(Vite+JS+Vditor)>中,详细介绍了通过Vditor将Markdown格式文档渲染成Web网页的过程, ...

  5. 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第三周作业

    [中文][吴恩达课后编程作业]Course 4 - 卷积神经网络 - 第三周作业 - 车辆识别 上一篇:[课程4 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:[课程4 - 第四周测验] ...

  6. SpringBoot模板一

    SpringBoot模板一 SpringBoot员工管理系统 用到的技术: Version1 JDBC MySQL SSM thymeleaf lombok shiro WebSocket Swagg ...

  7. SAP的PI日志查看工具

    被很多人吐槽的SAP PI能坚挺的活下来,真是不容易... SXI_MONITOR是PI的标准的消息查看器,如果又权限的话,甚至可以做自定义字段的查询增强(如果对单据创建接口,增加单号...速度杠杠的 ...

  8. StarRocks 物化视图创建与刷新全流程解析

    最近在为 StarRocks 的物化视图增加多表达式支持的能力,于是便把物化视图(MV)的创建刷新流程完成的捋了一遍. 之前也写过一篇:StarRocks 物化视图刷新流程和原理,主要分析了刷新的流程 ...

  9. C# Model对象转DataTable

    https://blog.csdn.net/a11112244444/article/details/78921200 https://www.cnblogs.com/chongde/articles ...

  10. nestjs微信小程序登录授权

    前言 nestjs官方文档是英文,太难搞了,摸索了两天 ,把经验记下来. 以后备用 目录结构 |--src //项目根目录 |--modules // 模块 比如用户模块,商品模块 |--app // ...