CodeForces Round 933 | Div3
🔥博客介绍`: 27dCnc
🎥系列专栏: <<数据结构与算法>> << 算法入门>> << C++项目>>
🎥 当前专栏: << 算法入门>>
专题 : 数据结构帮助小白快速入门算法
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆
❤️感谢大家点赞👍收藏⭐评论✍️
学习目标:
今日学习打卡
- ACM题解
学习时间:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习内容:
内容详细:
A. Rudolf and the Ticket
题目考点: 语法基础
题目意思:
我们有俩数组, B[N] , C[N] 数组,俩数组分别表示,Rudolf 左右俩个口袋的硬币,然后Rudolf 去游乐园,游乐园售票机上只能支付小于 k 个硬币,问,Rudolf 有多少种支付方式使得, B[i] + C[i] <= k;
解题思路:
暴力枚举所有情况,统计符合情况的数量
#include <string> // 字符串处理相关头文件
#include <vector> // 向量容器头文件
#include <iostream> // 输入输出流头文件
#define Run 1
#define endl "\n"
#define N 100005
#define FOR(i, j, k) for(int i(j); i <= (k); ++i)
#define ROF(i, j, k) for(int i(j); i >= (k); --i)
#define pii std::pair<int,int>
#define pll std::pair<ll, 1l>
#define ALL(v) (v).begin(),(v).end()
using namespace std;
using ll = long long;
class Solution {
public:
void solve() {
int n, m, k; std::cin >> n >> m >> k;
std::vector<ll>b(n + 10, 0);std::vector<ll>c(n + 10,0);
for (int i = 0; i < n;i++) std::cin >> b[i];
for (int i = 0; i < m; i++) std::cin >> c[i];
ll ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (b[i] + c[j] <= k) ans++;
}
}
std::cout << ans << endl;
}
public: //最小公倍数
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
//最大公约数
int gcd(int a, int b) {
return b > 0 ? gcd(b,a % b) : a;
}
public:
int IsPrime(int n) //质数判断
{
int i;
if(n<2||(n!=2&&n%2==0))//n小于2或者n是不等于2的偶数,必然非素数
return 0;
else//这里n都是奇数
{//这里使用上面刚提到的写法,用i代替开根号的过程
for(i=3;i*i<=n;i+=2)//这里注意循环条件
{//2必然不是因子,从3开始,每次递增2,直到sqrt(n)为止
if(n%i==0)
return 0;
}
return 1;
}
}
public: //快速幂
int qmi(ll a, ll b, ll p) // 对 p 取模 a的b次幂
{
ll res = 1;
while(b)
{
if (b & 1) res = res * a % p;
a = (a * a) % p,b >>= 1;
}
return res;
}
public:
int ShU(int n) {
ll ans = 0;
while(n) {
ans += (n % 10);
n /= 10;
}
return ans;
}
};
signed main() {
std::cin.tie(0) -> std::ios::sync_with_stdio(false);
std::cout.tie(0) -> std::ios::sync_with_stdio(false);
#if Run
int _;std::cin>>_;while(_-->0) Solution().solve();
#else
Solution().solve();
#endif
return 0;
}
B. Rudolf and 121
题目考点: 思维
题目意思
Rudolf有一个由 n 整数组成的数组 a,元素编号从 1 到 n。
在一个操作中,他可以选择索引 i i i ( 2 ≤ i ≤ n − 1 2 \le i \le n - 1 2≤i≤n−1) 并分配:
- a i − 1 = a i − 1 − 1 a_{i - 1} = a_{i - 1} - 1 ai−1=ai−1−1
- a i = a i − 2 a_i = a_i - 2 ai=ai−2
- a i + 1 = a i + 1 − 1 a_{i + 1} = a_{i + 1} - 1 ai+1=ai+1−1
Rudolf可以多次应用此操作。任何索引
i
i
i 都可以使用零次或多次。
他能用这个操作使数组的所有元素都等于零吗?
解题思路
根据数据关系可知道, 当我们将一个数组全变为0时
a
[
i
]
a[i]
a[i]
=
=
=
a
[
i
−
1
]
a[i-1]
a[i−1]
∗
*
∗
2
2
2
a
[
i
−
1
]
a[i-1]
a[i−1] =
a
[
i
+
1
]
a[i+1]
a[i+1]
题目难点: 该从哪里开始遍历?
应该从头开始想后遍历,然后对元素进行操作,不能通过关系直接确定否则会出现误判等情况
代码
#include<bits/stdc++.h>
#define Run 1
#define endl "\n"
#define N 100005
#define FOR(i, j, k) for(int i(j); i <= (k); ++i)
#define ROF(i, j, k) for(int i(j); i >= (k); --i)
#define pii std::pair<int,int>
#define pll std::pair<ll, 1l>
#define ALL(v) (v).begin(),(v).end()
using namespace std;
using ll = long long;
//模拟
class Solution {
public:
void solve() {
int n; std::cin >> n;
vector<ll>a(n + 10,0);
for (int i = 1; i <= n; i++) {
std::cin >> a[i]; //输入数据
}
for (int i = 2; i < n; i++) { //因为元素可以多次运用所以是 ++ 不是 += 3;
a[i] -= a[i - 1] *2; //对当前元素进行操作
a[i + 1] -= a[i - 1]; // 对前一个元素进行操作
if (a[i] < 0 || a[i + 1] < 0) {
std::cout << "NO\n"; //不满足条件排除
return ;
}
a[i - 1] = 0; //对操作元素操作
}
for (int i = 1; i <= n; i++) {
if (a[i]) {
std::cout << "NO\n"; //进行完操作检测是否合法
return ;
}
}
std::cout << "YES" << "\n";
}
public: //最小公倍数
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
//最大公约数
int gcd(int a, int b) {
return b > 0 ? gcd(b,a % b) : a;
}
public:
int IsPrime(int n) //质数判断
{
int i;
if(n<2||(n!=2&&n%2==0))//n小于2或者n是不等于2的偶数,必然非素数
return 0;
else//这里n都是奇数
{//这里使用上面刚提到的写法,用i代替开根号的过程
for(i=3;i*i<=n;i+=2)//这里注意循环条件
{//2必然不是因子,从3开始,每次递增2,直到sqrt(n)为止
if(n%i==0)
return 0;
}
return 1;
}
}
public: //快速幂
int qmi(ll a, ll b, ll p) // 对 p 取模 a的b次幂
{
ll res = 1;
while(b)
{
if (b & 1) res = res * a % p;
a = (a * a) % p,b >>= 1;
}
return res;
}
public:
int ShU(int n) {
ll ans = 0;
while(n) {
ans += (n % 10);
n /= 10;
}
return ans;
}
};
signed main() {
std::cin.tie(0) -> std::ios::sync_with_stdio(false);
std::cout.tie(0) -> std::ios::sync_with_stdio(false);
#if Run
int _;std::cin>>_;while(_-->0) Solution().solve();
#else
Solution().solve();
#endif
return 0;
}
C. Rudolf and the Ugly String
题目考点: 字符串
s.suber()
题目意思:
小白现在有一个长度为 n
白龙马,因为小白前辈天生运气与颜值逆天,在他的直觉下,发现构成白龙马的字符串,如果出现 map
和 pie
的字符串,将会给 书山小友
带来霉运,于是白前辈
找到了,宇宙最强的你,来协助他完成白龙马的美化,拯救书山小友
解题思路
用C++的函数,suber
来查找每个字符是否出现 map
和 pie
易错点:
如果出现mapie
这个时候应该进行 减少操作,因为多进行了 + 的操作
代码
#include <string> // 字符串处理相关头文件
#include <vector> // 向量容器头文件
#include <iostream> // 输入输出流头文件
#define Run 1
#define endl "\n"
#define N 100005
#define FOR(i, j, k) for(int i(j); i <= (k); ++i)
#define ROF(i, j, k) for(int i(j); i >= (k); --i)
#define pii std::pair<int,int>
#define pll std::pair<ll, 1l>
#define ALL(v) (v).begin(),(v).end()
using namespace std;
using ll = long long;
class Solution {
public:
void solve() {
int n, m, k; std::cin >> n >> m >> k;
std::vector<ll>b(n + 10, 0);std::vector<ll>c(n + 10,0);
for (int i = 0; i < n;i++) std::cin >> b[i];
for (int i = 0; i < m; i++) std::cin >> c[i];
ll ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (b[i] + c[j] <= k) ans++;
}
}
std::cout << ans << endl;
}
public: //最小公倍数
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
//最大公约数
int gcd(int a, int b) {
return b > 0 ? gcd(b,a % b) : a;
}
public:
int IsPrime(int n) //质数判断
{
int i;
if(n<2||(n!=2&&n%2==0))//n小于2或者n是不等于2的偶数,必然非素数
return 0;
else//这里n都是奇数
{//这里使用上面刚提到的写法,用i代替开根号的过程
for(i=3;i*i<=n;i+=2)//这里注意循环条件
{//2必然不是因子,从3开始,每次递增2,直到sqrt(n)为止
if(n%i==0)
return 0;
}
return 1;
}
}
public: //快速幂
int qmi(ll a, ll b, ll p) // 对 p 取模 a的b次幂
{
ll res = 1;
while(b)
{
if (b & 1) res = res * a % p;
a = (a * a) % p,b >>= 1;
}
return res;
}
public:
int ShU(int n) {
ll ans = 0;
while(n) {
ans += (n % 10);
n /= 10;
}
return ans;
}
};
signed main() {
std::cin.tie(0) -> std::ios::sync_with_stdio(false);
std::cout.tie(0) -> std::ios::sync_with_stdio(false);
#if Run
int _;std::cin>>_;while(_-->0) Solution().solve();
#else
Solution().solve();
#endif
return 0;
}
ok只会前3题后序题目,以后补 😁(❁´◡`❁)
学习产出:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个
本文作者:2c237c6
本文链接:https://www.cnblogs.com/27dCnc/p/18568612
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步