比赛链接: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题)的更多相关文章

  1. AtCoder Regular Contest 151补题

    AtCoder Regular Contest 151 A. Equal Hamming Distances 简单题,注意下答案需要字典序最小即可 #include<bits/stdc++.h& ...

  2. AtCoder Beginner Contest 050 ABC题

    A - Addition and Subtraction Easy Time limit : 2sec / Memory limit : 256MB Score : 100 points Proble ...

  3. AtCoder Regular Contest 119 C - ARC Wrecker 2(同余定理+思维)

    Problem Statement There are NN buildings along the AtCoder Street, numbered 11 through NN from west ...

  4. AtCoder Regular Contest 128 部分题题解

    关于鄙人罚坐两小时那件事...该开始看A题,这不就是个DP记录路径吗?Wrong了,嗯,我没用double,又Wrong,怎么回事,使劲检查自己的算法和细节问题,一个小时过去了,...这没错啊,又反复 ...

  5. Atcoder Regular Contest 060 F题第一问答案证明

    一切的开始 令 \(x\) 为字符串,\(p\) 为正整数.如果对于满足 \(0\le i<|x|−p\) 的任何整数 \(i\) 满足 \(x[i]=x[i+p]\),则 \(p\) 称为 \ ...

  6. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  7. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  8. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  9. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

  10. AtCoder Regular Contest 096

    AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...

随机推荐

  1. 【Javaweb】Servlet四 | ServletConfig类|ServletContext类

    ServletConfig类是Servlet程序的配置信息类. ServletConfig类的三大作用 1.可以获取Servlet程序的别名servlet-name的值 System.out.prin ...

  2. C语言-变量常量数据类型

    常量:不会变化的数据.不能被修改. 1. "hello".'A'.-10.3.1415926(浮点常量) 2. #define PI 3.1415 [强调]:没有分号结束标记. [ ...

  3. 小程序引入外部icon图标

    一.使用阿里巴巴图标库引入字体图标 阿里巴巴图标库:https://www.iconfont.cn/manage/index 选择合适的图标 收藏,在收藏中查看 选择:自己的项目 选择:第二个{fon ...

  4. VScode怎么实现c的运行,这里只讲述一些细节

    第一下载的Vscode要设置信任模式,否则你后面搞什么都没有用 第二下载minGw还是gcc 都行 第三安装插件,c,c++. 然后编译就行了,我搞了一天,主要弹出的是未找到exe文件,但是我告诉大家 ...

  5. springboot下添加全局异常处理和自定义异常处理

    前言 在spring项目中,优雅处理异常,好处是可以将系统产生的全部异常统一捕获处理,自定义的异常也由全局异常来捕获,如果涉及到validator参数校验器使用全局异常捕获也是较为方便. 相关代码: ...

  6. Microsoft Edge 分屏 推荐

    前言: 很早之前就在 Edge Dev 频道的更新公告中看到过 Edge 的新分屏功能,当时没怎么注意,昨天看文档的时候发现 Edge 的侧边栏可以拖动当作一个"虚假的"分屏页面来 ...

  7. 听懂未来:AI语音识别技术的进步与实战

    本文全面探索了语音识别技术,从其历史起源.关键技术发展到广泛的实际应用案例,揭示了这一领域的快速进步和深远影响.文章深入分析了语音识别在日常生活及各行业中的变革作用,展望了其未来发展趋势. 关注Tec ...

  8. Harbor安装和镜像推送

    安装前提: yum -y install docker-compose-plugin 安装: tar -zxvf harbor-offline-installer-v2.6.1.tgz cd harb ...

  9. Python+Selenium4自动化之JS属性

    应用场景 在自动化中, 能对JS代码进行增.删.改的话,可以帮助我们解决很多问题, 如:修改<a>标签的target属性,让它不打开新的窗口(_blank),从而不用频繁使用switch_ ...

  10. GPT Zero 是什么?

    from https://openaigptguide.com/gptzero/ 在人工智能技术飞速发展的今天,人们对于文字内容的准确性和可信度要求越来越高.例如在学术研究领域,防止抄袭和造假是非常重 ...