AtCoder Regular Contest 119 (ABC题)
比赛链接:Here
A - 119 × 2^23 + 1
注意到 \(2^{60} > 10^{18}\) ,所以我们可以直接枚举 \(0\) ~ \(59\)
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
ll n; cin >> n;
ll ans = (1ll << 60);
for (int i = 0; i < 60; ++i) {
ll a = n / (1ll << i);
ll b = i;
ll c = n - a * (1ll << i);
ans = min(ans, a + b + c);
}
cout << ans;
}
B - Electric Board
给定长度为 \(n\) 两个字符串 \(S,T\),要求通过最少的操作数把 \(S\) 变成 \(T\),操作就是对于 \(s_l=0∧s_{l+1}=...=s_r=1\) 或者 \(s_l=1∧s_{l+1}=...=s_r=0\) 可以交换元素 \(s_l\) 和 \(s_r\)
\(2≤n≤500000\)
解法1
我们可以把所有 \(0\) 换到应该的位置上,那么 \(1\) 也就确定了。
\(0\) 换过去的代价是路上 \(0\) 的数量,这就和 \(1\) 没关系了,那么我们把 \(S,T\) 的 \(0\) 都取出来,相邻的配对即可。
解法2
我们可以把所以 \(1\) 换到应该的位置上,那么 \(0\) 也就是确定了。
\(1\) 换过去的代价是路上 \(0\) 的数量,这和 \(0/1\) 都有关系,直接匹配是行不通的,正确的做法是从左往右扫,如果遇到 \(S\) 有 \(1\) 但是 \(T\) 没有就把他移动到右边第一个 \(0\),如果 \(T\) 有 \(1\) 但是 \(S\) 没有也把他移动到右边第一个 \(0\)
这种做法的正确性有二:一是两个状态都往中间靠拢;二是我们永远在不得不操作的时候操作。
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n;
string s, t;
cin >> n >> s >> t;
vector<int>a, b;
for (int i = 0; i < n; ++i) {
if (s[i] == '0') a.push_back(i);
if (t[i] == '0') b.push_back(i);
}
if (int(a.size() != int(b.size()))) {cout << -1; return 0;}
int ans = 0;
for (int i = 0; i < int(a.size()); ++i)
if (a[i] != b[i]) ans++;
cout << ans;
}
C - ARC Wrecker 2
有 \(n\) 个楼房,第 \(i\) 个高为 \(a_i\),相邻的楼房可以同时增加或同时减少,问能够推平(高度全部变成 \(0\))的区间有多少个。
\(2≤n≤300000,1≤ai≤10^9\)
解法
一定要有敏锐的观察能力,这道题的结论是:如果奇偶位置高度相同则可以推平。
证明不难,因为无论怎么操作奇偶的差都是不变的,而目标奇偶差值为 \(0\),初始状态一定能到目标状态。
然后搞一个特殊的前缀和,奇数位置符号为正,偶数位置符号为负,找权值和为 \(0\) 的区间即可。
const int N = 3e5 + 10;
ll n, ans, a[N];
map<ll, ll>mp;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
if (i > 1) a[i] += a[i - 2];
}
mp[0] = mp[a[1]] = 1;
for (int i = 1; i <= n / 2; ++i) {
int x = 2 * i;
ans += mp[a[x - 1] - a[x]];
if (x < n) ans += mp[a[x + 1] - a[x]];
mp[a[x - 1] - a[x]]++;
mp[a[x + 1] - a[x]]++;
}
cout << ans;
}
ll a[1 << 19], b[1 << 19], c[1 << 19];
map<ll, ll>d;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
ll n, ans = 0;
cin >> n;
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int i = 1; i <= n; ++i) {
if (i & 1) b[i] = a[i];
else b[i] = -a[i];
c[i] = c[i - 1] + b[i];
}
for (int i = 0; i <= n; ++i) {
ans += d[c[i]];
d[c[i]] += 1;
}
cout << ans;
}
AtCoder Regular Contest 119 (ABC题)的更多相关文章
- AtCoder Regular Contest 151补题
AtCoder Regular Contest 151 A. Equal Hamming Distances 简单题,注意下答案需要字典序最小即可 #include<bits/stdc++.h& ...
- AtCoder Beginner Contest 050 ABC题
A - Addition and Subtraction Easy Time limit : 2sec / Memory limit : 256MB Score : 100 points Proble ...
- AtCoder Regular Contest 119 C - ARC Wrecker 2(同余定理+思维)
Problem Statement There are NN buildings along the AtCoder Street, numbered 11 through NN from west ...
- AtCoder Regular Contest 128 部分题题解
关于鄙人罚坐两小时那件事...该开始看A题,这不就是个DP记录路径吗?Wrong了,嗯,我没用double,又Wrong,怎么回事,使劲检查自己的算法和细节问题,一个小时过去了,...这没错啊,又反复 ...
- Atcoder Regular Contest 060 F题第一问答案证明
一切的开始 令 \(x\) 为字符串,\(p\) 为正整数.如果对于满足 \(0\le i<|x|−p\) 的任何整数 \(i\) 满足 \(x[i]=x[i+p]\),则 \(p\) 称为 \ ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
随机推荐
- MySQL-防止误删除的方案就是删除,看不见岂不就是删除了吗,所以就是把它隐藏起来。
版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 伪删除: 用update替代delete 1.添加状态列 ALTER TABLE student2 ADD state ...
- Object.assign () 和深拷贝
先看看啥叫深拷贝?啥叫浅拷贝? 假设B复制了A,修改A的时候,看B是否发生变化: 如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值) 如果B没有改变,说明是深拷贝,自食其力!(修改堆 ...
- New Type Functions/Utilities for Dealing with Ranges in C++20
Generic Types of Ranges 类型萃取从字面意思上来说其实就是帮助我们挑选某个对象的类型,筛选特定的对象来做特定的事.可以先来回顾一下以前的写法. #include <ve ...
- SpringBoot项目中常见组件的配置属性
本文本的属性摘录自官方Properties配置清单,并附加了国内开发常用的框架配置属性.以国内WEB开发中,所涉及的常见组件为顺序组织配置清单 1. 配置属性清单 1.1 日志配置 序号 属性名 类型 ...
- Java+Selenium爬取高德POI边界坐标
一.写在前面 关于爬取高德兴趣点边界坐标网上有几篇文章介绍实现方式,总的来说就是通过https://www.amap.com/detail/get/detail传入POI的ID值获取数据,BUT,如果 ...
- MDI窗体,打开子窗口的时候关闭其他子窗口及去除MainMenuStrip上自动产生的图标
去除MDI子窗体最大化后在MainMenuStrip上自动产生的图标和最大化.最小化以及关闭按钮在MainMenuStrip的ItemAdded事件中添加代码如下: 1 private void me ...
- js剪贴板应用clipboardData
clipboardData 对象 提供了对剪贴板的访问. 三个方法 1.clearData(sDataFormat) 删除剪贴板中指定格式的数据. 2.getData(sDataFormat) 从剪贴 ...
- 公司敏感数据被上传Github,吓得我赶紧改提交记录
大家好,我是小富- 说个事吧!最近公司发生了一个事故,有同事不小心把敏感数据上传到了GitHub上,结果被安全部门扫描出来了.这件事导致公司对所有员工进行了一次数据安全的培训.对于这个事我相信,有点工 ...
- [NOI online2022普及C]字符串
题目描述 Kri 非常喜欢字符串,所以他准备找 \(t\) 组字符串研究. 第 \(i\) 次研究中,Kri 准备了两个字符串 \(S\) 和\(R\) ,其中 \(S\) 长度为 \(n\),且只由 ...
- MapStruct使用
1.首先创建一个maven项目 2.导入相关的依赖 注意:lombok的版本 <?xml version="1.0" encoding="UTF-8"?& ...