AtCoder Beginner Contest 386

news/2025/1/24 17:10:32/文章来源:https://www.cnblogs.com/Seii/p/18679738


A - Full House 2

题意

\(4\)个整数,问能否添加一个整数使得恰有\(3\)个整数\(a\)\(2\)个整数\(b\)

思路

模拟

代码

点击查看代码
#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, C, D;cin >> A >> B >> C >> D;map<int, int> m;m[A]++;m[B]++;m[C]++;m[D]++;int a = 0; int b = 0; for (const auto& i : m){if (i.second == 3) {a++;}else if (i.second == 2) {b++;}}if (a > 0 || b >= 2) {cout << "Yes" << endl;}else {cout << "No" << 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 - Calculator

题意

基础字符"\(00, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\)"。给定字符串\(s\),求其最少由多少基础字符组成

思路

模拟

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 1e6 + 5;void solve()
{string s;cin >> s;if (s.find('0') == -1){cout << s.size();return;}int cnt = 0, ans = s.size();for (int i = 0; i < s.size(); i++){if (s[i] == '0'){if (cnt){cnt = 0;ans--;}else{cnt++;}}else{cnt = 0;}}cout << 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;
}

C - Operate 1

题意

在字符串\(s\)中进行不超过\(1\)次操作:插入、删除、替换一个字符,判断是否有可能使得\(s=t\)

思路

