【刷题】(AtCoder Beginner Contest 328) C、D 补题

编程入门 行业动态 更新时间:2024-10-14 12:24:12

【刷题】(<a href=https://www.elefans.com/category/jswz/34/1769555.html style=AtCoder Beginner Contest 328) C、D 补题"/>

【刷题】(AtCoder Beginner Contest 328) C、D 补题

前言

第一次打 a了两道 C、D都是TLE 看了其他人的题解之后 有一些想法 所以发一篇博客

C

题干


题目链接

我的思路及做题过程

我的思路是 输入left、right 再在这个区间内计算字母相同的对数

代码是:

#include<iostream>
#include<cmath>
#include<algorithm>using namespace std;int main()
{int n, q, le, ri, _max = 0;string str;cin >> n >> q >> str;for (int i = 0; i < q; i++) {cin >> le >> ri;int num = 0;for (int j = le - 1; j < ri - 1; j++) {if (str[j] == str[j + 1]) {num++;}}cout << num << endl;}return 0;
}

tle了

优化

其实 在每一个小的区间里 对数是不变的
所以我们可以先遍历字符串找到每个小的区间内的对数
再根据输入的left和right输出相应区间内的对数

遍历

遍历的过程是下面这样

for (int i = 1; i <= n; i++)
{if (str[i] == str[i - 1]){t++;num[i] = t;}else{num[i] = t;}
}
输出
		cout << num[right - 1] - num[left - 1] << endl;

思考

写题要有自己的思考 不要题目说什么 就写什么
不然简单题也会吃亏

D

题干


题目链接

我的思路及做题过程

使用find函数和erase函数
find函数查找”ABC“ erase函数删除”ABC“

但是TLE了

我在想是不是数据量大的时候 库函数太慢了

就只用循环和判断语句来写了

#include<iostream>using namespace std;char a[200100];
string s;
int main() {cin >> s;int left = 0;int right = 0;while (left < s.size()) {right++;a[right] = s[left];//赋值给另一个数组if (right >= 3) {if (a[right] == 'C' && a[right - 1] == 'B' && a[right - 2] == 'A') {//满足条件 就减少输出的范围 即rightright -= 3;}}left++;}for (int k = 1; k <= right; k++)cout << a[k];return 0;
}

总结

虽然库函数很好用 但遇到大的数据量的时候 还是要注意一些 很容易TLE
太痛苦了

结尾

AB没什么可说的 CD都是TLE E看了一眼 看到了图 不打算做了
第一次打atcoder 感觉还是不太好

菜就多练 以前是以前 现在是现在

我们下篇文章见

更多推荐

【刷题】(AtCoder Beginner Contest 328) C、D 补题

本文发布于:2023-11-15 07:21:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1595864.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:AtCoder   刷题   Beginner   Contest

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!