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 ...
随机推荐
- [LC1260]二维网格迁移
二维网格迁移 题目描述 给你一个 m 行 n 列的二维网格 grid 和一个整数 k.你需要将 grid 迁移 k 次. 每次「迁移」操作将会引发下述活动: 位于 grid[i][j] 的元素将会移动 ...
- 小程序IOS系统input设置maxlength时,输入到最后如果输入汉字的拼音长度超过限制会直接中断输入(bug bug)
我的解决办法:不在输入框限制长度,在提交表单的时候判断长度,欢迎大家有好的解决方法分享一下
- CDS标准视图:维护项目数据 C_MaintenanceItemDEX
视图名称:维护项目数据 C_MaintenanceItemDEX 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'CMAINTITEMDEX' @Aba ...
- Docker npm install:npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY 。。reason: unable to get local issuer certificate 解决办法
这个是需要证书导致无法连接,临时解决办法是设置 npm set strict-ssl=false 在 Dockerfile文件里的 RUN npm install 之前添加 RUN npm set ...
- 分布式事务-XA-DTP-TCC-BASE介绍
前言 数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 事务拥有以下四个特性,习惯上被称为 ACID 特性: 原子性(Atomici ...
- sax, dom, jdom技术对比
---- sax, dom, jdom技术的优缺点比较 SAX分析器在对XML文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对XML文档的访问.由于事件触发本身是有时序性的,因此,SA ...
- C#遍历获取文件夹下所有文件
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using ...
- 面向对象-下(复习:关键字static、单例模式、main()的使用说明、类的结构代码块、属性的赋值顺序、关键字final)
一.关键字:static static:静态的1.可以用来修饰的结构:主要用来修饰类的内部结构属性.方法.代码块.内部类2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用stati ...
- Kali 关闭自动锁屏功能
Kali 关闭自动锁屏功能 1.点击 [开始] -> [设置] -> [电源管理器] 2.选择 [安全性],将 [自动锁定会话] 选为 [从不],将 [当系统休眠时锁定屏幕] 取消勾选,点 ...
- Amoro提供grafana的metrics介绍
一.指标内容 +| Metric Name | Type | Tags | Description | +|---------------------------------------------- ...