AtCoder Beginner Contest 336 A-E 题解

比赛链接:https://atcoder.jp/contests/abc336
比赛时间:2024 年 1 月 14 日 20:00-21:40

A题:Long Loong

标签:模拟
题意:给定一个 n n n,输出 L L L n n n o o o n g ng ng
题解:按题意模拟即可。
代码

#include <bits/stdc++.h>
using namespace std;int main() {cout << "L";int n;cin >> n;for (int i = 1; i <= n; i++)cout <<  "o";cout << "ng";return 0;
}

B题:CTZ

标签:模拟
题意:给定一个十进制数 n n n,求该数转换成 2 2 2进制之后末尾连续 0 0 0的个数。( 1 < = n < = 1 0 9 1<=n<=10^9 1<=n<=109
题解:模拟,二进制转换,累计一下末尾 0 0 0个数,直到不是 0 0 0,跳出循环。
代码

#include <bits/stdc++.h>
using namespace std;int main() {int n, c = 0;cin >> n;while (n) {if (n % 2 == 0) c++;else break;n /= 2;}cout << c;return 0;
}

C题:Even Digits

标签:思维、数学
题意:给出定义十进制数 x x x的所有数位都是偶数(即 0 、 2 、 4 、 6 、 8 0、2、4、6、8 02468)的时候称为 “好整数”,给定一个 n n n,求第 n n n小的 “好整数”。( 1 < = n < = 1 0 12 1<=n<=10^{12} 1<=n<=1012
前几个 “好整数” 分别为 0 、 2 、 4 、 6 、 8 、 20 、 22 、 24 、 26 、 28... 0、2、4、6、8、20、22、24、26、28... 024682022242628...
题解:每个数位都是最多 5 5 5种可能,我们可以先求出超过 n n n需要的位数,比如第 8 8 8小的,一位最多只有 5 5 5种,两位能到 25 25 25种,所以至少得两位。
接着我们再求目前当前这位对应的到底是 0 、 2 、 4 、 6 、 8 0、2、4、6、8 02468中的哪一个。
比如第 8 8 8小的,我们求第一位上的数字的时候,
1 ∗ 5 < 8 1*5<8 15<8
2 ∗ 5 > 8 2*5>8 25>8
所以我们能确定,第一位上的数字是 2 2 2。对于后面的第二位来说,我们需要把刚刚第一位带来的整个部分的个数给减掉, 8 − 5 = 3 8-5=3 85=3
1 ∗ 1 < 3 1*1<3 11<3
1 ∗ 2 < 3 1*2<3 12<3
1 ∗ 3 > = 3 1*3>=3 13>=3
所以第二位上的数字是 4 4 4
代码

#include <bits/stdc++.h>
using namespace std;int main() {long long n, k = 1, c = 0;cin >> n;while (k <= n) {k *= 5;c++;}for (int i = 1; i <= c; i++) {k /= 5;for (int j = 1; j <= 5; j++) {if (j * k >= n) {n -= (j-1) * k;cout << (j - 1) * 2;break;}}}return 0;
}

D题:Pyramid

标签:动态规划、前缀和
题意:金字塔型序列: 1 、 2... k − 1 、 k 、 k − 1...2 、 1 1、2...k-1、k、k-1...2、1 12...k1kk1...21。给定一个长度为 n n n的序列 a i a_i ai,可以进行重复性的两种操作:

  1. 将序列中某个数的大小减一
  2. 删除第一个或最后一个数

求能够形成的金字塔型序列的最大长度。( 1 < = n < = 2 ∗ 1 0 5 , 1 < = a i < = 1 0 9 1<=n<=2*10^{5},1<=a_i<=10^9 1<=n<=21051<=ai<=109
题解:比较常见的套路,洛谷也有类似的题:P1091 合唱队形
从左往右维护一个 p r e [ i ] pre[i] pre[i]:以 a i a_i ai作为结尾的最长左金字塔序列的长度
从右往左维护一个 s u f [ i ] suf[i] suf[i]:以 a i a_i ai作为结尾的最长右金字塔序列的长度
我们以 p r e [ i ] pre[i] pre[i]为例,分别来观察一下
例子 1 1 1 1 、 2 、 3 1、2、3 123
例子 2 2 2 1 、 2 、 2 1、2、2 122
例子 3 3 3 3 、 1 、 2 3、1、2 312
按照题目中能把数变小和删除前后数字的操作,能推出当前的 p r e [ i ] pre[i] pre[i]要从前面的 p r e [ i − 1 ] pre[i-1] pre[i1]和当前 a i a_i ai较小的那个推过来:
p r e [ i ] = m i n ( p r e [ i − 1 ] + 1 , a [ i ] ) pre[i] = min(pre[i - 1] + 1, a[i]) pre[i]=min(pre[i1]+1,a[i])
s u f suf suf同理,最终枚举每个数作为金字塔尖,左边金字塔序列长度和右边金子塔序列长度中取小的那个能够形成的金字塔序列长度,然后维护一个最大值。
代码

#include <bits/stdc++.h>
using namespace std;const int N = 2e5 + 10;
typedef long long ll;
ll a[N], pre[N], suf[N];int main() {ll n, ans = 0;cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];pre[i] = min(pre[i - 1] + 1, a[i]);}for (int i = n; i >= 1; i--) {suf[i] = min(suf[i + 1] + 1, a[i]);}for (int i = 1; i <= n; i++) {ans = max(ans, min(pre[i], suf[i]));}cout << ans;return 0;
}

E题:Digit Sum Divisible

标签:数位 d p dp dp
题意:给定一个 n n n,求小于等于 n n n的数中有多少个能被自己的位数之和整除。( 1 < = n < = 1 0 14 1<=n<=10^{14} 1<=n<=1014
**题解:**数位 d p dp dp模版题, d p [ p o s ] [ s u m ] [ m o d ] dp[pos][sum][mod] dp[pos][sum][mod]表示当第 p o s pos pos位各位数字之和为 s u m sum sum除原数的余数是 m o d mod mod且有没超出边界时候的个数。
代码

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
ll n, m, cnt = 0;
// dp[i][j][k]: 第i位 当前数字和为j 取模结果为k的个数
ll a[20], dp[20][10*20][10*20];ll dfs(ll pos, ll sum, ll mod, ll flag) {if (sum > m) return 0;if (pos == 0) return sum == m && mod == 0;if (!flag && dp[pos][sum][mod] != -1) return dp[pos][sum][mod];ll x = flag ? a[pos] : 9;ll ans = 0;for (ll i = 0; i <= x; i++) {ans += dfs(pos - 1, sum + i, (mod * 10 + i) % m, flag && (i == a[pos]));}if (!flag) dp[pos][sum][mod] = ans;return ans;
}int main() {cin >> n;while (n) {a[++cnt] = n % 10;n /= 10;}ll res = 0;for (int i = 1; i <= 9 * cnt; i++) {m = i;memset(dp, -1, sizeof(dp));res += dfs(cnt, 0, 0, 1);}cout << res;return 0;
}

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

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

相关文章

批评与自我批评组织生活会发言材料2024年六个方面

生活就像一场马拉松&#xff0c;成功需要坚持不懈的奔跑。每一步都可能会遇到挫折和困难&#xff0c;但只要你努力向前&#xff0c;坚持不放弃&#xff0c;你就一定能够迎接胜利的喜悦。不要害怕失败&#xff0c;因为失败是成功的垫脚石。相信自己的能力&#xff0c;追求自己的…

翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一 1. 使用Streamlit显示图表Graphs 1.1 为什么我们需要可视化&#xff1f; 数据可视化通过将数据整理成更容易理解的格式来讲述故事&#xff0c;凸显趋势和异常点。好的可视化能够讲述一个故…

生物信息学及其研究方向与应用

生物信息学是生物er在AI以及cs时代的出路&#xff0c;所以AI以及生信一定是生物er的出路&#xff0c;21世纪的生物只有和最具生产力的行业结合&#xff0c;才能爆发出生命力&#xff0c;哦不&#xff0c;拿到高薪。 生物信息学可以理解为“生物”“信息学”&#xff0c;但不是…

GB/T28181介绍

GB/T 28181是中华人民共和国国家标准中关于视频监控设备通信协议的规范&#xff0c;它提供了一种用于视频监控系统之间通信的标准化平台。以下是GB/T 28181规范的概述&#xff1a; 1. 标准背景 GB/T 28181标准的制定旨在解决不同厂商生产的视频监控设备之间的互联互通问题&am…

MySQL隐藏密码之mysql_config_editor

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 1. mysql_config_editor介绍 mysql_config_editor是一个MySQL自带的一款用于安全加密登录的工具&#xff0c;使用这个工具&…

C#中实现UDP打洞

在C#中实现UDP打洞&#xff08;NAT Traversal&#xff09;的基本原理是利用STUN&#xff08;Session Traversal Utilities for NAT&#xff09;服务器获取客户端的公网地址和端口信息&#xff0c;然后通过互相交换这些信息&#xff0c;使得两个位于不同NAT环境下的客户端可以通…

STM8入门|第一个工程

开发软件 不支持Keil&#xff0c;使用IAR for STM8&#xff0c;注意 IAR系列有很多种 STM8对应软件是 IAR for STM8 软件下载&#xff1a; 官网下载地址&#xff0c;官网版本下载比较麻烦&#xff0c;可以按教程网盘地址下载。 下载安装教程&#xff1a; https://www.cnblogs…

系统界面风格和布局设置,Launcher

不同系统版本的有不同的界面风格和布局设置&#xff0c;那么这个工作任务牵扯到android的哪一层次&#xff0c;应用层可以解决吗 这个问题涉及到 Android 系统的不同层次。Android 系统的架构可以分为四个主要层次&#xff1a;应用层、应用框架层、系统运行库层和 Linux 内核层…

4. Mybatis 事务和Spring事务关系

大体上分为两种情况&#xff1a;方法上添加了事务注解Transactional 和方法上没有添加事务注解Transactional。 添加了Transactional 注解的在注入 bean 的时候就会被创建代理类&#xff0c;在代理类中使用增强逻辑进行事务处理。没有添加Transactional 注解的&#xff0c;在 …

【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)

目录 1. Mybatis基础操作1.1 需求1.2 准备1.3 删除1.3.1 功能实现1.3.2 日志输入1.3.3 预编译SQL1.3.3.1 介绍1.3.3.2 SQL注入1.3.3.3 参数占位符 1.4 新增1.4.1 基本新增1.4.2 主键返回 1.5 更新1.6 查询1.6.1 根据ID查询1.6.2 数据封装1.6.3 条件查询1.6.4 参数名说明 1. Myb…

如何打赢稳定性之战?

文章目录 前言为什么总会出现问题呢&#xff1f;如何证明你的稳定性做的有效果&#xff1f;既是持久战&#xff0c;也是防御战1. 提前建筑好防御工事2. 以攻为守3. 找外部支援和配合 前言 随着23年年末期间&#xff0c;各大厂争先恐后的出现的各种线上故障&#xff0c;一时间“…

帆软使用总结-动态分组背景变色

1.开发界面设计 提示&#xff1a; ROUNDUP((ROW() - M) / N, 0) % 2 0row() 获取当前行号 M 标题行数 N 间隔行数 ROUNDUP() 向上取整 如果被2整除&#xff0c;改变背景颜色 当前公式&#xff1a;ROUNDUP((ROW() - 2) / 3, 0) % 2 02.效果演示

Python while循环实现猜字谜游戏

python的while更多地应用于程序的一般性循环&#xff0c;而不是遍历迭代对象。与其他的计算机编程语言不同&#xff0c;python没有do...while这样的while循环。接下来&#xff0c;我们将详细介绍一下Python的while循环&#xff0c;并用寥寥数行代码开发一个小游戏&#xff0c;作…

【题解】—— 每日一道题目栏

2024.1 【题解】—— LeetCode一周小结1 1. 1599. 经营摩天轮的最大利润 2. 466. 统计重复个数 3. 2487. 从链表中移除节点 4. 2397. 被列覆盖的最多行数 5. 1944. 队列中可以看到的人数 6. 2807. 在链表中插入最大公约数 7. 383. 赎金信 【题解】—— LeetCode一周小…

【前端框架】Vue2合集

一、Vue快速上手 1、Vue概念 vue 是一个用于构建用户界面的渐进式框架&#xff0c;由数据驱动 vue 的两种使用方式 vue 核心包开发&#xff1a;局部模块改造vue 核心包与 vue 插件 工程化开发&#xff1a;整站 开发 2、 创建实例 1、准备容器 <div id"app"&…

网站万词霸屏推广系统源码:实现关键词推广,轻松提高关键词排名,带完整的安装部署教程

现如今&#xff0c;互联网的快速发展&#xff0c;网站推广成为企业网络营销的重要手段。而关键词排名作为网站推广的关键因素&#xff0c;一直备受关注。罗峰给大家分享一款网站万词霸屏推广系统源码&#xff0c;该系统可实现关键词推广&#xff0c;有效提高关键词排名&#xf…

【教3妹学编程-算法题】回文串重新排列查询

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 这已经是你今年的第几次抖啦&#xff1f; 3妹&#xff1a;昨天20度&#xff0c;今天7度&#xff0c;直降13度呢&#xff0c;能不抖嘛 2哥 : 继哈尔滨之后&#xff0c;全国各地的城市也在发展旅游业。 河北喊话赵丽颖回…

使用mamba替换conda和anaconda配置环境安装软件

使用mamba替换miniconda和anaconda&#xff0c;原因是速度更快&#xff0c;无论是创建新环境还是激活环境 conda、mamba、anaconda都是蟒蛇的意思… 下载mambaforge wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh ba…

python 八大排序_python-打基础-八大排序

## 排序篇 #### 二路归并排序 - 介绍 - 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列…