A

题意

问\(x,y\)相差是否小于\(3\)

#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long ll x,y; int main(){
scanf("%lld%lld",&x,&y);
if(abs(y - x) < 3)
puts("Yes");
else
puts("No");
}

B

题意

问两个向量的内积是否为\(0\)

照着题目模拟就行

#include<iostream>
#include<cstdio>
#define ll long long ll n,a[10000006],b[10000006]; int main(){
scanf("%lld",&n);
for(int i = 1;i <= n;++i)
scanf("%lld",&a[i]);
ll sum = 0;
for(int i = 1;i <= n;++i){
scanf("%lld",&b[i]);
sum += a[i] * b[i];
}
if(sum == 0)
puts("Yes");
else
puts("No");
}

C

题意

\(2^n\)个人进行树状比赛,问最后获得第二名的人是谁

用类似于线段树的建树,最后对根节点\(1\)的两个子节点进行判断(比较的时候用键值,树上存的是编号)

#include<iostream>
#include<cstdio>
#define ll long long
#define mid ((l + r) >> 1) ll n,a[1000005];
int val[(1000005) << 2]; void build(int now,int l,int r){
if(l == r){
val[now] = l;
return ;
}
build(now * 2,l,mid);
build(now * 2 + 1,mid + 1,r);
if(a[val[now * 2]] > a[val[now * 2 + 1]])
val[now] = val[now * 2];
else
val[now] = val[now * 2 + 1];
return;
} int main(){
scanf("%lld",&n);
n = (1 << n);
for(int i = 1;i <= n;++i)
scanf("%lld",&a[i]);
build(1,1,n);
if(val[1] == val[2])
std::cout<<val[3];
else
std::cout<<val[2];
}

D

题意

\(Takahashi\) 出去游玩,现在提供了\(n\)个项目,时间是\([a_i, b_i]\),这些项目每天分别需要花费\(c_i\),但它可以选择一天花费\(C\)元玩这天所有可玩项目,项目出现了他就一定要玩,求他的最少花费

考虑离散化,在离散后的数组上打差分标记,再对当前的钱数进行一个前缀和,对每一段判断是否取\(C\)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long ll n,C; ll a[200005],b[200005],c[200005],cnt;
ll num[800005],mark[800005]; unsigned ll now = 0,ans = 0; int main(){
scanf("%lld%lld",&n,&C);
ll sum = 0;
ll vsum = 0;
for(int i = 1;i <= n;++i){
scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
num[++cnt] = a[i];
num[++cnt] = b[i] + 1;
}
std::sort(num + 1,num + cnt + 1);
cnt = std::unique(num + 1,num + cnt + 1) - num - 1;
for(int i = 1;i <= n;++i){
mark[std::lower_bound(num + 1,num + cnt + 1,a[i]) - num] += c[i];
mark[std::lower_bound(num + 1,num + cnt + 1,b[i] + 1) - num] -= c[i];
}
num[0] = num[1] + 1;
// for(int i = 1;i <= cnt;++i)
// std::cout<<num[i]<<" "<<mark[i]<<std::endl;
now = mark[1];
for(int i = 2;i <= cnt;++i){
//std::cout<<" "<<num[i - 1]<<" "<<num[i]<<" "<<now<<std::endl;
if(now <= C)
ans += (now) * (num[i] - num[i - 1]);
else
ans += C * (num[i] - num[i - 1]);
now += mark[i];
}
std::cout<<ans<<std::endl;
}

E

题意

有向图,有点权,你可以在一个点上用点权买一块黄金,在再另一块你能到达的点上以点权卖出,问必须进行一次买卖的最大收益

我原本是进行一次\(dfs\)这样处理每个点的前缀最小值,但这样会在环上跑\(2\)次,我也这样\(T\)了一发

