Daiwa Securities Co. Ltd. Programming Contest 2021(AtCoder Regular Contest 128)(A+B)

2023-11-08

A - Gold and Silver

题目链接:https://atcoder.jp/contests/arc128/tasks/arc128_a

在这里插入图片描述
Input
Input is given from Standard Input in the following format:

N
A1 A2 ... AN

Output
Print the answer in the following format:

v1 v2 ... vN

Sample Input 1

3
3 5 2

Sample Output 1

0 1 1

The optimal sequence of actions is as follows.
Day 1: Do nothing.
Day 2: Exchange 1 gram of gold for 5 grams of silver.
Day 3: Exchange 5 grams of silver for 2.5 grams of gold.

Sample Input 2

4
1 1 1 1

Sample Output 2

0 0 0 0

(v1,v2,v3,v4)=(1,1,1,1), for example, is also considered correct.

Sample Input 3

10
426877385 186049196 624834740 836880476 19698398 709113743 436942115 436942115 436942115 503843678

Sample Output 3

1 1 0 1 1 1 1 0 0 0

code:

#include <iostream>
#include <algorithm>
using namespace std;
const int N=2e5+5;
int a[N],ans[N];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n-1;i++)
	{
		if(a[i]>a[i+1])
		{
			ans[i]++;
			ans[i+1]++;
		}
	}
	cout<<ans[1]%2;
	for(int i=2;i<=n;i++) cout<<" "<<ans[i]%2;
	//cout<<"\n";
	return 0;
}

这道题是个思维题,不得不说做法很巧妙。这道题的正确解法是:我们在遍历数组时,判断当前的值a[i]是否大于下一个值a[i+1],如果是,答案就是a[i]/a[i+1],ans[i]=1,ans[i+1]=0,不过这就有问题了,如果a[i]>a[i+1]>a[i+2]>a[i+3]怎么办呢,答案是a[i]/a[i+3],ans[i]=ans[i+3]=1,ans[i+1]=ans[i+2]=0,这就有人问了,为啥不是(a[i]*a[i+2])/(a[i+1]*a[i+3])呢?其实做题时多选取几个例子就会发现a[i]/a[i+3]更大。这里就不做证明了。为啥我说做法巧妙呢?细品:

for(int i=1;i<=n-1;i++)
	{
		if(a[i]>a[i+1])
		{
			ans[i]++;
			ans[i+1]++;
		}
	}

输出时:

cout<<ans[1]%2;
for(int i=2;i<=n;i++) cout<<" "<<ans[i]%2;

这种做法就巧妙地解决了这个标记的问题,不然的话我们在遍历时要做很多功夫来标记目标位置,更新位置,这就很麻烦了,而这种做法就化繁为简,看完后让人惊叹:原来还可以这样做!

B - Balls of Three Colors

题目链接:https://atcoder.jp/contests/arc128/tasks/arc128_b

在这里插入图片描述
Input
Input is given from Standard Input in the following format:

T
case1
case2
.
.
.
caseT

Each case is in the following format:

R G B

Output
For each case, print -1 if the objective is unachievable; otherwise, print the minimum number of operations to achieve it.
Sample Input 1

3
1 2 2
1 2 3
1 2 4

Sample Output 1

2
-1
4

For example, in case3, one optimal sequence of operations is:

choose a green ball and blue ball, turning them into two red balls;
choose a red ball and blue ball, turning them into two green balls;
choose a red ball and blue ball, turning them into two green balls;
choose a red ball and blue ball, turning them into two green balls.

code:

#include<bits/stdc++.h>
using namespace std;
int T,R,G,B;
int calc(int x,int y){
    if(x%3!=y%3)return 1e9;
    return max(x,y);
}
int main(){
    cin>>T;
    while(T--){
	cin>>R>>G>>B;
	int a=calc(G,B);
	int b=calc(R,B);
	int c=calc(R,G);
	int minn=min(min(a,b),c);
	cout<<(minn==1e9?-1:minn)<<endl;
    }
    return 0;
}

