AtCoder Beginner Contest 417 (A-E题解)
总体总结
A,B题纯模拟
C题 公式一步转换
D题 五题里面最难的,dp预处理+二分
E题 排序+BFS
题解
A题 A Substring
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int t,n;
int a,b;
string s;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>a>>b;
cin>>s;
for(int i=a;i<n-b;i++)
{
cout<<s[i];
}
cout<<endl;
return 0;
}
B题 Search and Delete
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
int t,n,m;
int a[N];
int b[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<m;i++)cin>>b[i];
sort(b,b+m);
int cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]==b[cnt])a[i]=0,cnt++;
else
{
while(cnt<m&&a[i]>b[cnt])cnt++;
if(cnt<m&&a[i]==b[cnt])a[i]=0,cnt++;
}
if(cnt==m)break;
}
for(int i=0;i<n;i++)
{
if(a[i]!=0)cout<<a[i]<<' ';
}
return 0;
}
C题 Distance Indicators
\]
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int t,n;
int a[N];
int cnt[2*N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
ll ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
int x = i - a[i];
if(x>=1&&cnt[x])ans+=cnt[x];
cnt[i+a[i]]++;
}
cout<<ans<<endl;
return 0;
}
D题 Takahashi's Expectation
首先dp预处理,dp[i][j]表示在第i个礼品时候的心情为j时,最后的心情是多少
然后用lower_bound(),求出什么时候mood小于前缀和presum,然后根据求出的位置,进行计算,如果求出,位置在结尾之后,说明一开始的心情过高,最后答案就是mood-presum[n]
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;
typedef long long ll;
int t,n;
int p[N],a[N],b[N];
int presum[N];
int dp[N][1001];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>p[i]>>a[i]>>b[i];
presum[i]=presum[i-1]+b[i];
}
for(int i=0;i<=1000;i++)dp[n+1][i]=i;
for(int i=n;i>=1;i--)
{
for(int j=0;j<=1000;j++)
{
if(j>p[i])
{
dp[i][j]=dp[i+1][max(0,j-b[i])];
}
else
{
dp[i][j]=dp[i+1][j+a[i]];
}
}
}
int q;
cin>>q;
while(q--)
{
int x;
cin>>x;
int mid = lower_bound(presum+1,presum+n+1,x-500)-presum;
if(mid==n+1)
{
cout<<x-presum[n]<<endl;
}
else
{
cout<<dp[mid][x-presum[mid-1]]<<endl;
}
}
return 0;
}
E题 A Path in A Dictionary
每次先把所有节点的边进行从小到大排序,然后bfs遍历每一个点,时间复杂度为O(n),求出字典序最小的路径
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int t,n;
int m,x,y;
bool flag = false;
bool vis[1001];
vector<ll>res;
vector<ll>graph[1001];
void dfs(int cur)
{
if(flag)return;
if(cur==y)
{
for(int i=0;i<res.size();i++)cout<<res[i]<<' ';
cout<<endl;
flag = true;
return ;
}
for(auto it:graph[cur])
{
if(vis[it])continue;
res.push_back(it);
vis[it]=true;
dfs(it);
res.pop_back();
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
flag =false;
memset(vis,false,sizeof(vis));
cin>>n>>m>>x>>y;
for(int i=1;i<=1000;i++)graph[i].clear();
for(int i=1;i<=m;i++)
{
int f,t;
cin>>f>>t;
graph[f].push_back(t);
graph[t].push_back(f);
}
for(int i=1;i<=n;i++)sort(graph[i].begin(),graph[i].end());
vis[x]=true;
res.push_back(x);
dfs(x);
res.clear();
}
return 0;
}
AtCoder Beginner Contest 417 (A-E题解)的更多相关文章
- AtCoder Beginner Contest 238 A - F 题解
AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...
- AtCoder Beginner Contest 221 A~E题解
目录 A - Seismic magnitude scales B - typo C - Select Mul D - Online games E - LEQ 发挥比较好的一场,就来搓篇题解. F ...
- AtCoder Beginner Contest 215 F题题解
F - Dist Max 2 什么时候我才能突破\(F\)题的大关... 算了,不说了,看题. 简化题意:给定\(n\)个点的坐标,定义没两个点的距离为\(min(|x_i-x_j|,|y_i-y_j ...
- AtCoder Beginner Contest 213 F题 题解
F - Common Prefixes 该题也是囤了好久的题目了,看题目公共前缀,再扫一眼题目,嗯求每个后缀与其他后缀的公共前缀的和,那不就是后缀数组吗?对于这类问题后缀数组可是相当在行的. 我们用后 ...
- AtCoder Beginner Contest 154 题解
人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...
- AtCoder Beginner Contest 153 题解
目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...
- AtCoder Beginner Contest 177 题解
AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
随机推荐
- lambdo表达式
************************************************************************* 原作者:ioriogami 原文:https://b ...
- Faray 数列问题
首先,Farey 数列 \(F_n\) 表示分母不超过 \(n\) 的所有既约真分数按大小顺序排列的集合,形式化来说 \[F_n = \left\{\frac{p}{q} \bigg\vert 0 & ...
- @FeignClient注解配置局部超时时间、OkHttp长连接和SocketTimeoutException异常解决办法
问题描述:open feign配置OKhttp调用远程API,连续调用次数较少时,一切正常,次数非常多时(例如,连续请求600次)就抛出java.net.SocketTimeoutException: ...
- 【面试题】synchronized和Lock锁的区别
synchronized是java内置关键字,是在JVM层面实现的:Lock是java的一个接口,是通过代码实现的,为具体的java类(java.util.concurrent.locks.Lock) ...
- 【MySQL】字符串截取函数substring_index
业务场景描述:如何根据分隔符切割字符串?使用函数SUBSTRING_INDEX()根据指定分隔符切割,分隔符可以是字符串等. 语法:substring_index(str,delim,count) 说 ...
- Java面试题:浅谈Spring Bean的生命周期
摘要:如果熟悉Spring 中 Bean的生命周期,可以加深对Spring的认知,故综述一下Bean的生命周期. 前言 Spring中Bean的生命周期是找工作的时候会被问到的高频面试题,主要用于 ...
- linux系统自定义登录提示信息
centos7配置说明 这里对于centos7.x系统,可以直接编辑/etc/motd文件,增加定制的提示信息,并可以通过不同颜色展示. vim /etc/motd ^[[32m 设备IP地址: 10 ...
- 绘画应用当中的Midjourney和Diffusion有何区别?
本文由 ChatMoney团队出品 Midjourney与Stable Diffusion:对比分析 1. 易用性与部署 Midjourney: 在线操作:Midjourney的最大优势在于其无需下载 ...
- String在内存中如何分布
一.设计思想及原理 设计思想 1.字符串分配和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能. 2.JVM为了提高性能和减少内存开销 ...
- 性能比对 - C# 中 WaitForExit 卡死,当 Process.Start 调用 FFMPEG 解码 高清视频 时出现
目的 这篇文章的意义,不在于解决问题本身,因为这次问题发生在一种错误的使用条件之下,但是在这个过程中发现了一些有趣的现象,有一些感悟,进行记录. 插入几句话:运行在客户端的CS架构的软件,比WBE网页 ...