Codeforces Round 1004 (Div. 2)

news/2025/2/12 0:36:30/文章来源:https://www.cnblogs.com/maburb/p/18710789

A. Adjacent Digit Sums

题意:求有没有一个数字各位和为\(x\),并且加一后各位和为\(y\)

发现一个数加一后,要么和加一,要么进若干位,就是减若干个9然后加1。所以判断\(y == x + 1 || (x - y + 1) \% 9 == 0\)

点击查看代码
void solve() {int x, y;std::cin >> x >> y;if (y == x + 1 || (y < x) && (x - y + 1) % 9 == 0) {std::cout << "YES\n";} else {std::cout << "NO\n";}
}

B. Two Large Bags

题意:有两个袋子,开始第一个袋子有\(n\)个数,你每次可以给一个数给另一个袋子,或者选一个数使得两个袋子都至少有一个这个数然后让第一个袋子里的这个数加一。最后要让两个袋子的数相等。

发现值域和\(n\)同级别,于是可以开个数组记录每个数的出现次数。然后从小到大枚举,尽可能让数字加一。因为至少要一个袋子都有一个,所以每个数要留两个,其余的都加一,如果只有1个这个数,那么说明不可能有数变成它了,就是no。模拟即可。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}std::vector<int> cnt(2 * n);for (int i = 0; i < n; ++ i) {++ cnt[a[i]];}for (int i = 1; i < 2 * n; ++ i) {if (cnt[i] == 1) {std::cout << "NO\n";return;} else if (cnt[i] > 2) {cnt[i + 1] += cnt[i] - 2;}}std::cout << "YES\n";
}

C. Devyatkino

题意:给你一个\(n\),你每次可以给它加上一个各位都是9的数。求让\(n\)至少有一位是7的最少操作个数。

一个位置加上9其值一定会改变,发现\(6\)要加9次9能变成7,这是最多的情况,但考虑可能有进位的情况,可能需要加更多次。于是枚举加什么数,然后一直加每次判断\(n\)有没有出现7,记录最小次数就行。至于加多少次,应该不到10次,不过为了保险可以加20次。

点击查看代码
void solve() {i64 n;std::cin >> n;auto check = [&](i64 x) -> bool {while (x) {if (x % 10 == 7) {return true;}x /= 10;}return false;};int ans = 100;for (i64 m = 9; m <= 1e17; m = m * 10 + 9) {i64 x = n;int sum = 0;int t = 20;while (t -- && !check(x)) {x += m;++ sum;}if (check(x)) {ans = std::min(ans, sum);}}std::cout << ans << "\n";
}

D. Object Identification

题意:交互题。给你值域为\([1, n]\)的数组\(x\),还隐藏了一个值域为\([1, n]\)的数组\(y\),没有一对\(x, y\)是相同的。有两种情况,一种是\(x_i\)\(y_i\)连有向边,一种是\(i\)代表坐标\((x_i, y_i)\)。你不知道是哪种情况,你可以询问最多两次。每次问一个\(i, j\),如果是第一种情况会返回\(i\)\(j\)的最短路,如果是第二种情况返回\((x_i, y_i), (x_j, y_j)\)的曼哈顿距离。

先看有没有1到n的数没有出现,如果有则他没有出边,随便问一个点,如果是第一种情况答案肯定是0,否则是第二种情况。
如果都出现过,就记\(i, j\)记录\(1\)\(n\)出现的位置,然后询问\(1, n\)\(n, 1\),因为只有\(n\)条边,所以如果是情况一两个回答必有一个小于\(n-1\),否则是情况二。

点击查看代码
int ask(int i, int j) {std::cout << "? " << i << " " << j << std::endl;int res;std::cin >> res;return res;
}void solve() {int n;std::cin >> n;std::vector<int> a(n);std::vector<int> st(n + 1);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}int p1 = 0, pn = 0;for (int i = 0; i < n; ++ i) {st[a[i]] = 1;if (a[i] == 1) {p1 = i + 1;}if (a[i] == n) {pn = i + 1;}}for (int i = 1; i <= n; ++ i) {if (!st[i]) {int j = 1;while (j == i) {++ j;}if (ask(i, j) == 0) {std::cout << "! A" << std::endl;} else {std::cout << "! B" << std::endl;}return;}}if (ask(p1, pn) < n - 1 || ask(pn, p1) < n - 1) {std::cout << "! A" << std::endl;} else {std::cout << "! B" << std::endl;}
}

E. White Magic

题意:给你一个数组,你要选一个子序列\(a\)使得任意前缀的最小值大于等于其后缀的\(mex\)。问最多选几个数。

首先,只可能选一个0,不然如果一个0在前缀,一个0在后缀,必然不满足条件。
然后,如果不选0则可以选所有非0的数,因为任意后缀的\(mex=0\)。那么我们就需要就选了所有非0数后能不能再选一个0。发现如果0在后面,对所有后缀的\(mex\)的影响更大,所以应该尽可能让0在前面,于是求出所有后缀的\(mex\),然后从前往后枚举,直到第一个0,使得这个0的前面的每个前缀最小值都大于等于后缀\(mex\)

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n + 1);for (int i = 1; i <= n; ++ i) {std::cin >> a[i];}std::vector<int> suf(n + 2);std::set<int> s;int mex = 0;for (int i = n; i ; -- i) {s.insert(a[i]);while (s.count(mex)) {++ mex;}suf[i] = mex;}std::vector<int> pre(n + 1);pre[0] = 2e9;for (int i = 1; i <= n; ++ i) {pre[i] = pre[i - 1];if (a[i] != 0) {pre[i] = std::min(pre[i], a[i]);}}int ans = 0;bool flag = true;for (int i = 1; i <= n && a[i] != 0; ++ i) {if (pre[i] < suf[i + 1]) {flag = false;break;}}if (flag && mex > 0) {++ ans;}for (int i = 1; i <= n; ++ i) {ans += a[i] != 0;}std::cout << ans << "\n";
}

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

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

