ABC341 A-G

Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341) - AtCoder

B读不懂题卡了,F读假题卡了,开题开慢了rank++了

A - Print 341

题意:

打印一串交替出现的包含N个0,N+1个1的01串

代码:

void solve()
{int n;scanf("%d", &n);for (int i = 1; i <= n; ++i)printf("10");printf("1");
}

B - Foreign Exchange

题意:

有N个国家的货币,每个国家的货币初始有Ai个,国家 i 的货币可以换为国家 i + 1 的货币,比例为Si : Ti,问最多能拥有多少国家N的货币

题解:

从前往后尽量换完换即可

LL a[N];
void solve()
{int n;scanf("%d", &n);for (int i = 1; i <= n; ++i)scanf("%lld", &a[i]);for (int i = 1; i < n; ++i){LL s, t;scanf("%lld%lld", &s, &t);t *= a[i] / s;a[i + 1] += t;}printf("%lld\n", a[n]);
}

C - Takahashi Gets Lost

题意:

给出N行M列的图,'.'表示可以经过的格子,'#'表示不能经过的格子,给出一串指令集,包含LRUD四种指令(分别表示往左右上下走,具体解释见原题),问有多少个初始位置能满足执行以上一串指令时不经过'#'

题解:

500^3暴力即可

char op[N], mp[N][N];
int check(int x, int y)
{int i = 1;while (op[i]){if (mp[x][y] == '#')return 0;if (op[i] == 'L')y -= 1;if (op[i] == 'R')y += 1;if (op[i] == 'U')x -= 1;if (op[i] == 'D')x += 1;++i;}return mp[x][y] == '.';
}
void solve()
{int n, m, t;scanf("%d%d%d%s", &n, &m, &t, op + 1);for (int i = 0; i <= n + 1; ++i){for (int j = 0; j <= m + 1; ++j)mp[i][j] = '#';}for (int i = 1; i <= n; ++i){getchar();for (int j = 1; j <= m; ++j)mp[i][j] = getchar();}int ans = 0;for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j)ans += check(i, j);}printf("%d\n", ans);
}

D - Only one of two

题意:

找出第k个是n的倍数或者是m的倍数切不同时是n,m的倍数的数

题解:

关于x是第几个数可以直接通过容斥求得:f(x) = x / n + x / m - 2 * (x / lcm(n, m)),然后二分答案即可

LL n, m, k, lcm;
LL gcd(LL x, LL y)
{return y ? gcd(y, x % y) : x;
}
LL check(LL x)
{return x / n + x / m - 2 * (x / lcm);
}
void solve()
{scanf("%lld%lld%lld", &n, &m, &k);lcm = n * m / gcd(n, m);LL l = 0, r = 2e18;while (l < r){LL mid = l + r >> 1;if (check(mid) < k)l = mid + 1;elser = mid;}printf("%lld\n", l);
}

E - Alternating String

题意:

给出一个长度为n的01串,当一个01串被称为好的必须符合以下条件:任意相邻数字不同(01交替出现)。你需要对这个01串进行m次询问,询问分为两种

1 L R:反转区间L到R内的元素(0变成1,1变成0)

2 L R:查询L到R的子串是否是好的

题解:

我们可以仅考虑对于每对相邻元素是否相同,不考虑具体每个元素是0还是1,对于修改操作仅会使得(l - 1, l)与(r, r + 1)这两对相邻元素是否相同的性质反转,我们可以用一个set存所有相同的相邻元素位置(如存左边的元素下标)。对于修改操作我们仅需查询set内是否已经存在l - 1,若存在则删除,不存在则加入,右边同理,这样维护这个集合。对于查询操作我们仅需查询set中是否不存在l, r - 1范围的元素即可(set是支持二分查找的,可以通过*st.lower_bound(l) >= r 求得)

char ch[N];
set<int>st;
void solve()
{int n, m;scanf("%d%d%s", &n, &m, ch + 1);for (int i = 1; i < n; ++i){if (ch[i] == ch[i + 1])st.insert(i);}while (m--){int op, l, r;scanf("%d%d%d", &op, &l, &r);if (op == 1){if (st.find(l - 1) != st.end())st.erase(l - 1);elsest.insert(l - 1);if (st.find(r) != st.end())st.erase(r);elsest.insert(r);}else{auto it = st.lower_bound(l);if (it == st.end() || *it >= r)printf("Yes\n");elseprintf("No\n");}}
}

F - Breakdown

题意:

给出一张n个点m条边的无向简单图,每个点都有一个权值Wi,初始每个点上面都放有Ai个棋子,你需要进行以下操作直至棋盘上没有棋子:

选择一个棋子,删除它,记改棋子所在点的编号为x,选择一个点集S,需要使得集合内的所有点与点x相邻,且\sum _{y\in S}W_{y}<W_{x},并在每个属于点集S的点放上一颗棋子

求最大的操作次数

应该也可以线段树做(可能能写类似于维护最大区段和的写法),但上面做法更简单就懒得想了

题解:

