做完本期以后,最近就不会再发布 AtCoder 的往届比赛了(备战蓝桥杯ing)

补题链接:Here

ABC题都是水题,这里直接跳过

D - Alter Altar

题意:一个R-W串,可以进行两种操作:1. 交换任意两个字符,2. 改变任意一个字符。问最少操作几次,可以使得串中不包含WR

思路:

可以发现,使用操作 \(1\) 总不劣于操作 \(2\) 的 。最终需要把串变为R...RW...W的形式,所以先统计R的个数 \(r\) ,然后统计前 \(r\) 个字符中R的个数 \(r′\) ,最后的结果就是 \(\Delta r=r-r'\)。

int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n; string s;
cin >> n >> s;
int r = 0, rr = 0;
for (int i = 0; i < s.size(); ++i)
if (s[i] == 'R') r++;
for (int i = 0; i < r; ++i)
if (s[i] == 'R') rr++;
cout << r - rr;
return 0;
}

E - Logs

有 \(N\) 根木条,每条长为 \(L_i\) ,最多锯 \(K\) 次 ,问锯完后最长的木条最短有多长(结果进位为整数)。

思路:经典二分。二分查找最后的答案,判断所需要的次数是否超过 \(K\) 次。

// Murabito-B 21/04/09
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n, k;
cin >> n >> k;
vector<ll> a(n);
for (ll &x : a) cin >> x;
ll l = 1, r = *max_element(a.begin(), a.end());
while (l <= r) {
ll mid = l + (r - l) / 2;
ll ans = 0;
for (ll i : a) ans += (i - 1) / mid;
if (ans > k) l = mid + 1;
else
r = mid - 1;
}
cout << l;
return 0;
}

F - Range Set Query

给定数组 \(A\),进行 \(Q\)次 询问,每次需要回答 \([L_i,R_i]\)区间内不同数字的个数。

思路:

经典树状数组解法,离线做法是按查询区间右端点排序然后依次处理,过程中用树状数组记录和更新当前状态。同一个数字,只有最后一次出现是有效的。

代码学习自 CP wiki

// Murabito-B 21/04/09
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
// 树状数组类
template <class T>
class FenwickTree {
int limit;
vector<T> arr; T lowbit(T x) { return x & (-x); } public:
FenwickTree(int limit) {
this->limit = limit;
arr = vector<T>(limit + 1);
} void update(int idx, T val) {
for (; idx <= limit; idx += lowbit(idx)) arr[idx] += val;
} T query(int idx) {
T ans = 0;
for (; idx > 0; idx -= lowbit(idx)) ans += arr[idx];
return ans;
}
}; int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n, q;
cin >> n >> q;
vector<int> a(n + 1);
for (int i = 1; i <= n; ++i) cin >> a[i];
vector<pair<int, int>> Q;
for (int i = 0, l, r; i < q; ++i) {
cin >> l >> r;
Q.push_back({l, r});
}
vector<int> order(q);
for (int i = 0; i < q; ++i) order[i] = i;
sort(order.begin(), order.end(), [&](int i, int j) { return Q[i].second < Q[j].second; });
vector<int> ans(q), pos(n + 1);
int lst = 0;
FenwickTree<int> ft(n);
for (int i = 0; i < q; ++i) {
int k = order[i];
int l = Q[k].first, r = Q[k].second;
for (int j = lst + 1; j <= r; ++j) {
if (pos[a[j]] != 0)
ft.update(pos[a[j]], -1);
ft.update(j, 1);
pos[a[j]] = j;
}
ans[k] = ft.query(r) - ft.query(l - 1);
lst = r;
}
for (int i : ans) cout << i << "\n";
return 0;
}