由于最多只能操作一次,所以\(s\)\(t\)的长度最多相差\(1\)(增/删一次);长度相同,最多只能有一个字符不同(替换一次);长度不同,只能是长串中多出一个字符,其他有不一样就无解

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 1e6 + 5;void solve()
{int k;string s, t;cin >> k >> s >> t;if (s == t){cout << "Yes" << endl;return;}int ss = s.size(), tt = t.size();if (abs((int)ss - (int)tt) > 1){cout << "No" << endl;return;}if (ss == tt){int cnt = 0;for (int i = 0; i < ss; i++){if (s[i] != t[i]){cnt++;if (cnt > 1){cout << "No" << endl;return;}}}cout << "Yes" << endl;return;}int cnt = 0;for (int i = 0, j = 0; i < s.size() && j < t.size(); i++, j++){if (s[i] == t[j]){continue;}cnt++;if (cnt > 1){cout << "No" << endl;return;}if (s.size() > t.size()){i++;}else{j++;}}cout << "Yes" << 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 - Diagonal Separation

题意

给定\(n×n\)的网格,起初有\(m\)格被染色(给出\(x,y\)和颜色)。现在要讲所有格子都染成黑色或白色,使得:对于每一行,存在一个\(i\)使得第\(i\)格及其左边全是黑色,其余是白色;对于每一列,存在一个\(j\)使得\(j\)及其上边全是黑色,其余是白色。问是否能满足要求。

思路

显然对于最开始被染成黑色的格子,在它的左上区域(\(x\le x_i\)\(y\le y_i\))都不能有白色。那只要记录最左以及最上的白色格子位置,看有没有黑格子在其右、下即可。由于先以\(x\)升序排序,故只需记录最靠上的白格即可

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 2e5 + 5;struct node
{int x, y;char ch;bool operator < (const node& a){if (x == a.x){return y < a.y;}return x < a.x;}
};void solve()
{int n, m;cin >> n >> m;vector<node> v(m);for (int i = 0; i < m; i++){int x, y;char ch;cin >> x >> y >> ch;x--, y--;v[i].x = x, v[i].y = y, v[i].ch = ch;}sort(v.begin(), v.end());int min_y = 1e18;for (int i = 0; i < m; i++){int x = v[i].x;int y = v[i].y;char ch = v[i].ch;if (ch == 'W'){min_y = min(min_y, y);}else if (min_y <= y){cout << "No" << endl;return;}}cout << "Yes" << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int __ = 1;//cin >> __;while (__--){solve();}return 0;
}

E - Maximize XOR

题意

给定大小为\(n\)的非负数序列\(A\),从中选\(k\)个元素进行异或,求异或的最大值,即求:

思路

题目保证\(C_n^k\le 10^6\),对于较小的\(k\)可以直接枚举(\(dfs\));对于较大的\(k\)可以反过来,先求出所有元素的异或和,枚举不需要的元素

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;const int mxn = 2e5 + 5;
int n, k, ans = -1;
vector<int> a;void dfs(int p, int res, int m)
{if (!m){ans = max(ans, res);return;}if (p == n) // 没选够{return;}dfs(p + 1, res ^ a[p], m - 1);dfs(p + 1, res, m);
}void solve()
{int tot = 0;cin >> n >> k;a.resize(n);for (int i = 0; i < n; i++){cin >> a[i];tot ^= a[i];}if (k <= n - k){dfs(0, 0, k);}else{dfs(0, tot, n - k);}cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int __ = 1;//cin >> __;while (__--){solve();}return 0;
}


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

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

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

相关文章

Iceberg治理服务Amoro---配置Prometheus + Grafana看板

一、基础资料 1、mac安装Prometheus + Grafana https://www.cnblogs.com/robots2/p/18689540 2、配置文档 https://amoro.apache.org/docs/0.7.1/deployment/#configure-metric-reporter 3、Grafana配置内容 https://github.com/apache/amoro/blob/master/grafana/dashboard.js…

【Python】查找两个表格是否存在相同元素

其实就是字典的应用,把其中一个表格做成字典(将需要查询的元素设为字典的键),然后读取另一个表格逐个在字典中查找 表1:表2:import openpyxlwb1 = openpyxl.load_workbook(r"C:\Users\Lenovo\Desktop\表1.xlsx") ws1 = wb1["Sheet1"] wb2 = openpyxl…

git分支提交,提PR

远程分支xxx,临时分支tmp_xxx git checkout -b tmp_xxx   #创建并进入临时分支 git pull origin xxx      #更新本地code git add .          git commit -m "test pr" git push --set-upstream origin tmp_xxx #github上现在能看到这个临时…

Hibernate Validator 国际化开启快速校验配置

这里默认你已经配置好了国际化,如需配置可以参考 网上其他配置,这里只做快速失败国际化配置@Configuration public class ValidConfig {@Beanpublic Validator validator() {     // 这里是读取你的国际化配置文件做缓存MessageInterpolator messageInterpolator = new R…

AQS学习笔记

一、使线程进入等待状态和唤醒状态的三种方法 1、使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程,需配合synchronized关键字使用 2、使用JUC包中的Condition的await()方法让线程等待,使用signal()方法唤醒线程 3、LockSupport类可以阻塞当前线程以…

Oracle安装指南 Xming远程桌面

安装Xming然后使用Oracle用户连接登录,设置DISPLAY环境变量(IP地址为你的windows客户端IP地址) export DISPLAY=192.168.111.155:0.0然后执行dbca就会弹出数据库配置界面了参考链接:https://www.cnblogs.com/iancloud/p/15015683.html

P4070 [SDOI2016] 生成魔咒

P4070 [SDOI2016] 生成魔咒 题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示。例如可以将魔咒字符 \(1,2\) 拼凑起来形成一个魔咒串 \([1,2]\)。 一个魔咒串 \(S\) 的非空字串被称为魔咒串 \(S\) 的生成魔咒。 例如 \(S=[1,2,1]\) 时,它的生成魔咒有 \([1],[2],[1…

深入探讨触发器的创建与应用:数据库自动化管理的强大工具

title: 深入探讨触发器的创建与应用:数据库自动化管理的强大工具 date: 2025/1/24 updated: 2025/1/24 author: cmdragon excerpt: 触发器是一种强大的数据库对象,它能够在特定事件发生之前或之后自动执行一组SQL语句。作为一种自动化管理工具,触发器在许多数据库管理场景…

Metasploit Pro 4.22.7-2025012201 (Linux, Windows) - 专业渗透测试框架

Metasploit Pro 4.22.7-2025012201 (Linux, Windows) - 专业渗透测试框架Metasploit Pro 4.22.7-2025012201 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, released Jan 22, 2025 请访问原文链接:https://sysin.org/blog/metasploit-pro-4/ 查看最新版。…

VS.net中快捷键收缩和展开代码段

i. Ctrl-M-O 折叠所有方法 ii. Ctrl-M-P 展开所有方法并停止大纲显示(不可以再折叠了) iii. Ctrl-M-M 折叠或展开当前方法 iv. Ctrl-M-L展开所有方法 其他的快捷方式:怎样跳转到指定的某一行? 两种方法:Ⅰ. Ctrl+G Ⅱ. 双击状态栏中的行号2.. 怎样创建矩形选区? 两…

查看Resources.resx的三种方式

同一个Resources.resx文件在Visual Studio 中可以以多种方式查看, 但某一天遇到了问题, 只能以资源浏览器的方式查看, 期初还以为是Visual Studio升级加入的新功能, 怎么都无法打开设计器, 在Resources.resx文件右键菜单中看不到下面的菜单项,经过一些列的摸索, 发现设置…

Vmware 虚拟机克隆注意事项-CentOS7

1.克隆后修改MAC地 2.修改 UUID,UUID克隆虚拟机后一般是一样的,需要进行修改 输入命令uuidgen,将生成的UUID写入ifcfg-ens33 【文件位置:/etc/sysconfig/network-scripts/ifcfg-ens33】 【我克隆的时候并没有修改,但是也一样可以联网,不知道为啥】 3.修改主机名 先临时修…