背包DP,我们可以对每个点求一个 Si 表示在这个点上放一个棋子最多能进行多少次操作,与它相连的 x 个点看为 x 个物品,每个物品 j 的重量为 wj ,价值为 sj ,当前节点的容量为 wi - 1 ,显然这是一个01背包问题。

其次我们需要按 Wi 的值从小到大依次求每个点的 Si ,因为当我们求 i 点的 Si 时只会用到 Wj < Wi 的点做背包,只有当所有 Wj < Wi 的点的 Sj 才能求 Si

int w[N];
PII t[N];
vector<int>e[N];
LL s[N];
void solve()
{int n, m;scanf("%d%d", &n, &m);for (int i = 1; i <= m; ++i){int u, v;scanf("%d%d", &u, &v);e[u].push_back(v);e[v].push_back(u);}for (int i = 1; i <= n; ++i){scanf("%d", &w[i]);t[i] = { w[i],i };}sort(t + 1, t + 1 + n);for (int i = 1; i <= n; ++i){int u = t[i].second;vector<LL>dp(w[u]);for (auto v : e[u]){for (int j = w[u] - 1; j >= w[v]; --j)dp[j] = max(dp[j], dp[j - w[v]] + s[v]);}for (auto j : dp)s[u] = max(s[u], j + 1);}LL ans = 0;for (int i = 1, x; i <= n; ++i)scanf("%d", &x), ans += x * s[i];printf("%lld\n", ans);
}

G - Highest Ratio

题意:

给出一个长度为N的数组,对于每个左端点求最大子段平均值

题解:

赛时不会做,赛后看群友说的:

记 Si 为前 i 个元素的前缀和,在平面上放N个点(i, Si),第 x 个点到第 y 个点连线的斜率即为区间(x + 1, y)的平均值(平均值 = (Sy - Sx) / (y - x) = 斜率),在这个图上求凸包即可

