当前位置: 首页 > news >正文

Codeforces Round 957 (Div. 3)(A~D题)

A. Only Pluses

 

 思路:

优先增加最小的数,它们的乘积会是最优,假如只有两个数a和b,b>a,那么a + 1,就增加一份b。如果b + 1,只能增加1份a。因为 b > a,所以增加小的数是最优的。

代码:

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
typedef long long ll;
typedef unsigned long long ull;
ll n, m, t, h, k;
ll a, b, c;
ll ans, num, sum1,sum,sum2, cnt;
ll dp[N], f1[N], f2[N];
ll mp[105][105];
bool flag, vis[N];
string s, ss;
void solve()
{ll x;vector<ll>q;for (int i = 1; i <= 3; i++){cin >> x;q.push_back(x);}for (int i = 1; i <= 5; i++){sort(q.begin(), q.end());q[0]++;}cout << q[0] * q[1] * q[2] << endl;;
}
int main()
{cin >> t;while (t--) {solve();}return 0;
}

B. Angry Monk

思路:

贪心思想,最长的片段作为基础片段,其他长度的片段都要经历分解+组合两种操作(除长度为1的片段外),直接计数即可.

代码:

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
typedef long long ll;
typedef unsigned long long ull;
ll n, m, t, h, k;
ll a, b, c;
ll ans, num, sum1,sum,sum2, cnt;
ll dp[N], f1[N], f2[N];
ll mp[105][105];
bool flag, vis[N];
string s, ss;
void solve()
{cin >> n >> m;for (int i = 1; i <= m; i++) {cin >> dp[i];}ans = 0;sort(dp + 1, dp + 1 + m);for (int i = 1; i < m; i++) {if (dp[i] != 1) {ans += dp[i] - 1;}}cout << ans + n - dp[m] << endl;
}
int main()
{cin >> t;while (t--) {solve();}return 0;
}

C. Gorilla and Permutation

思路:

优先让满足f条件的数早出现(越大越早),让满足g条件的数晚出现(越小越早)

代码:

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
typedef long long ll;
typedef unsigned long long ull;
ll n, m, t, h, k;
ll a, b, c;
ll ans, num, sum1,sum,sum2, cnt;
ll dp[N], f1[N], f2[N];
ll mp[105][105];
bool flag, vis[N];
string s, ss;
void solve()
{cin >> n >> m >> k;for (int i = n; i >= k; i--) cout << i << " ";for (int i = k - 1; i >= m + 1; i--) cout << i << " ";for (int i = 1; i <= m; i++) cout << i << " ";cout << endl;
}
int main()
{cin >> t;while (t--) {cin >> n >> m >> k;for (int i = n; i >= k; i--)cout << i << " ";for (int i = k - 1; i >= m + 1; i--)cout << i << " ";for (int i = 1; i <= m; i++)cout << i << " ";cout << endl;}return 0;
}

D. Test of Love

 

思路:

分情况讨论。 从右往左记录距离当前位置最近的L的位置,用next数组表示。维护一个变量rightmost,表示当前位置~rightmost之间的位置都可以去(初始时为m)。
1: 如果rightmost >= next[i], i = next[i], 更新rightmost。(跳到下一个L位置)
2: 如果当前在陆地上,从当前能跳的最右边的距离往左找,找到第一个W(能到达的最右边的water),如果k <= 0或者没找到W, 无解
3: 如果当前在水里(W),k <= 0或者下一个字母是C,无解。 

代码:

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
typedef long long ll;
typedef unsigned long long ull;
ll n, m, t, h, k;
ll a, b, c;
ll ans, num, sum1,sum,sum2, cnt;
ll dp[N], f1[N], f2[N];
ll mp[105][105];
bool flag, vis[N];
string s, ss;
void solve()
{cin >> n >> m >> k;cin >> s;s = " " + s;if (m > n) {cout << "YES" << endl;return;}else {ans = m;for (int i = 1; i <= n; i++) {if (ans <= 0) {cout << "NO" << endl;return;}if (s[i] == 'L')ans = m;if (s[i] == 'W') {if (k > 0) {if (ans > 1)ans--;else {ans = 1;k--;}}elseans--;}if (s[i] == 'C')ans--;}}if (ans > 0)cout << "YES" << endl;elsecout << "NO" << endl;
}
int main()
{cin >> t;while (t--) {solve();}return 0;
}

http://www.lryc.cn/news/400050.html

相关文章:

  • fedora 40 安装拼音输入法
  • Chromium CI/CD 之Jenkins实用指南2024-如何创建新节点(三)
  • Git代码管理工具 — 3 Git基本操作指令详解
  • Linux——多线程(五)
  • 张量分解(4)——SVD奇异值分解
  • 第三方配件也能适配苹果了,iOS 18与iPadOS 18将支持快速配对
  • Docker 部署 Nginx 并在容器内配置申请免费 SSL 证书
  • 模型评估与选择
  • 有必要把共享服务器升级到VPS吗?
  • LLM代理应用实战:构建Plotly数据可视化代理
  • 大模型系列3--pytorch dataloader的原理
  • SQLServer 如何设置端口
  • 调整网络安全策略以适应不断升级的威胁形势
  • (leetcode学习)9. 回文数
  • QT VTK 简单测试工程
  • ES6 Generator函数的异步应用 (八)
  • Navicat:打造高效数据库管理之道
  • Python和C++全球导航卫星系统和机器人姿态触觉感知二分图算法
  • Unity 优化合集
  • 第九届MathorCup高校数学建模挑战赛-A题:基于数据驱动的城市轨道交通网络优化研究
  • Spring webflux基础核心技术
  • 关闭Ubuntu烦人的apport
  • 海事无人机解决方案
  • Docker--在linux安装软件
  • 知识库与RAG
  • 【2024最新】C++扫描线算法介绍+实战例题
  • 语言主要是一种交流工具,而不是思维工具?GPT5何去何从?
  • 传感器标定(三)激光雷达外参标定(lidar2ins)
  • 【漏洞复现】Crocus系统—Download 文件读取
  • 游戏开发面试题1