AtCoder Beginner Contest 387

news/2025/1/11 13:15:41/文章来源:https://www.cnblogs.com/Seii/p/18665481


A - Happy New Year 2025

题意

给定正整数\(A,B\),求\((A+B)^2\)

思路

模拟

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 1e6 + 5;void solve()
{int a, b;cin >> a >> b;cout << (a + b) * (a + b) << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T = 1;//cin >> T;while (T--){solve();}return 0;
}

B - 9x9 Sum

题意

\(9×9\)的网格,\((i,j)\)的权是\(i×j\)。给定\(n\),求所有网格中权不是\(n\)的数的和。

思路

模拟

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 1e6 + 5;int cnt[100];void solve()
{int n;cin >> n;if (n > 81){cout << 2025 << endl;return;}for (int i = 1; i <= 9; i++){for (int j = 1; j <= 9; j++){cnt[i * j]++;}}cout << 2025 - cnt[n] * n << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T = 1;//cin >> T;while (T--){solve();}return 0;
}

C - Snake Numbers

题意

定义"蛇数"为:一个不小于\(10\)的数,且这个数的十进制首位严格大于其他位的数。给定区间\([L,R]\),求该区间内的"蛇数"个数

思路

将上下限转化为两个上限之差,即 \(ans([L,R])=ans([10,R])-ans([10,L-1])\)
对于上限\(R\),枚举\(x\),当\(x\)的位数小于\(R\)的位数以及位数相等但\(x\)的首位\(<R\)的首位时,可以很容易地计算出答案;当位数相等且首位相等时,就枚举\(R\)的每一位,当能够判断\(R\)不是蛇数或枚举完时结束,注意后者需要多计\(1\)(\(R\)本身也是蛇数)。
注意:C++库中的\(pow\)在数据很大时会有精度问题(可能?反正我在这\(wa\)了一晚上),所以需要自己实现\(pow\)

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 1e6 + 5;int _pow(int a, int b)
{int res = 1;while (b--){res *= a;}return res;
}int f(int x)
{if (x < 10){return 0;}string s = to_string(x);int res = 0, len = s.length();for (int i = 1; i <= 9; i++) // 最高位{for (int j = 2; j < len; j++) // 位数{res += _pow(i, j - 1);}}for (int i = 1; i < s[0] - '0'; i++){res += _pow(i, len - 1);}for (int i = 1; i < len; i++){res += (min(s[i], s[0]) - '0') * _pow((s[0] - '0'), len - i - 1);if (s[i] >= s[0]) // x不是蛇形数{return res;}}return res + 1;
}void solve()
{int L, R;cin >> L >> R;cout << f(R) - f(L - 1) << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T = 1;//cin >> T;while (T--){solve();}return 0;
}

D - Snaky Walk

题意

给定\(H\)\(W\)列的网格,\(S\)代表起点,\(G\)代表终点,#代表障碍物,对每次移动进行限制:当前移动须不同于上次,即上次水平这次就要垂直。求起点到终点需要的最短步数,无解输出\(-1\)

思路

