Codeforces Round 834 (Div. 3)
Codeforces Round 834 (Div. 3)
A. Yes-Yes?
题意:就是Y后面跟e,e后面跟s,s后面跟Y
#include <iostream>
using namespace std;
void solve() {
string x;
cin >> x;
int l = x.size();
if(l==1){
if(x[0]!='Y'&&x[0]!='e'&&x[0]!='s'){
cout<<"NO\n";
return;
}
}
for (int i = 0; i < l - 1; i++) {
if (x[i] == 'Y') {
if (x[i + 1] != 'e') {
cout << "No\n";
return;
}
continue;
}
if (x[i] == 'e') {
if (x[i+1] != 's') {
cout << "No\n";
return;
}
continue;
}
if (x[i] == 's') {
if (x[i+1] != 'Y') {
cout << "No\n";
return;
}
continue;
}
cout << "No\n";
return;
}
cout << "Yes\n";
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
B. Lost Permutation
题意:给一段数组,添加x个数(x随便)总和一定,求是否后面可以变成一个排列
思路:拿一个来记录之前的,然后减就行
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, x;
vector<bool> a(n + 100, false);
cin >> n >> x;
int ma = 0;
for (int i = 0; i < n; i++) {
int b;
cin >> b;
ma = max(ma, b);
a[b] = true;
}
for (int i = 1; i < ma; i++) {
if (!a[i]) {
x -= i;
}
}
while (x > 0) {
x -= ++ma;
}
if (x == 0) {
cout << "YES\n";
} else {
cout << "NO\n";
}
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
C. Thermostat
题意:最小变化是x,范围a-b
思路:很明显就是三种情况ifelse就行
#include <bits/stdc++.h>
using namespace std;
void solve() {
int l, r, x;
cin >> l >> r >> x;
int a, b;
cin >> a >> b;
if (a == b) {
cout << "0\n";
return;
}
if (abs(a - b) >= x) {
cout << "1\n";
return;
}
int x1 = a - l, x2 = b - l, y1 = r - a, y2 = r - b;
if ((x1 >= x && x2 >= x) || (y1 >= x && y2 >= x)) {
cout << "2\n";
return;
}
int ma1 = max(x1, y1), ma2 = max(x2, y2);
if (ma1 >= x && ma2 >= x) {
cout << "3\n";
return;
}
cout << "-1\n";
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
D. Make It Round
有人当sb把mn输反了
题意:求有最多0的数
思路:相当于找10的指数次方倍,满足
$$
t/gcd(t,n) \leq m的最大值t,假设d=t/gcd(t,n),n扩大(m/d)*d倍时就是所求
$$
板子:
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
void solve() {
int m, n;
cin >> n >> m;
int t = 1;
while (t / gcd(t, n) <= m) t *= 10;
t /= 10;//多乘了一个
int d = t / gcd(t, n);
cout << n * (m / d) * d << endl;
}
signed main() {
int t;
cin >> t;
while (t--) {
solve();
}
}
E. The Humanoid
题意:吸收一名力量严格小于人形力量的宇航员; 如果还有绿色血清,则使用绿色血清,使用蓝色血清,如果还有剩余的话。在不使用血清的情况下吸收到的就是a[i]/2,使用绿色血清就是×2蓝色血清×3
思路:就是一道dfs遍历就行(补题的时候一看如此简单在想为什么没写--当傻逼了,没读这题,D数学证明想太久了还犯了个致命错误)
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[200010];
int n;
int dfs(int st, int green, int blue, int h) {
int res = 0;
for (int i = st; i <= n; i++) {
if (a[i] < h) {
h += a[i] / 2;
res++;
} else {
int ch = 0;
if (green) {
ch = max(ch, dfs(i, green - 1, blue, h * 2));
}
if (blue) {
ch = max(ch, dfs(i, green, blue - 1, h * 3));
}
return ch + res;
}
}
return res;
}
void solve() {
int h;
cin >> n >> h;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
cout << dfs(1, 2, 1, h) << "\n";
}
signed main() {
int t;
cin >> t;
while (t--) {
solve();
}
}
分类:
codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话