UNIQUE VISION Programming Contest 2025 Spring (AtCoder Beginner Contest 398) (A~F) 补题+题解
A - Doors in the Center
签到题,直接构造即可。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
signed main() {
int n;
cin >> n;
if (n % 2 == 1) {
for (int i = 1; i <= n / 2; i++) {
cout << '-';
}
cout << "=";
for (int i = 1; i <= n / 2; i++) {
cout << '-';
}
} else {
for (int i = 1; i <= n / 2 - 1; i++) {
cout << '-';
}
cout << "==";
for (int i = 1; i <= n / 2 - 1; i++) {
cout << '-';
}
}
}
/*
*/
B - Full House 3
有两种三个以上的相同的或者一种三个以上相同一种两个以上相同便可以满足葫芦的条件。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
signed main() {
int n = 7;
map<int, int> mp;
set<int> se;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
mp[x]++;
se.insert(x);
}
int f = 0, ff = 0;
for (auto t : se) {
if (mp[t] >= 3) f++;
else if (mp[t] >= 2) ff++;
}
if (f >= 2 || (f == 1 && ff >= 1)) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
/*
*/
C - Uniqueness
暴力枚举。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
signed main() {
int n;
cin >> n;
map<int, int> mp;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
mp[a[i]]++;
}
int ans = -1, id = -1;
for (int i = 1; i <= n; i++) {
if (mp[a[i]] == 1) {
if (a[i] > ans) {
ans = a[i];
id = i;
}
}
}
cout << id << '\n';
}
/*
*/
D - Bonfire
\((0,0)\)点每次都会刷新新的烟雾,对于每次移动是否可以覆盖高桥只需要看前面哪个刷新的烟雾可以到达高桥,如果有则是1,没有则是0。
实现上可以用两个\(sum\)数组记录东西和南北的移动量,二分去查找。
当然其实也有实现更简便的方法。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, r, c;
cin >> n >> r >> c;
string s;
cin >> s;
//n r-1
//w c-1
//s r+1
//e c+1
s = ' ' + s;
vector<int> sum1(n + 1), sum2(n + 1);
for (int i = 1; i <= n; i++) {
sum1[i] = sum1[i - 1], sum2[i] = sum2[i - 1];
if (s[i] == 'N') sum1[i] -= 1;
if (s[i] == 'S') sum1[i] += 1;
if (s[i] == 'W') sum2[i] -= 1;
if (s[i] == 'E') sum2[i] += 1;
}
// for (int i = 1; i <= n; i++) {
// cout << sum1[i] << " \n"[i == n];
// }
// for (int i = 1; i <= n; i++) {
// cout << sum2[i] << " \n"[i == n];
// }
map<pair<int, int>, vector<int>> mp;
mp[ {0, 0}].push_back(1);
for (int i = 1; i <= n; i++) {
mp[ {sum1[i], sum2[i]}].push_back(i + 1);
}
string ans;
for (int i = 1; i <= n; i++) {
int x = sum1[i], y = sum2[i];
int nex = x - r, ney = y - c;
if (mp[ {nex, ney}].size() == 0 ) {
ans += "0";
continue;
}
if (mp[ {nex, ney}].back() <= i) {
ans += "1";
continue;
}
int l = upper_bound(mp[ {nex, ney}].begin(), mp[ {nex, ney}].end(), i) - mp[ {nex, ney}].begin();
if (mp[ {nex, ney}][l] <= i) ans += "1";
else {
if (l != 0) l--;
else {
ans += "0";
continue;
}
if (mp[ {nex, ney}][l] <= i) ans += "1";
}
}
cout << ans << '\n';
}
/*
10 1 2
NEESESWEES
2 2
2 1
2 0
6 -2 1
NNEEWS
*/
E - Tree Game
交互题,通过对每个点\(bfs\)可以将所有 $u ->v $ 经过点集为偶数的组合记录下来,如果组合的数量是奇数那么是\(first\),否则是\(second\)。然后根据对手操作输出合适的\((u,v)\)。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
vector<vector<int>> g(n + 10);
vector<int> d(n + 10), e(n + 10);
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
d[u]++;
e[v]++;
g[u].push_back(v);
g[v].push_back(u);
}
queue<pair<int, int>> qq;
map<pair<int, int>, int> mp;
for (int i = 1; i <= n; i++) {
vector<int> st(n + 1), dis(n + 1, 0);
queue<int> q;
q.push(i);
st[i] = 1;
while (q.size()) {
int u = q.front();
q.pop();
for (auto v : g[u]) {
if (st[v] == 0) {
q.push(v);
st[v] = 1;
dis[v] = dis[u] + 1;
}
}
}
for (int j = 1; j <= n; j++) {
// cout << dis[j] << " \n"[j == n];
if (j != i) {
if ((dis[j] + 1) % 2 == 0 && dis[j] + 1 != 2) {
if (mp[ {i, j}] == 0) {
qq.push({i, j});
mp[ {i, j}] = 1;
mp[ {j, i}] = 1;
}
}
}
}
}
map<pair<int, int>, int> st;
// cout << qq.size() << '\n';
if (qq.size() % 2 == 1) {
cout << "First" << endl;
while (qq.size()) {
while (qq.size() && st[qq.front()] == 1) qq.pop();
pair<int, int> t = qq.front();
qq.pop();
cout << t.first << ' ' << t.second << endl;
int u, v;
cin >> u >> v;
st[ {u, v}] = 1;
st[ {v, u}] = 1;
if (u == -1 && v == -1) return 0;
}
} else {
cout << "Second" << endl;
while (qq.size()) {
int u, v;
cin >> u >> v;
st[ {u, v}] = 1;
st[ {v, u}] = 1;
if (u == -1 || v == -1) return 0;
while (qq.size() && st[qq.front()] == 1) qq.pop();
if (qq.size() == 0)return 0;
pair<int, int> t = qq.front();
qq.pop();
cout << t.first << ' ' << t.second << endl;
}
int u, v;
cin >> u >> v;
if (u == -1 && v == -1) return 0;
}
return 0;
}
/*
6
1 2
2 3
3 4
4 5
5 6
5
1 2
1 3
2 4
2 5
*/
F - ABCBA
这个题就是比较简单,很容易想到找最长的 \([l,n]\) 回文串,代码实现使用的哈希。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned long long
const int N = 1e6 + 10, base = 13331;
ull hs[N], pa[N], fhs[N], fpa[N];
ull get(int l, int r) {
return hs[r] - hs[l - 1] * pa[r - l + 1];
}
ull getf(int l, int r) {
return fhs[r] - fhs[l - 1] * fpa[r - l + 1];
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
string s;
cin >> s;
string yu = s;
int n = s.size();
s = ' ' + s;
pa[0] = 1, fpa[0] = 1;
for (int i = 1; i <= n; i++) {
pa[i] = pa[i - 1] * base;
hs[i] = hs[i - 1] * base + s[i];
}
reverse(yu.begin(), yu.end());
string fs = yu;
reverse(yu.begin(), yu.end());
fs = ' ' + fs;
for (int i = 1; i <= n; i++) {
fpa[i] = fpa[i - 1] * base;
fhs[i] = fhs[i - 1] * base + fs[i];
}
int k = n;
for (int i = 1; i <= n; i++) {
ull a = get(i, n);
ull b = getf(1, n - i + 1);
if (a == b) {
k = i - 1;
break;
}
}
string ans = yu;
for (int i = k; i >= 1; i--) {
ans += s[i];
}
cout << ans << '\n';
}
/*
*/
UNIQUE VISION Programming Contest 2025 Spring (AtCoder Beginner Contest 398) (A~F) 补题+题解的更多相关文章
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- HHKB Programming Contest 2022 Winter(AtCoder Beginner Contest 282)
前言 好久没有打 AtCoder 了.有点手生.只拿到了 \(\operatorname{rk}1510\),应该上不了多少分. 只切了 \(\texttt{A,B,C,D}\) 四题. A - Ge ...
- AtCoder Beginner Contest 255(E-F)
Aising Programming Contest 2022(AtCoder Beginner Contest 255) - AtCoder E - Lucky Numbers 题意: 给两个数组a ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 068 ABCD题
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- atcoder beginner contest 251(D-E)
Tasks - Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)\ D - At Most 3 (Contestant ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
随机推荐
- CDS标准视图:维护通知活动信息 I_MaintNotificationActyData
视图名称:维护通知活动信息 I_MaintNotificationActyData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'INOTIFACTY ...
- Java方法引用、lambda如何序列化&方法引用与lambda底层原理
系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io. ...
- sax, dom, jdom技术对比
---- sax, dom, jdom技术的优缺点比较 SAX分析器在对XML文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对XML文档的访问.由于事件触发本身是有时序性的,因此,SA ...
- Linux 开发环境常用配置
记录下我个人 Linux 开发环境常用配置,后续可以简单写个小脚本可以把一系列安装配置操作自动化一把. zsh install & conf https://blog.csdn.net/amo ...
- Pycharm:鼠标滚动控制字体大小
Pycharm字体放大的设置 1.File -> setting -> Keymap ->在搜寻框中输入:increase -> Increase Font Size(双击) ...
- Jetpack架构组件学习(6)——使用Glance实现桌面小组件
原文地址: Jetpack架构组件学习(6)--使用Glance实现桌面小组件-Stars-One的杂货小窝 公司陆续整了几个Compose写的app,有个小组件的功能,顺便试了下Jetpack库里的 ...
- 一探究竟!天翼云2023MWC展区“亮”了!
6月28日,2023MWC上海世界移动通信大会(简称"MWC上海")在上海新国际博览中心启幕.中国电信开设"数智万融 畅享未来"主题展区,从科技创新.安全筑防及 ...
- tomcat 自启动脚本(守护模式)
tomcat以daemon模式启动 跳转到最新脚本 1.jsvc简介 Jsvc 是专为 Java 应用程序开发的一个工具包,其目标是把 Java 应用程序的普通运行转换为可以配置某个普通用户以 Uni ...
- SQL优化的20条军规
前言 作为一个写SQL的程序员,代码写得好不好是一回事,但SQL写得烂,性能拉胯,全公司都得为你的慢查询买单,尤其在大数据量表上,SQL写不好就是"内鬼"级别的错误. 今天不整那些 ...
- -bash: ./run.sh: /bin/bash^M: bad interpreter: No such file or directory 报错解决方法