AtCoder Beginner Contest 277 题解
掉大分力(悲
A - ^{-1}
直接模拟。
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
int n,a[200005],x,ans;
signed main(){
IOS;TIE;
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==x) ans=i;
}
cout<<ans<<endl;
return 0;
}
B - Playing Cards Validation
直接判断即可。判重的话搞个 \(\text{map}\) 就好。
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
int n,fl;
map<string,bool> mp;
string s;
signed main(){
IOS;TIE;
cin>>n;
while(n--){
cin>>s;
if(mp[s]) fl=1;
mp[s]=1;
if(s[0]!='H'&&s[0]!='D'&&s[0]!='C'&&s[0]!='S'){
fl=1;
}
if(s[1]!='A'&&s[1]!='J'&&s[1]!='Q'&&s[1]!='K'&&s[1]!='T'&&!(s[1]>='2'&&s[1]<='9')){
fl=1;
}
}
cout<<(fl?"No":"Yes")<<endl;
return 0;
}
C - Ladder Takahashi
考虑用 \(\text{map}\) 进行离散化,同时记下每个楼层离散化之前的值,然后就可以建图跑 \(\text{DFS}\) 了。
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
int n,u,v,ans=1,tot=1,val[200005];
map<int,int> mp;
vector<int> a[200005];
bool vis[200005];
void dfs(int x){
for(int i=0;i<a[x].size();i++){
int tmp=a[x][i];
if(!vis[tmp]){
ans=max(ans,val[tmp]);
vis[tmp]=1;
dfs(tmp);
}
}
}
signed main(){
IOS;TIE;
cin>>n;
mp[1]=1;
for(int i=1;i<=n;i++){
cin>>u>>v;
if(!mp[u]) mp[u]=++tot,val[tot]=u;
if(!mp[v]) mp[v]=++tot,val[tot]=v;
a[mp[u]].push_back(mp[v]);
a[mp[v]].push_back(mp[u]);
}
vis[1]=1;
dfs(1);
cout<<ans<<endl;
return 0;
}
D - Takahashi's Solitaire
实际上就是求排序后最大连续整数段和。但是有一个取模的条件,也就是说可以是 \(m-2,m-1,0,1,2,\dots\) 这样的一段,所以考虑复制一遍排序后的数组。同时末尾放一个未出现数,防止最后一段取不到。设这样求出的最大连续整数段和为 \(mx\),原先所有数之和为 \(sum\),则最后答案为 \(\max(0,sum-mx)\)。和 \(0\) 取 \(\max\) 是为了防止整段形成一个环,使得有些数取了两次。
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
int n,a[400005],m,sum;
signed main(){
IOS;TIE;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i];
sort(a+1,a+n+1);
int tmp=0,mx=0;
a[0]=a[1];
for(int i=n+1;i<=n*2;i++) a[i]=a[i-n];
a[n*2+1]=-1;
for(int i=1;i<=n*2+1;i++){
if(a[i]==a[i-1]||a[i]==(a[i-1]+1)%m) tmp+=a[i];
else{
mx=max(mx,tmp);
tmp=a[i];
}
}
cout<<max(sum-mx,0ll)<<endl;
return 0;
}
E - Crystal Switches
考虑当成普通的 \(\text{BFS}\) 求最短路来做。不同之处在于,边是否可走与当前开关状态有关。想到,每个点在一种状态下应当只被访问一次,因为相同状态多次访问情况会变得相同。所以只需要把原先的 \(vis\) 数组改成二维,记 \(vis_{0/1,i}\) 表示边为 \(0/1\) 状态时是否更新过 \(i\)。所以在 \(\text{BFS}\) 的队列中也要再加入一个参数 \(now\) 表示当前状态。
设初始状态为 \(0\),\(k.to\) 为当前队首,\(k.now\) 为当前队首状态,\(tmp.fl\) 为走向某一条边的初始状态,\(mark_i\) 为点 \(i\) 是否有开关,则有:
- 若 \(k.now\oplus tmp.fl=1\),可以不更改状态更新
- 否则,若 \(mark_{k.to}=1\),可以更改状态更新
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
int n,m,k,s,u,v,t,ans=1e18;
bool mark[200005],vis[2][200005];
struct node{
int to,fl;
};
vector<node> a[200005];
struct Node{
int to,ans,now;
};
queue<Node> q;
signed main(){
IOS;TIE;
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
cin>>u>>v>>t;
a[u].push_back({v,t});
a[v].push_back({u,t});
}
for(int i=1;i<=k;i++) cin>>s,mark[s]=1;
vis[0][1]=1;
q.push({1,0,0});
while(q.size()){
Node k=q.front();q.pop();
if(k.to==n){
cout<<k.ans<<endl;
return 0;
}
for(int i=0;i<a[k.to].size();i++){
node tmp=a[k.to][i];
if(k.now^tmp.fl){
if(!vis[k.now][tmp.to]){
vis[k.now][tmp.to]=1;
q.push({tmp.to,k.ans+1,k.now});
}
}
else if(mark[k.to]){
if(!vis[k.now^1][tmp.to]){
vis[k.now^1][tmp.to]=1;
q.push({tmp.to,k.ans+1,k.now^1});
}
}
}
}
cout<<-1<<endl;
return 0;
}
咕咕咕
AtCoder Beginner Contest 277 题解的更多相关文章
- 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 ...
- 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 ...
- AtCoder Beginner Contest 172 题解
AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...
- AtCoder Beginner Contest 169 题解
AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...
- AtCoder Beginner Contest 148 题解
目录 AtCoder Beginner Contest 148 题解 前言 A - Round One 题意 做法 程序 B - Strings with the Same Length 题意 做法 ...
- AtCoder Beginner Contest 151 题解报告
总的来说,这次的题目比较水,然而菜菜的我并没有把所有题目都做完,话不多说,直接来干货: A:Next Alphabet 题目链接:https://atcoder.jp/contests/abc151/ ...
随机推荐
- 对Github指定类目的内容进行监控和推送
很久之前看到HACK学习呀有一个Github 安全搬运工的系列文章,个人觉得很不错,想要在自己的公众号上也做这方面的内容,内容的编辑排版相对来说比较容易,这样问题就回归到Github安全内容的获取上 ...
- Html5新增内容标签
<canvas>画布</canvas> <audio src=""></audio> <video src="&qu ...
- 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库
目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3. ...
- const修饰符总结
1.什么是const? const就是constant的缩写,意思是"恒定不变的",它是定义只读变量的关键字,或者说const是定义常变量的关键字,常类型的变量或对象的值是不能被更 ...
- KingbaseES 如何开启并进入数据库
关键字: KingbaseES.sys_ctl.ksql 一.数据库启动前环境检测 1.1 查看kingbase用户环境变量配置 图1-1 查看.bashrc环境变量配置 1.2 应用环境变量 [ki ...
- java的URI和URL的关系
java的URI和URL到底是什么 在我们做开发时,经常有URI和URL弄混的问题,如果当时直接看URI和URL的源码就不可能弄混.首先我总结一下URI和URL的关系:他们的关系是:URL是一种特殊的 ...
- 《Java基础——循环语句》
Java基础--循环语句 1. while语句: 规则: 1. 首先计算表达式的值. 2. 若表达式为真,则执行循环语法,直至表达式为假,循环结束. 格式: while(表达式) 语句 ...
- 使用J2EE 登录实例开发
我们先了解下Servlet的生命周期 Servlet部署在容器里,其生命周期由容器管理. 概括为以下几个阶段: 1)容器加载Servlet类. 当第一次有Web客户请求Servlet服务或当Web服务 ...
- Kubernetes实践技巧:资源预留
ubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量.这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护 ...
- Elastic:为Elasticsearch启动https访问