写在前边

链接:Codeforces Round #699 (Div. 2)

好自闭哈哈,\(B\)题暴力fst了,第二天改了一个字母就A了,第3题写了一个小时,然后又调了三四个小时,看不到样例,最终放弃,不过看了官方代码后也大体知道哪错了,对于\(res[m]\)要单独算,不然会被覆盖的。

A Space Navigation

链接:A题链接

题目大意:

给定一个字符串,终点\((x, y)\),每个字母都表示向一个方向走一步,并且可以任意删除掉一些字母,问是否能从\((0, 0)\)走到终点\((x, y)\)

思路

只需要根据字符串的操作,计算出在\(x\)轴或者\(y\)轴上活动的范围即可。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <unordered_map> using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; void solve() {
int x, y;
cin >> x >> y;
string s;
cin >> s;
int l = 0, u = 0, r = 0, d = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'L') l--;
else if (s[i] == 'U') u++;
else if (s[i] == 'R') r++;
else if (s[i] == 'D') d--;
}
if (x <= r && x >= l && y <= u && y >= d) puts("YES");
else puts("NO");
} int main()
{
//ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t;
scanf("%d", &t);
while (t--) {
solve();
} return 0;
}

B. New Colony

链接:B题链接

题目大意:

给定一组高度不一的山,从左边数第一座山滚石头,石头能第\(i\)坐山滚到第\(i+ 1\)座山的条件是,\(h_{i+1} <= h_{i}\),否则石头从第\(i\)座山落下,同时\(h_{i} += 1\),问最后一颗石头会落在第几座山,如果能完美通过每一座山那么输出\(-1\)

思路

只接暴力模拟每一颗石头即可,一开始看到\(1e9\),就模拟了山脉,写的贼麻烦,今天发现,山最高才\(100\)。。。。

代码:

模拟山脉

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector> using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; const int N = 110;
int h[N], ch[N]; void solve() {
memset(h, 0, sizeof h);
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> h[i];
} for (int i = 1; i < n; i++) {
while (h[i] < h[i + 1]) {
int max = h[i + 1];
for (int j = i; j >= 1; j--) {
int temp = h[j + 1] - h[j];
if (h[j] < h[j + 1]) {
if (h[j] + temp - h[j - 1] > 1 && j - 1 != 0) {
k -= (h[j - 1] + 1 - h[j]);
h[j] = h[j - 1] + 1;
}
else {
h[j] += temp;
k -= temp;
}
}
if (k <= 0) {
cout << j << endl;
return;
}
}
}
}
puts("-1");
} int main()
{
//ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t;
scanf("%d", &t);
while (t--) {
solve();
}
system("pause");
return 0;
}

模拟石头

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector> using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; int h[110]; void solve() {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> h[i];
}
int res = -1;
while (k) {
bool flag = false;
for (int i = 1; i <= n - 1; i++) {
if (h[i] < h[i + 1]) {
k--;
res = i;
h[i] += 1;
flag = true;
break;
}
}
if (!flag) {
cout << res << endl;
return;
}
}
puts("-1");
} int main()
{
//ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t;
scanf("%d", &t);
while (t--) {
solve();
}
system("pause");
return 0;
}

C Fence Painting

链接:C题链接

题目大意:

工匠师傅给篱笆染色,并且工匠师傅有先后没人携带一种染色,无论如何不能拒绝他,即他一定会染一次色,问是现在的篱笆经过工匠师傅染色后是否能达到目标。

思路

首先重要的一点是最后一个染色的师傅,假如他携带的颜色为\(c_m\),它可以给第\(k\)个位置的篱笆\(a_k\)染成\(b_k\),可以发现因为它是最后一个染色的,所以它可以覆盖原来第\(k\)个位置上的所有颜色,同时他还不会被改变因为他是最后一个,所以对于那些用不到的颜色我们可以通通涂到第\(k\)个位置,最后被最后一个染色师傅覆盖掉,剩下的就是代码实现了。

然后发现我们既需要存每个师傅可以染色的坐标,又要存一个颜色有多少个师傅携带,要实现这一点我们可以利用map<int, vector<int>>来存,或者vector<int> g[N],这里用中括号(不是圆括号)初始化的意义是有Nvector数组,用完一个师傅则\(pop_back()\)。

同时注意对于最后一个师傅可以涂的位置我们单独赋值,否则会在计算过程中被覆盖。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <cstring> using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; const int N = 1e5 + 10;
int a[N], b[N], c[N];
int res[N];
int n, m; void solve() {
map<int, VI> cnt;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i++) {
scanf("%d", &b[i]);
if (b[i] != a[i]) {
cnt[b[i]].push_back(i);
}
}
for (int i = 1; i <= m; i++) scanf("%d", &c[i]); int last = -1;
if (cnt[c[m]].size()) {
last = cnt[c[m]].back();
cnt[c[m]].pop_back();
}
else {
for (int i = 1; i <= n; i++) { //记录最后一个工匠师傅可以染色的位置
if (b[i] == c[m]) {
last = i;
}
}
} if (last == -1) {
puts("NO");
return;
} res[m] = last;
for (int i = 1; i <= m - 1; i++) {
if (cnt[c[i]].size() == 0) {
res[i] = last;
}
else {
res[i] = cnt[c[i]].back();
cnt[c[i]].pop_back();
}
} for (auto it : cnt) {
if (it.second.size()) {
puts("NO");
return;
}
}
puts("YES");
for (int i = 1; i <= m; i++) {
cout << res[i] << " ";
}
puts("");
} int main()
{
//ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t;
scanf("%d", &t);
while (t--) {
solve();
} return 0;
}