AtCoder Beginner Contest 174 个人题解(ABC水题,D思维,E题经典二分,F离线树状数组)的更多相关文章

  1. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  2. AtCoder Beginner Contest 022 A.Best Body 水题

    Best Body Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://abc022.contest.atcoder.jp/tasks/abc02 ...

  3. AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】

    A - K-City Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement In K-city, ...

  4. AtCoder Beginner Contest 174

    第一次 ak ABC,纪念一下. 比赛链接:https://atcoder.jp/contests/abc174 A - Air Conditioner #include <bits/stdc+ ...

  5. 2018.09.08 AtCoder Beginner Contest 109简要题解

    比赛传送门 水题大赛? 全是水题啊!!! T1 ABC333 就是判断是不是两个数都是奇数就行了. 代码: #include<bits/stdc++.h> using namespace ...

  6. AtCoder Beginner Contest 089完整题解

    A - Grouping 2 Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement There a ...

  7. Atcoder Beginner Contest 138 简要题解

    D - Ki 题意:给一棵有根树,节点1为根,有$Q$次操作,每次操作将一个节点及其子树的所有节点的权值加上一个值,问最后每个节点的权值. 思路:dfs序再差分一下就行了. #include < ...

  8. The 2015 China Collegiate Programming Contest -ccpc-c题-The Battle of Chibi(hdu5542)(树状数组,离散化)

    当时比赛时超时了,那时没学过树状数组,也不知道啥叫离散化(貌似好像现在也不懂).百度百科--离散化,把无限空间中无限的个体映射到有限的空间中去,以此提高算法的时空效率. 这道题是dp题,离散化和树状数 ...

  9. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  10. [ZJOI2006]书架(树状数组水过)

    这道题显然平衡树,splay,treap什么的随便切 然而我不想打,决定水过这道题 把空间开3倍,树状数组维护它前面的树的个数,开个id数组记录位置 找一个数排名直接二分加求前缀和,log^2的搞一搞 ...

随机推荐

  1. C#简化工作之实现网页爬虫获取数据

    公众号「DotNet学习交流」,分享学习DotNet的点滴. 1.需求 想要获取网站上所有的气象信息,网站如下所示: 目前总共有67页,随便点开一个如下所示: 需要获取所有天气数据,如果靠一个个点开再 ...

  2. Codeforces Round 903 (Div. 3)

    Codeforces Round 903 (Div. 3) A. Don't Try to Count 大概题意给你两个字符串a,b.a串可进行的操作为将整个a串复制到之前的a串后面(直接用a+a即可 ...

  3. 如何检测Windows服务停止后自动启动?自动运行.bat批处理文件?

    作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 前言 想要确保你的Windows服务即使在崩溃后也能自动重启吗?这篇文章教你如何用一个小巧的批处理脚本 ...

  4. AtCoder_abc331

    AtCoder_abc331 (这次题真的真的真的好难) 比赛链接 A - Tomorrow 题目链接 题目大意 有一个\(M\)个月,\(D\)天的日历,请输出\(y年m月z日\)的下一天. 解题思 ...

  5. C++ Qt开发:使用关联容器类

    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念.顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构.它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的 ...

  6. C++学习笔记四:变量与数据类型(布尔型与字符型)

    今天来整理一下布尔型和字符型变量的基本使用方法1)布尔型变量1. 声明和初始化一个布尔类型的变量占据1 Byte空间,数值0代表false,其他非0数值代表true bool red_light {f ...

  7. Illegal overloaded getter method with ambiguous type for property......

    问题原因 建议 1.boolean类型的属性值不建议设置为is开头,否则会引起rpc框架的序列化异常. 2.如果强行将IDE自动生成的isSuccess()方法修改成getSuccess(),也能获取 ...

  8. python tkinter 使用(八)

    python tkinter 使用(八) 本文主要讲下tkinter库中的其他的一些模块,如simpleDialog,scrollerText等. 1: simpleDialog simpledial ...

  9. pytest框架学习-测试用例发现机制以及用例执行命令

    pytest是什么 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高. Pytest安装 安装命令: ...

  10. VSCode 中优雅地编写 Markdown

    VSCode 中优雅地编写 Markdown 在 VSCode 中编写 Markdown 有几个无法拒绝的优势,首先是顺手方便,常写代码的同学打开 VSCode 各项功能和快捷键使用的都比较熟练,可以 ...