相关文章

短信验证码爆破

漏洞原理 短信验证码验证时间和次数无限制,存在爆破可能 短信验证码有效期:5~10min,验证码位数4位或6位,纯数字 破解方式:使用枚举逐个尝试 使用BP爆破短信验证码可以先用已有手机号确认验证码位数2.发送验证码后将验证码输入,然后登陆抓包后续和爆破操作一致如果字典太大…

【洛谷P1955】程序自动分析[NOI2015]

今天开始学习并查集 什么是并查集呢?顾名思义,就是动态维护一个方便进行合并和查找的集合 我们采用的是树状结构 也就是说,对于一开始的每个元素 它的爸爸是它自己 然后在输入两个元素的从属关系的时候,通过路径压缩,把它的爸爸直接连到根节点 因为我们只关心这个元素在这…

chorme 系统代理设置

https 需要证书 1.使用BurpSuite导出CA证书,文件导出到本地2. 谷歌浏览器添加证书 谷歌浏览器->设置->搜索"证书"->安全->管理证书->管理从windows导入的证书->受信任的根证书颁发机构->导入第一步的证书3.设置系统代理 windows系统->设置-…

picachu 越权漏洞

1. 水平越权 1.查看提示信息,提供了3个普通用户2. 登陆其中一个账户,并查看个人信息3.根据url 可以看出有用户名信息,尝试在URL中更改其他账户名,发现查看到其他用户的信息4.再次点击查看个人信息按钮,信息更改为已登陆的用户的信息5. 查看源代码发现第27行username 的值是…

windows使用Makefile时自动给可执行文件加上.exe后缀

APP := main在使用makefile的时候,一般通过变量设置自己想要编译出来的可执行文件的名字在windows平台编译出来的可执行文件是需要.exe后缀的识别当前操作系统 通过识别当前的操作系统是什么,从而确定是否添加这个后缀在windows系统中,有这个环境变量说明自己的系统是windows而…

pikachu 验证码绕过 onclient

前端生成的验证码,无论验证码是否正确,都不影响发送到服务器结果(刷新验证码不会通过BP,没有对应的请求出现) 前端验证码逻辑:输入账号密码验证码,如果验证码正确,数据将发送给服务器;如果验证码不正确,数据不会发送给服务器 1.查看页面源代码,发现是前端生成验证码…

图片验证码绕过(验证码不失效) - 使用验证码识别插件

使用BP抓包,抓到的包没有验证码请求添加过滤图片,出现图片验证码请求包添加captcha-killer-modified 插件,识别图片验证码验证码识别服务按照下面链接操作 https://www.cnblogs.com/mr-ryan/p/17812482.html 文档中的ocr_api_server 使用这个链接:https://gitee.com/yijing…

弱口令暴力破解

使用vulhub/tomcat/tomcat8 靶场点击Manager App按钮,提示登陆,输入用户名密码通过BP抓取提交用户名密码的请求报文,获取Authorization信息将Authorization 发送到解码器解码 ,使用Base64 解码成功(一般Base64 编码最后会带= 或者 ==), 解码后知道了发送的密码规则添加Aut…

攻防世界-RE-CatFly

我们将文件拖入虚拟机中运行看到这样的效果 其中上方的数字是不停变化的,下面的次数也在不断的增长。我们猜测这两者是有关联的。 接下来我们进行反编译程序的分析。最上面的字符输出肯定是与printf函数有关,所以我们检索printf在main函数中的调用time(&timer);v13 = 1;v…

Maui 内嵌网页直接调用本机原生功能 Demo

使用 MAUI 制作 H5 套壳程序有以下几个好处:跨平台支持:MAUI (Multi-platform App UI) 允许开发者在多个平台(如 iOS、Android、Windows 和 macOS)上运行应用程序。统一封装的MauiPlus库可以统一调用本机功能,确保在不同平台上有一致的用户体验。访问本地功能:MauiPlus库…

Deepseek最强白嫖指南-通过GROQ调用api使用deepseek-70B模型

众所周知最近deepseek很火,非常火!火出圈,各种博主割韭菜也是割到爆炸💥! 今天给大家写一个通过Groq调用Free api来使用deepseek的70B模型。当然不止这一个模型!DeepSeek-70B 是一款强大的大语言模型,您可以通过 Groq 提供的 API 免费调用该模型。以下是详细的教程,指…

【DeepSeek】本地DeepSeek下载慢,中断、内网无法安装方案来了

最近在群里有不少人反馈,ollama安装deepseek有以下几个问题。 1,特别慢,或者多次中断,导致下载不下来 2,无魔法 3,想在内网环境安装,没有网络 我研究了下解决方案。通过已经下载的模型,可以直接导入。 反向解析模型 查看本地的模型 ollama listNAME …