Codeforces Round #699 (Div. 2) A~C题解的更多相关文章

  1. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  2. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  3. Codeforces Round #672 (Div. 2) A - C1题解

    [Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...

  4. Codeforces Round #614 (Div. 2) A-E简要题解

    链接:https://codeforces.com/contest/1293 A. ConneR and the A.R.C. Markland-N 题意:略 思路:上下枚举1000次扫一遍,比较一下 ...

  5. Codeforces Round #610 (Div. 2) A-E简要题解

    contest链接: https://codeforces.com/contest/1282 A. Temporarily unavailable 题意: 给一个区间L,R通有网络,有个点x,在x+r ...

  6. Codeforces Round #611 (Div. 3) A-F简要题解

    contest链接:https://codeforces.com/contest/1283 A. Minutes Before the New Year 题意:给一个当前时间,输出离第二天差多少分钟 ...

  7. Codeforces Round #499 (Div. 2) D. Rocket题解

    题目: http://codeforces.com/contest/1011/problem/D This is an interactive problem. Natasha is going to ...

  8. Codeforces Round #499 (Div. 2) C Fly题解

    题目 http://codeforces.com/contest/1011/problem/C Natasha is going to fly on a rocket to Mars and retu ...

  9. Codeforces Round #198 (Div. 2)C,D题解

    接着是C,D的题解 C. Tourist Problem Iahub is a big fan of tourists. He wants to become a tourist himself, s ...

  10. Codeforces Round #579 (Div. 3) 套题 题解

    A. Circle of Students      题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...

随机推荐

  1. openpyxl 设置单元格自动换行

    解决方案 openpyxl的alignment函数中的参数:wrapText=True,就可以了 from openpyxl.styles import Alignment worksheet.cel ...

  2. Win11 开启 telnet

    'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件. 首先我们打开底部"开始菜单",如图所示.接着打开其中的"设置". 然后进入左边的&quo ...

  3. P5020 [NOIP2018 提高组] 货币系统 题解

    转化为完全背包即可. #include <iostream> #include <cstring> #include <algorithm> using names ...

  4. 前后端分离中台框架 Admin.Core 学习-介绍与配置说明

    中台框架后端项目 Admin.Core 的介绍与配置说明 中台admin是前后端分离权限管理系统,Admin.Core为后端项目,基于.NET 7.0开发. 支持多租户.数据权限.动态 Api.任务调 ...

  5. 纯前端导出word手写复杂表格,并还原成word。百分百还原表格。一文搞定前端表格导出为word

    本次的需求是手写一个养老院老人生活能力评定表,并且要能够录入信息,最终导出 表格因为有七页所以代码很多,可以不用看表格模板的详细代码. 先贴上最终效果图 填写完导出之后 基本上实现了样式的百分百还原导 ...

  6. API数据接口获取商品详情数据该怎么操作

    随着电商行业的快速发展,获取商品详情数据是电商应用的重要功能之一.为了提高用户的购物体验,开发者可以利用API接口获取商品详情数据,方便用户了解商品的具体信息和特点.在本文中,我们将介绍如何使用API ...

  7. 遥遥领先.NET 7, .NET 8 性能大幅提升

    每个版本必有的性能提升汇总文章又来了.大家可以学习阅读了. 微软 .NET 开发团队的工程师 Stephen Toub 发表博客<Performance Improvements in .NET ...

  8. Modbus转Profinet网关改写变频器运行状态在1200PLC程序控制实例

    兴达易控Modbus转Profinet网关将丹佛斯变频器接入西门子 1200PLC 配置案例 案例简介: 本案例是兴达易控Modbus转Profinet网关连接丹佛斯变频器在西门子 1200PLC程序 ...

  9. Java虚拟机(JVM):第五幕:自动内存管理 - HotSpot算法细节以及低延迟垃圾收集器

    一.HotSpot算法细节 1.根节点枚举:所有的收集器在根节点枚举的时候,必须暂停用户线程,同时要保证一致性的快照中得以进行.一致性:整个枚举期间执行子系统看起来就像是冻结在某一个时间点上,不会出现 ...

  10. QT Recursive repaint detected 检测到递归重绘

    1.打印绘图时的线程号,如果与主线程号不一致,则需要使用信号传递数据,在主线程窗体中绘图 如下: qDebug() << "当前线程:" <<QThread ...