这道题也是个思维题,我们可以拿样例举例,比如输入是1,2,4的情况,题目里面也做了具体解释,根据这个解释我们会发现答案其实就是第三个也就是蓝色小球的数量,在算的过程中4减了1,2减了1,1加了2,也就变成3,1,3,之后就是两个3来减1,中间的1加2了,一直到3为0,这时你有没有发现:只要能减到有两个数相同的情况就会有答案,而且答案数还是固定的,就等于max(a,b),a,b分别为减1的数和加2的数,且这个减1的数是能减到与加2的数相等的,因为只有三种颜色的小球,所以我们可以计算3次:calc(R,G),calc(R,B),calc(G,B),如果存在相同的情况则calc的返回值是两个数中的较大值,否则返回1e9,之后我们就取三次计算的最小值,判断最小值是否为1e9,如果是则返回-1,否则返回就返回那个最小值。这里在判断是否有相同情况时用了对3取模的运算:

int calc(int x,int y){
    if(x%3!=y%3)return 1e9;
    return max(x,y);
}

我们在算的时候会发现那两个数的差值一直在减3,直到他们相等,于是我们就可以直接将两个数对3取模就能判断出来了,这个方法值得我们借鉴。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Daiwa Securities Co. Ltd. Programming Contest 2021(AtCoder Regular Contest 128)(A+B) 的相关文章

  • C - Shopping Street(AtCoder Beginner Contest 080)

    题目链接 https beta atcoder jp contests abc080 tasks abc080 c 解题方法 因为一共只有十个时期所以我们可以枚举所有的状态 xff0c 又因为必须有1个时期开放 xff0c 所以我们从1而不
  • AtCoder Beginner Contest 285(A~E)

    A Edge Checker 2 在满二叉树中 xff0c 判断两个两个点是否是父子关系 void solve int a b cin gt gt a gt gt b if b 61 61 2 a b 61 61 2 a 43 1 puts
  • ATCODER abc240部分题解

    A 判断两数是否相邻 xff0c 或两数分别为1 xff0c 10 span class token macro property span class token directive hash span span class token
  • AtCoder ABC 140E Second Sum

    题目链接 xff1a https atcoder jp contests abc140 tasks abc140 e 题目大意 给定一个 1 N 的排列 P 定义 X L R 的值为 P L P L 43 1 ldots P R 中第二大的
  • AtCoder Regular Contest 069 D 思维,模拟 E 模拟,贪心

    AtCoder Regular Contest 069 D Menagerie 题意 xff1a n只动物从1到n围成一个圈 xff0c 每只动物要么是羊要么是狼 每只动物会说出一个字母 xff0c 说 39 o 39 表示它两边动物种类相
  • 【AtCoder】ARC095 E - Symmetric Grid 模拟

    题目 E Symmetric Grid 题意 给定n m的小写字母矩阵 xff0c 求是否能通过若干行互换和列互换使得矩阵中心对称 n m lt 61 12 算法 模拟 题解 首先行列操作独立 xff0c 如果已确定行操作 xff0c 那么
  • AtCoder Beginner Contest 218 C - Shapes (模拟)

    linkkkk 题意 xff1a 给两个 n n n n n n 的矩阵 xff0c
  • AtCoder ABC 239题解(A ~ E)

    AtCoder ABC 239 A Horizon 语法 43 数学 s q r t a
  • Atcoder AGC005 题解

    A STring 用类似括号匹配的方法搞一下即可 span class token macro property span class token directive keyword include span span class toke
  • AtCoder - ABC 267 - B(暴力模拟)

    B Split 题目 xff1a 有 7 列保龄球瓶 xff0c 总共有 10 个球瓶 xff0c 每一列有哪些球瓶给你了 xff0c 现在有几个瓶倒了 xff0c 问是否有满足以下两个条件 xff1a 1 编号为 1 的瓶倒了 2 有两列
  • AtCoder从小白到大神的进阶攻略

    摘自https www cnblogs com LHYLHY p 11572011 html 在此对作者表示感谢 AtCoder从小白到大神的进阶攻略 前言 现在全球最大的编程比赛记分网站非CodeForces和AtCoder莫属了 xff
  • Atcoder Beginner Contest 100 - 题解

    A 原题 Happy Birthday 本题其实很水 只需要输入这两个整数 xff0c 如果中有一个大于 就输出 xff0c 否则输出 Yay include lt bits stdc 43 43 h gt using namespace
  • Hawk-and-Chicken HDU - 3639(tarjan,重点说一下为什么要反向建图)

    题意 大学班级选班长 N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适 意见具有传递性 即 A 认为 B 合适 B 认为 C 合适 则 A 也认为 C 合适 勤劳的 TT 收集了M条意见 想要知道最高票数 并给出一份候
  • 数论中的欧拉函数

    在数论中 对于一正整数 n n n 欧拉函数 n varphi n n 定义为
  • 2022—SWJTU-寒假ACM校队选拔赛第二场-题解

    A 傻子楼梯 算法分析 队列模拟即可 要转变方向当且仅当不同方向的人已抵达电梯 且该方向的下一个人还未到达电梯 昨天发现某位同学一直在wa 这里放上一组hack数据 仅作参考 5 1 1 7 0 8 0 10 0 12 1 AC code
  • HDU - 1312 Red and Black(DFS)

    There is a rectangular room covered with square tiles Each tile is colored either red or black A man is standing on a bl
  • SCI期刊画图常用颜色归纳总结

    我导师曾审稿300 他经常教导我们 论文中图片的质量是非常重要的 我审稿时主要看稿件的图表 PS 当然他说实验方法和结果很很很重要 还有其他的就不讨论了 因为本篇文章主要讲关于论文画图的事 我通常用PS画学术图 当然其他软件都可以 比如我师
  • 快速幂算法 Quickmod(C语言)

    快速幂的算法 快速幂算法一般用于指数比较大的幂运算 例如3的100次方 2的50次方等等 相比于使用pow a b 函数来说 快速幂运行所需时间更小 在一些有时间限制的题目上有着非常大的优势 算法原理 例如我要算3的100次方 我们可以不停
  • KMP算法是怎么被设计出来的

    定义 我们假设要在主串中寻找子串出现的所有位置 我们记主串中的开始位置为匹配位置 如在 abc 中匹配 bc 则匹配位置为 2 暴力 我们把匹配过程拆解为 枚举匹配位置 验证主串从匹配位置开始是否一一匹配子串 以此 有显然的 O n m
  • AtCoder Beginner Contest 169 B Multiplication 2 long long竟然不够用

    AtCoder Beginner Contest 169 比赛人数11374 比赛开始后15分钟看到A题 在比赛开始后第20分钟看到所有题 AtCoder Beginner Contest 169 B Multiplication 2 lo