我们可以考虑按照点权的大小优先\(dfs\)这样最算有环也只用跑\(1\)次

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long ll n,m,cnt,ans = -0x3f3f3f3f;
ll head[200005];
ll val[200005],maxx[200005],minn[200005];
int vis[200005]; struct K{
ll val,num;
}p[200005]; struct P{
ll to,next;
}e[400005]; void add(ll x,ll y){
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
} void dfs(ll now){
//std::cout<<now<<" "<<val[now]<<" "<<minn[now]<<std::endl;
ans = std::max(val[now] - minn[now],ans);
for(int i = head[now];i;i = e[i].next){
if(!vis[e[i].to]){
minn[e[i].to] = std::min(minn[now],val[now]);
vis[e[i].to] ++ ;
dfs(e[i].to);
}
}
} bool operator < (K a,K b){
return a.val < b.val;
} int main(){
memset(maxx,-0x3f,sizeof(maxx));
memset(minn,0x3f,sizeof(minn));
scanf("%lld%lld",&n,&m);
for(int i = 1;i <= n;++i)
scanf("%lld",&p[i].val),p[i].num = i,val[i] = p[i].val;
for(int i = 1;i <= m;++i){
ll x,y;
scanf("%lld%lld",&x,&y);
add(x,y);
}
std::sort(p + 1,p + 1 + n);
for(int i = 1; i<= n;++i)
if(!vis[p[i].num])
dfs(p[i].num);
std::cout<<ans<<std::endl;
}

F

题意

有\(x,y\),可以对\(x做+1,-1,*2\)的操作请问最少几次能到\(y\)

考虑进行记忆化搜索,以后这种没有太好思路的题都可以往搜索想

#include<iostream>
#include<cstdio>
#include<map>
#define ll long long using std::map; ll x,y; map<ll,ll>QWQ; ll solve(ll y){
if(y <= x) return x - y;
if(QWQ.count(y)) return QWQ[y];
ll ans = y - x;
if(y % 2) ans = std::min(ans,1 + std::min(solve(y - 1),solve(y + 1)));
else
ans = std::min(ans,1 + solve(y / 2));
return QWQ[y] = ans;
} int main(){
scanf("%lld%lld",&x,&y);
std::cout<<solve(y);
}

AtCoder Beginner Contest 188题解的更多相关文章

  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. UE4蓝图AI角色制作(四)之Gameplay调试器

    8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...

  2. Pytorch——张量 Tensors

    张量 Tensors 1.torch.is_tensor torch.is_tensor(obj) 用法:判断是否为张量,如果是 pytorch 张量,则返回 True. 参数:obj (Object ...

  3. ZooKeeper分布式配置——看这篇就够了

    ZooKeeper 的由来 PS:这一节不重要, 不感兴趣的小伙伴可以跳过 ZooKeeper 最早起源于雅虎研究院的一个研究小组,在当时,研究人员发现,在雅虎内部有很多的大型系统基本上都需要依赖一个 ...

  4. Win10 配置JDK1.8 (JDK 8)环境变量

    JDK的安装: 1. JDK安装过程中,一般X掉公共JRE,因为JDK包含了JRE:     环境变量的配置: 1. 打开环境变量,编辑系统变量,新建: 变量名:JAVA_HOME 变量值:D:\so ...

  5. docker multi-stage 多阶段构建

    多阶段构建 一.需求 二.普通构建 1.编写Dockerfile 2.构建镜像 三.多阶段(multi-stage)构建 1.编写Dockerfile 2.构建镜像 四.比较2个镜像的体积大小 我们在 ...

  6. Noip模拟72 2021.10.9

    T1 出了个大阴间题 真就以为他出了个大阴间题就没写,打个暴力就跑了 数据范围显然摆明是状压 设$f[sta][0/1]$表示在已经选择的集合$sta$中,$A$的最大值是$A$还是$A+1$ 然后按 ...

  7. Noip模拟35 2021.8.10

    考试题目变成四道了,貌似确实根本改不完... 不过给了两个小时颓废时间确实很爽(芜湖--) 但是前几天三道题改着不是很费劲的时候为什么不给放松时间, 非要在改不完题的时候颓?? 算了算了不碎碎念了.. ...

  8. matlab添加永久路径

    addpath('D:\MATLAB6p5\toolbox\svm'); 临时添加路径,不能添加子目录 addpath(genpath('D:\MATLAB6p5\toolbox\svm'));临时添 ...

  9. PCIe知识摘要记录

    摘: 一. 在PCIe的Spec中,并没有特别详细的关于Root Complex的定义,从实际的角度来讲,可以把Root Complex理解为CPU与PCIe总线系统通信的媒介.Endpoint处于P ...

  10. Kill杀死Linux中的defunct进程(僵尸进程)

    一.什么是defunct进程(僵尸进程)? 在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状 ...