加上限制的经典\(BFS\),对于每个点需要额外记录上一次移动的状态,两次\(BFS\)即可得出答案。也可以将\(vis\)数组开成三维就不用跑两遍了,时间复杂度差不多。

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 1e3 + 5;struct node
{int x, y, step;bool d; // false代表上一步水平
};char a[mxn][mxn];
int H, W, sx, sy, gx, gy, ans = LLONG_MAX;
int xdx[] = { 1,-1 };
int xdy[] = { 0,0 };
int ydx[] = { 0,0 };
int ydy[] = { 1,-1 };void bfs(bool f)
{queue<node> q;vector<vector<bool>> vis(mxn, vector<bool>(mxn, false));q.push({ sx,sy,0,f });while (q.size()){int x = q.front().x, y = q.front().y, step = q.front().step;bool d = q.front().d;q.pop();if (x == gx && y == gy){ans = min(step, ans);}if (vis[x][y]){continue;}vis[x][y] = true;for (int i = 0; i < 2; i++){// 分水平、垂直两种走int tx = x + (d ? ydx[i] : xdx[i]);int ty = y + (d ? ydy[i] : xdy[i]);if (tx < 0 || ty < 0 || tx >= H || ty >= W || a[tx][ty] == '#'){continue;}q.push({ tx,ty,step + 1,!d });}}
}void solve()
{cin >> H >> W;for (int i = 0; i < H; i++){for (int j = 0; j < W; j++){cin >> a[i][j];if (a[i][j] == 'S'){sx = i;sy = j;}else if (a[i][j] == 'G'){gx = i;gy = j;}}}bfs(false); // 先垂直bfs(true); //先水平cout << (ans == LLONG_MAX ? -1 : ans) << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T = 1;//cin >> T;while (T--){solve();}return 0;
}

E - Digit Sum Divisible 2

题意

思路

代码

点击查看代码



比赛链接 https://atcoder.jp/contests/abc387

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

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

相关文章

班迪录屏电脑软件 Bandicam v8.0.1.2512 绿色便携解锁版

点击上方蓝字睿共享资源关注我 前言 Bandicam绿色便携版是一个很棒的视频录制软件,被很多人认为是世界上最好的三个视频录制工具之一。它的好处在于,即使你的电脑配置不是很高,或者你的电脑已经用了很多年,它都能运行得很顺畅。而且,当你用它来录制视频时,声音和画面会完…

摘樱桃II

摘樱桃II “作为一个合格的程序员,理应具有修bug修到凌晨4点的魄力” 戳我查看原题。 题目大意给定一个矩阵,矩阵中的每个数代表该点的樱桃个数。Robot1、Robot2分别从左上角与右上角出发,每次只能选择向正下方、左下方、右下方三个方向移动去采摘樱桃,到达矩阵的最后一行终…

colab上传压缩包文件,出现Unexpected end of archive问题?

Unexpected end of archive,上传图片数据集压缩包到colab上,使用命令进行解压,出现EOF错误,为啥呢?

BurpSuite实操之定序器功能使用

定序器的使用 BurpSuite的定序器是一款用于检测数据样本随机性质量的工具,通常用于检测访问令牌(sessiontoken)是否可预测、密码重置令牌是否可预测等场景,通过Sequencer的数据样本分析,能很好地降低这些关键数据被伪造的风险。操作:令牌保存到本地后查看: 我们看到token每…

G74【模板】拉格朗日插值法

视频链接:G74【模板】拉格朗日插值法_哔哩哔哩_bilibili P4781 【模板】拉格朗日插值 - 洛谷 | 计算机科学教育新生态// 拉格朗日插值法 O(n^2) #include <iostream> #include <cstring> #include <algorithm> using namespace std;#define LL long long …

【web安全】面向Web安全防护的蜜罐技术研究

摘 要 传统Web安全防护技术存在误报、漏报以及防御被动等问题,蜜罐技术的引入可有效改善此状况。本文针对面向Web安全防护的蜜罐技术进行研究,分析当前主流的Web蜜罐技术,提出蜜罐技术在Web安全防护中的应用模型,并进行了研究展望。 一、引言 随着Web2.0的发展,越来越多的…

文件筛选与提取、递归解压工具RecursiveDecompression

RecursiveDecompression是我用C#开发的一款实用工具,主要包括文件提取、递归解压缩两个功能。 假设我要把 D:\Temp\CalcNotepad 这个路径里面所有扩展名为vb的文件复制到另一个地方,一个一个复制很麻烦。 打开RD工具,选择源文件夹,然后选择目标路径D:\Test1(提前创建一个…

IT 运维服务规范(模板参考)

一、 总则 本部分规定了 IT 运维服务支撑系统的应用需求,包括 IT 运维服务模型与模式、 IT 运维服务管理体系、以及 IT 运维服务和管理能力评估与提升途径。 二、 参考标准 下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的修改单(不…

Leetcode刷题的一些记录(Java)

Leetcode刷题 一、理论: 1. 数组: https://programmercarl.com/数组理论基础.html C++中二维数组在地址空间上是连续的。 像Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。 所以看不到每个元素的地址情况,这里我以Java为例,也做一个实验。…

招行面试:亿级秒杀,超卖问题+少卖问题,如何解决?(图解+秒懂+史上最全)

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

OpenCL入门笔记

1、概述 1.1、OpenCL标准 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU、GPU、FPGA等)来加速任务,目前已被广泛应用于视频处理、医学成像、机器学习等领域。 OpenCL最初由苹果公司提出,并在与AMD、IBM…

京东自动化上传图片

背景:客户目前每天需花费2小时在京东平台上传商品图片,该过程涉及手动输入SkuId并上传相应图片。由于商品数量庞大,这一操作不仅繁琐,而且容易导致错误匹配的情况。期望:通过引入自动化工具实现京东商品图片更新的自动化处理,提高操作准确性,预计每日为客户节省2小时的人…