随机推荐

  • 串口 同步和异步 理解

    串口 同步和异步 理解 https blog csdn net cs74184235 article details 48438727 本文主要三大块 一 串口同步和异步在底层通信上的区别 这部分点到为止 不是主要探讨内容 有个基本理解即可
  • 信捷plc,9伺服通用程序架构

    信捷plc 9伺服通用程序架构 程序已经升级 程序高度模块化 可轻易拓展十几二十多个轴 plc是目前性价比最高的方案 60个点10轴高速脉冲输出 走s形 正弦曲线加减速 程序采用C语言 梯形图架构 玩转信捷系统 可运用于三菱 西门子 欧姆龙
  • 小游戏 《唐僧大战白骨精》

    小游戏 唐僧大战白骨精 有点小无语的小游戏 当时做的还挺认真的 rint 欢迎光临 xxx 游戏 n 请选择你的身份 n 1 唐僧 n 2 白骨精 n sf input 请选择 1 2 if sf 1 print 你已经选择了1 你将以 g
  • pandas写入字典,或者pandas以各种格式输出数据

    1 将字典列表写入到pandas import pandas as pd rows buyer percent 23 2 tier city 1 buyer percent 18 54 tier city 2 df pd DataFrame
  • Python中利用xpath解析HTML的方法

    本文主要介绍了Python中利用xpath解析HTML的方法 利用其lxml html的xpath对html进行分析 获取抓取信息 具有一定的参考价值 感兴趣的小伙伴们可以参考一下 在进行网页抓取的时候 分析定位html节点是获取抓取信息的
  • SpringBoot整合LogBack

    本文演示SpringBoot整合LogBack 一 项目搭建 新建一个SpringBoot项目 引入依赖
  • 【shell中判断是否是整数】

    方法一 使用expr 看该数字是否可以进行加运算 root manager day4 cat ifnum sh bin bash Author pyy Date 2020 06 15 FileName ifnum sh 判断用户输入的是否是
  • Java是值传递还是引用传递?区别是什么?

    文章目录 值传递 引用传递 两者区别 Java到底是值传递还是引用传递 在Java中参数的传递主要有两种 值传递和 引用传递 值传递 实参传递给形参的是值 形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参 也就是说 在方法调
  • Java 数组 初始化方式 和遍历方式

    Java 数组 初始化方式总结 第一种 静态初始化 所谓静态初始化 初始化时由程序员显式指定每个数组元素的初始值 有系统决定数组的长度 简单实例 String strArr 张三 李四 王五 第二种 动态初始化 所谓动态初始化 初始化时由程
  • CTF-Web13(涉及哈希长度扩展攻击,难度偏大)

    13 让我进去 首先拿到题目 查看源代码 源代码没问题 直接开始burpsuite尝试key 两行直接admin admin测试 通过burpsuite可以看到以下内容 在Response中看到set cookies无疑是最容易注意到的东西
  • sql查询小记

    1 在MySQL中判断某个字段是否为空需要使用IS NULL 或者 IS NOT NULL 在MySQL5 2 7中测试通过 例子1 Select FROM Test WHERE CODE IS NULL 例子2 Select FROM T
  • 等保测评--通信网络安全测评要求

    信息安全等级保护 是对信息和信息载体按照重要性等级分级别进行保护的一种工作 在中国 美国等很多国家都存在的一种信息安全领域的工作 在中国 信息安全等级保护广义上为涉及到该工作的标准 产品 系统 信息等均依据等级保护思想的安全工作 狭义上一般
  • Python的迭代器和生成器使用示例

    迭代器和生成器是Python中强大而灵活的工具 用于处理可迭代对象的数据 它们提供了一种高效的方式来遍历和处理大型数据集 同时节省内存 在本文中 我们将介绍迭代器和生成器的概念 并提供一些实例来展示它们的用法 迭代器 Iterators 迭
  • repeat多级嵌套

    效果图 前台的 repeat asp 代码 C 代码
  • python爬虫——校花网

    爬取校花网图片 校花网http www xiaohuar com list 1 0 html 1 进入网站 我们会发现许多图片 这些图片就是我们要爬取的内容 2 对网页进行分析 按F12打开开发着工具 本文使用谷歌浏览器 我们发现每个图片都
  • 组合优化问题

    我们经常会遇到需要寻找一个最优方案的问题 也即最优化问题 我们首先对实例和问题做一个区分 在本课程中 不失一般性地 当我们在做一般性讨论的时候 都假定所讨论的最优化问题是最小化问题 定义1 1 1 最优化问题的实例 一个最优化问题的一个实例
  • 使用opencv识别视频中的数字识别

    使用OpenCV识别视频中的数字 需要对视频帧进行图像处理 以提取数字 一种常用的方法是使用边缘检测算法 如Canny边缘检测 检测图像中的边缘 然后 使用数字识别技术 如光学字符识别 OCR 识别图像中的数字 最后 使用算法对识别结果进行
  • ESP8266——AT指令发送POST请求

    AT指令发送POST请求 AT指令发送流程 注意 在串口助手调试过程中 每次发送都要加上 换行 且不能有多于的 空格 否则8266会将发送的数据原样返回 AT 返回值为OK AT CWMODE 1 返回值为OK 设置模块为STA模式 此时可
  • SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据)

    页面跳转 转发 默认 RequestMapping showPage1 public String showPage1 System out println user mvc controller is running return WEB
  • Daiwa Securities Co. Ltd. Programming Contest 2021(AtCoder Regular Contest 128)(A+B)

    这里写目录标题 A Gold and Silver B Balls of Three Colors A Gold and Silver 题目链接 https atcoder jp contests arc128 tasks arc128 a