double cross(PLL x, PLL y)//向量叉乘,直接乘好像会爆longlong用了double
{return (double)x.first * y.second - (double)x.second * y.first;
}
PLL operator-(PLL x, PLL y)//重载向量减法
{return { x.first - y.first,x.second - y.second };
}
double fun(PLL v)//求向量斜率
{return (double)v.second / v.first;
}
LL s[N];
double ans[N];
void solve()
{int n;scanf("%d", &n);for (int i = 1; i <= n; ++i)scanf("%d", &s[i]), s[i] += s[i - 1];vector<PLL>v{ {n,s[n]} };for (int i = n - 1; i >= 0; --i){PLL x = { i,s[i] };while (v.size() > 1)//典 凸包板子{PLL y = v.back(), z = v[v.size() - 2];if (cross(y - x, z - y) < 0)break;v.pop_back();}ans[i + 1] = fun(v.back() - x);v.push_back({ i,s[i] });}for (int i = 1; i <= n; ++i)printf("%.10lf\n", ans[i]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024免费人像摄影后期处理工具Portraiture4.1

Portraiture作为一款智能磨皮插件&#xff0c;确实为Photoshop和Lightroom用户带来了极大的便利。通过其先进的人工智能算法&#xff0c;它能够自动识别并处理照片中的人物皮肤、头发和眉毛等部位&#xff0c;实现一键式的磨皮美化效果&#xff0c;极大地简化了后期处理的过程。…

Switch开关(antd-design组件库)简单使用

1.Switch开关 开关选择器。 2.何时使用 需要表示开关状态/两种状态之间的切换时&#xff1b; 和 checkbox 的区别是&#xff0c;切换 switch 会直接触发状态改变&#xff0c;而 checkbox 一般用于状态标记&#xff0c;需要和提交操作配合。 组件代码来自&#xff1a; 开关 Swit…

【leetcode题解C++】51.N皇后 and 76.最小覆盖子串

51. N皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方…

用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)

导 读 本文主要介绍使用Python和OpenCV搭建自己的一维码和QRCode扫描仪&#xff08;步骤 源码&#xff09;。 项目简介 本文我们将创建一个程序来扫描图像中的二维码和条形码。对于这个程序&#xff0c;我们需要三个包&#xff0c;分别是OpenCV、NumPy和pyzbar。大多数 Pyth…

linux kernel 内存踩踏之KASAN_HW_TAGS(MTE)(三)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 linux kernel 内存踩踏之KASAN_SW_TAGS&#xff08;二&#xff09;-CSDN博客 最后来介绍一下KASAN_HW_TAGS&#xff0c;ARM64上就是MTE&#xff0c;这个特性在ARMv8.5支…

C++数据结构与算法——栈与队列

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

电商+支付双系统项目------支付系统的构思

本篇文章会讲讲支付的一些相关的名词概念以及怎么去设计支付系统&#xff0c;通过理解支付的这些名词概念和支付系统的架构&#xff0c;为接下来写支付系统的代码做好准备。 目录 支付------支付资质 支付------支付场景 微信 付款码支付 Native支付 支付宝 条码付 扫码…

问卷设计初探:题目类型概览与注意事项梳理

问卷法常被人们应用于社会调查中&#xff0c;它能反馈出最真实的社会信息。所以&#xff0c;很多企业为了最大程度地了解市场&#xff0c;也经常使用问卷调查法进行研究。不过&#xff0c;想要发挥出问卷法的最大用处&#xff0c;前提是要将问卷设计规范并且可量化。 想要设计…

在JavaScript中的防抖函数 - 通过在React中构建自动完成功能来解释

当你将一个新应用推向生产环境时&#xff0c;你希望确保它用户友好。网站的性能是用户体验的关键部分。每个用户都希望网站及其内容能够快速加载。每一秒都是宝贵的&#xff0c;可能导致用户再也不会访问你的网站。 在本指南中&#xff0c;我们将了解JavaScript中一个非常重要…

2024.2.15 模拟实现 RabbitMQ —— 消息持久化

目录 引言 约定存储方式 消息序列化 重点理解 针对 MessageFileManager 单元测试 小结 统一硬盘操作​​​​​​​ 引言 问题&#xff1a; 关于 Message&#xff08;消息&#xff09;为啥在硬盘上存储&#xff1f; 回答&#xff1a; 消息操作并不涉及到复杂的增删查改消…

人工智能学习与实训笔记(十四):Langchain之Agent

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 0、概要 1、Agent整体架构 2、langchain中agent实现 3、Agent业务实现逻辑 0、概要 Agent是干什么的&#xff1f; Agent的核心思想是使用语言模型&#xff08;LLM&#xff09;作为推理的大脑…

redis为什么使用跳跃表而不是树

Redis中支持五种数据类型中有序集合Sorted Set的底层数据结构使用的跳跃表&#xff0c;为何不使用其他的如平衡二叉树、b树等数据结构呢&#xff1f; 1&#xff0c;redis的设计目标、性能需求&#xff1a; redis是高性能的非关系型&#xff08;NoSQL&#xff09;内存键值数据…

【51单片机实验笔记】开关篇(二) 矩阵按键

目录 前言原理图分析矩阵按键扫描算法 软件实现1. 矩阵键盘检测2. 简易计算器实现 总结 前言 本节内容&#xff0c;我们学习一下矩阵按键&#xff0c;它是独立按键的阵列形式&#xff0c;常见的应用即键盘。 本节涉及到的封装源文件可在《模块功能封装汇总》中找到。 本节完…

websocket数据帧格式

客户端、服务端数据的交换&#xff0c;离不开数据帧格式的定义。因此&#xff0c;在实际讲解数据交换之前&#xff0c;我们先来看下WebSocket的数据帧格式。 WebSocket客户端、服务端通信的最小单位是帧&#xff08;frame&#xff09;&#xff0c;由1个或多个帧组成一条完整的消…

基于协同过滤的时尚穿搭推荐系统

项目&#xff1a;基于协同过滤的时尚穿搭推荐系统 摘 要 基于协同过滤的时尚穿搭推荐系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究服饰流行的分析和预测的分析和预测信息可视化时尚穿搭推荐系统…

C++中的volatile:穿越编译器的屏障

C中的volatile&#xff1a;穿越编译器的屏障 在C编程中&#xff0c;我们经常会遇到需要与硬件交互或多线程环境下访问共享数据的情况。为了确保程序的正确性和可预测性&#xff0c;C提供了关键字volatile来修饰变量。本文将深入解析C中的volatile关键字&#xff0c;介绍其作用、…

浅谈电商场景中的扣除库存问题

库存 一、场景二、扣减时机1.下单时扣库存2.支付完成扣库存3.预扣除 三、库存存储方案1.数据库存储2.数据库缓存混合存储 四、整体方案1.单数据库方案2.主从数据库方案3.主从数据库缓存方案4.数据库缓存混合存储 五、其他情况1.秒杀QPS过高2.Redis QPS过高3.Master DB QPS过高4…

使用ShardingJDBC实现分库分表

一、测试环境 JDK&#xff1a;1.8SpringBoot&#xff1a;2.7.17MySQL驱动&#xff1a;5.1.49MyBatis&#xff1a;2.3.1shardingJDBC&#xff1a;5.1.0 二、核心依赖 <!-- mysql 驱动 --> <dependency><groupId>mysql</groupId><artifactId>mysq…

Manifest merger failed with multiple errors, see logs

问题 Manifest merger failed with multiple errors, see logs详细问题 笔者进行Android 项目开发&#xff0c;修改AndroidManifest.xml代码后&#xff0c;控制台报错 AndroidManifest.xml报错核心代码 <manifest><uses-permission android:name"android.perm…

【C语言】长篇详解,字符系列篇1-----“混杂”的各种字符类型字符转换和strlen的模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本期系列为【C语言】长篇详解&#xff0c;字符系列篇1-----“混杂”的各种字符函数……&#xff0c;图文讲解各种字符函数&#xff0c;带大家更深刻理解C语言中各种字符函数的应用&#xff0c;感谢观看&#xff0c;支持的可以给个赞哇。 前言…