掉大分力(悲

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 题解的更多相关文章

  1. AtCoder Beginner Contest 154 题解

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

  2. AtCoder Beginner Contest 153 题解

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

  3. AtCoder Beginner Contest 177 题解

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

  4. AtCoder Beginner Contest 184 题解

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

  5. AtCoder Beginner Contest 173 题解

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

  6. AtCoder Beginner Contest 172 题解

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

  7. AtCoder Beginner Contest 169 题解

    AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...

  8. AtCoder Beginner Contest 148 题解

    目录 AtCoder Beginner Contest 148 题解 前言 A - Round One 题意 做法 程序 B - Strings with the Same Length 题意 做法 ...

  9. AtCoder Beginner Contest 151 题解报告

    总的来说,这次的题目比较水,然而菜菜的我并没有把所有题目都做完,话不多说,直接来干货: A:Next Alphabet 题目链接:https://atcoder.jp/contests/abc151/ ...

随机推荐

  1. 【C标准库】详解strerror函数

    创作不易,感谢支持 strerror 头文件:string.h 描述: strerror() 函数接受一个参数:errnum,它是一个表示错误代码的整数值.此函数将错误代码转换为说明错误的合适字符串指 ...

  2. 实时降噪(Real-time Denoising):Nvidia Real-time Denoisers 源码剖析

    目录 Nvidia Real-time Denoisers(NRD) v3.x ReBLUR 前置知识 空间滤波(Spatial Filtering):Diffuse & Specular 泊 ...

  3. Springboot多属性文件配置

    Springboot 多属性文件配置 配置文件后缀有两种: .properties和.yml 要完成多属性配置需要自定义PropertySourcesPlaceholderConfigurer 这个B ...

  4. python自动化测试系列教程

    随着互联网产品更新迭代加快,Web 开发和测试的需求也越来越大.很难想象,如果阿里的双 11.京东的 618,这些庞大繁杂的系统,由工程师们一个个手动测试,将会是一个怎样费时费力.成本巨大的工程. 也 ...

  5. windows清理必看

    清理缓存 代码如下 介绍此文件夹都是缓存文件全选删除即可 ctrl+A全选shift+del强制删除(不会添加到回收站) %temp% 找到C盘右击属性选择想要删除的文件进行清理即可 清理完点击清理系 ...

  6. [机器学习]-分类问题常用评价指标、混淆矩阵及ROC曲线绘制方法

    分类问题 分类问题是人工智能领域中最常见的一类问题之一,掌握合适的评价指标,对模型进行恰当的评价,是至关重要的. 同样地,分割问题是像素级别的分类,除了mAcc.mIoU之外,也可以采用分类问题的一些 ...

  7. 《Java基础——线程类》

    Java基础--线程类       一.线程的创建之Thread类: 规则: 通过声明一个新类作为子类继承 Thread 类,并复写 run() 方法,就可以启动新线程并执行自己定义的 run()方法 ...

  8. Python数据分析教程(一):Numpy

    原文链接:https://blog.onefly.top/posts/13140.html 数据的纬度 一维数据:列表和集合类型 二维数据:列表类型 多维数据:列表类型 高维数据:字典类型或数据表示格 ...

  9. 并发原理 — CPU原子性指令(一)

    本篇文章将以Intel CPU作为讨论基础 一.并发的由来 一台计算机有2个cpu,其中CPU1执行程序A,CPU2执行程序B,由于程序A和程序B是两个不同的应用程序,所以它们两个之间并不存在并发问题 ...

  10. ProxySQL(4):多层配置系统

    文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9280793.html ProxySQL中的库 使用ProxySQL的Admin管理接口连上ProxySQL, ...