Loading [MathJax]/jax/input/TeX/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >补题A-E Codeforces Round 953 (Div. 2)

补题A-E Codeforces Round 953 (Div. 2)

作者头像
WuShF
发布于 2025-02-26 00:13:06
发布于 2025-02-26 00:13:06
8300
代码可运行
举报
文章被收录于专栏:笔记分享笔记分享
运行总次数:0
代码可运行
在这里插入图片描述
在这里插入图片描述

A. Guess the Maximum

原题链接:https://codeforces.com/contest/1979/problem/A

求相邻元素的最大值的最小值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define ll long long
const int N = 2e5 + 5;
int n, m, k;
int a[N];
void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int minmx = 1e9;
    for (int i = 2; i <= n; i++) {
        minmx = min(minmx, max(a[i - 1], a[i]));
    }
    cout << minmx - 1 << endl;
}

int main() {
    IOS;
    int tt;
    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

B. XOR Sequences

原题链接:https://codeforces.com/contest/1979/problem/B

因为异或运算满足两数相同为0,不同为1

期望是区间内的数ai = ia ^ x等于bi = ib ^ y

满足条件的所有iaib一定满足:ia ^ ib等于x ^ y

由于是求区间长度。寻找区间左端点,显然有无数对符合条件。

假如现在x ^ y等于z

那么ia ^ ib也应该等于z,并且ia + 1 ^ ib + 1也等于z

如果+1之后仍相等,那么低位+1时受影响的连续的10应该是相等的。

一直加到lowbit(z)那一位,再加会影响第lowbit(z) << 1位。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define ll long long
const int N = 2e5 + 5;
int x, y;
int lowbit(int x) { return x & -x; }
void solve() {
    cin >> x >> y;
    cout << lowbit(x ^ y) << endl;
}

int main() {
    IOS;
    int tt;
    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

C. Earning on Bets

原题链接:https://codeforces.com/contest/1979/problem/C

题目要求,期望收益大于成本。

  • the total amount of coins you bet on all outcomes must be strictly less than the number of coins received back for each possible winning outcome

假设每个点都投资1元,对于a[i],投资1元的期望收益是a[i]/n,总的期望收益是sum(a)/n

需要sum(a)/n>n,假如在a[i]上再多投资1元,那么期望收益为(sum(a)+a[i])/n需大于n+1

但如果没选到a[i]呢,损失会+1

改动一处,会影响多处,需要尝试换个角度,减少变量数量。

如果让a[i]赢,那么投资1元的收益是a[i],失败的损失是1,这个状态转移的难点在于,难以判断a[i]上投资增加之后,与其他a[j]上收益的关系。

  • 比如我在a[i]上多投资1元,可以影响多次下注,他们必须再多投资1元,获胜收益才能大于支出。而新的投资有可能影响其他的投资。

如果让a[i]赢,那么投资1/a[i]元的收益是1元。

现在固定收益,每个点获胜都是1元,那么成本为1/a[i], i in a

  • 如果当前方案可行,那么1大于1/a[i], i in n

假如此时不满足这个式子,那么要么提高收益,要么降低成本,显然提高收益的同时会提高成本,降低成本的同时会降低收益,假如此时成本为1.2

  • 要增加收益,那么每个点的收益都应大于1.2,那么分母也会放缩到1.2*1.2
  • 要减去成本,那么部分点获胜的收益会减少0.2*a[i],当该点获胜时,收益小于1,而此时总成本为1。如此递推,最终分子分母也会放缩成原来的1/1.2

1/a[i]未必是整数。最小的整数就是lcm(a),那么每个点的投资为lcm(a)/a[i]

期望的可行方案应满足:

  • lcm(a)大于sum(lcm(a)/a[i]) i in n
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define ll long long
const int N = 2e5 + 5;
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
int n;
int a[N];

void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    ll L = 1;
    for (int i = 1; i <= n; i++)
        L = lcm(L, a[i]);
    ll S = 0;
    for (int i = 1; i <= n; i++)
        S += L / a[i];
    if (S >= L) {
        cout << "-1" << endl;
        return;
    }
    for (int i = 1; i <= n; i++) {
        cout << L / a[i] << " \n"[i == n];
    }
}

int main() {
    IOS;
    int tt;
    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

D. Fixing a Binary String

原题链接:https://codeforces.com/problemset/problem/1979/D

题意是将一个01串分成左右两个部分,左边翻转之后追加到右边。

如果有合法的中断位置,那么,长度不等于k的连续0/1段至多两个。

翻转操作,可以拼接,断点前的最后一段和整串的最后一段,对其他段无影响。

分情况讨论即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define ll long long
constexpr int N = 2e5 + 5;

int n, k;
string s;
int pre[N], suf[N];
void solve() {
    cin >> n >> k;
    cin >> s;
    if (k == n) {
        int cnt = count(s.begin(), s.end(), s.front());
        if (cnt == n)
            cout << n << endl;
        else
            cout << -1 << endl;
        return;
    }
    s = ' ' + s + ' ';
    pre[0] = suf[n + 1] = 1;
    for (int i = 1; i <= n; i++)
        pre[i] = pre[i - 1] && (i <= k || s[i] != s[i - k]);
    for (int i = n; i; i--)
        suf[i] = suf[i + 1] && (i >= n - k + 1 || s[i] != s[i + k]);
    int cnt = 1;
    for (int i = 2; i <= n; i++) {
        if (s[i] != s[i - 1])
            cnt = 1;
        else
            cnt++;
        if (cnt >= k && s[i] != s[i + 1]) {
            int p = i - k;
            if (!p || !pre[p] || !suf[p + 1])
                continue;
            int flag = 1;
            for (int j = n - k + 1; j <= n; j++) {
                int x = p - (j + k - n) + 1;
                if (x < 1)
                    break;
                if (s[x] == s[j]) {
                    flag = 0;
                    break;
                }
            }
            if (flag == 1) {
                cout << p << endl;
                return;
            }
        }
    }
    cout << -1 << endl;
    return;
}
int main() {
    IOS;
    int tt;
    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

E. Manhattan Triangle

原题链接:https://codeforces.com/contest/1979/problem/E

对于点i来说,曼哈顿距离为d的点,一定在一个以点i为中心,边长为2d的正方形边上。

画板
画板

假如正方形边框上又选定了图上这个点,那么第二点的合法点也是一个矩形,合法的交集为标注的边:

画板
画板

曼哈顿转切比雪夫,是将坐标系顺时针旋转45度,并放大2倍。

旋转前,第3点与前两点的距离都是d2

旋转后,由于放大了2倍,所以新的距离刚好是d。

预处理每条边,维护旋转后的横纵坐标和输入时的需要。

按新的横坐标分组并排序。

枚举每一个横坐标,他的点集应该在与x轴垂直的直线上。

  • 枚举点集的每个点,找纵坐标+d处的第2点。
  • 二分搜索左右两侧的区间,有没有合法的第三点。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define ll long long
const int N = 2e5 + 5;
using pii = pair<int, int>;
using aiii = array<int, 3>;
int n, d;
aiii p[N];
aiii ans;

void fuck() {
    map<int, set<pii>> mp;
    for (int i = 1; i <= n; i++) {
        mp[p[i][0]].insert({p[i][1], p[i][2]});
    }
    for (auto &x : mp) {
        set<pii> line1 = x.second;
        if (mp.count(x.first + d)) {
            set<pii> line2 = mp[x.first + d];
            for (pii it0 : line1) {
                int y1 = it0.first;
                auto it1 = line1.lower_bound({y1 + d, 0});
                if (it1 == line1.end() || it1->first != y1 + d)
                    continue;
                auto it2 = line2.lower_bound({y1, 0});
                if (it2 == line2.end() || it2->first > y1 + d)
                    continue;
                ans = {it0.second, it1->second, it2->second};
            }
        }
        if (mp.count(x.first - d)) {
            set<pii> line2 = mp[x.first - d];
            for (pii it0 : line1) {
                int y1 = it0.first;
                auto it1 = line1.lower_bound({y1 + d, 0});
                if (it1 == line1.end() || it1->first != y1 + d)
                    continue;
                auto it2 = line2.lower_bound({y1, 0});
                if (it2 == line2.end() || it2->first > y1 + d)
                    continue;
                ans = {it0.second, it1->second, it2->second};
            }
        }
    }
}

void solve() {
    cin >> n >> d;
    for (int i = 1; i <= n; i++) {
        int x, y;
        cin >> x >> y;
        p[i] = {x + y, x - y, i};
    }
    ans = {};
    fuck();
    for (int i = 1; i <= n; i++)
        swap(p[i][0], p[i][1]);
    fuck();
    for (int x : ans)
        cout << x << ' ';
    cout << endl;
}
signed main() {
    IOS;
    int tt = 1;
    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验
随着其他组织将他们的构建管道迁移到Bazel 之后,Airbnb 也发布了一个详细的说明,分享了他们弃用 Buck 并改善构建时间以及项目生成和加载时间的过程。
深度学习与Python
2024/02/29
1710
Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验
Bazel 7 发布:全新模块化依赖管理、无字节构建与多目标构建性能提升
最近在 BazelCon 23 上宣布,Bazel 7 推出了多年来一直在开发中的一系列新功能,其中包括全新的模块化外部依赖管理系统 Bzlmod、全新优化的“Build without the Bytes”模式、得益于 Project Skymeld 的多目标构建性能改进等等。
深度学习与Python
2024/01/04
4590
Spotify 移动工程平台迁移:将 Android 和 iOS 代码库迁移到 Bazel
作者 | Aditya Kulkarni 译者 | 刘雅梦 策划 | 丁晓昀 最近,Spotify 移动工程团队详细介绍了他们最近的平台迁移经验。根据移动工程战略计划,该团队将他们的 Android 和 iOS 代码库迁移到了谷歌的开源构建系统 Bazel 上。 来自 Spotify 移动工程团队的 Mariana Ardoino 和 Raul Herbster 在一篇博客文章中探讨了从迁移中获得的经验教训。迁移工作影响了 Spotify 的 100 多个团队。团队认识到,不同规模和复杂性的迁移将
深度学习与Python
2023/03/29
4200
Spotify 移动工程平台迁移:将 Android 和 iOS 代码库迁移到 Bazel
Slack 工程师如何解决最常见的移动开发痛点
作者 | Sergio De Simone 译者 | 马可薇 策划 | 丁晓昀 Slack 的开发者体验团队是由 8 个人专门负责的,该团队是为解决伴随组织和开发团队壮大而不断增长的成本问题。在 Slack 开发过程中成本最为高昂的部分,在于工程师需花费大量精力合并代码冲突、长时间的 CI 工作、片状测试和 CI 基础设施故障。 虽然可以让开发者们学习部分问题的解决方法,但随着团队的成长,所要花费的时间和成本是极不现实的。拥有一个特殊团队专注解决这类问题,不仅可以让开发团队效率更高,还能确保开发团
深度学习与Python
2023/03/29
5170
Slack 工程师如何解决最常见的移动开发痛点
如何解决 iOS 环境搭建与 APP 打包速度问题
随着 Flutter 等跨端框架的出现,业务开发同学经常需要在 Android/IOS 上跨端进行业务开发,问题定位等。新的不熟悉的环境的搭建总会遇到各种各样的问题,导致搭建失败,特别是 IOS 开发环境,是最复杂的,不仅环境搭建繁琐,而且切分支后的打包速度很慢,所以我们设计实现了两个工具,用于优化闲鱼 IOS 开发体验。
编程怪才-凌雨画
2020/09/18
2.6K0
Kotlin Multiplatform Mobile 进入 Beta 测试
作者 | Sergio De Simone 译者 | 平川 策划 | 丁晓昀 Kotlin Multiplatform Mobile 由 JetBrains 创建,支持使用 Kotlin 从单个代码库创建具有原生 UI 的 iOS 和 Android 应用。Kotlin Multiplatform Mobile 已经退出实验阶段,进入 Beta 测试。 Kotlin Multiplatform Mobile 是一个用于 iOS 和 Android 应用开发的 SDK,它让你可以将网络、数据存储和分
深度学习与Python
2023/03/29
1.3K0
Kotlin Multiplatform Mobile 进入 Beta 测试
如果要使用 Bazel ,我会考虑什么?
{Fast, Correct} - Choose two Build and test software of any size, quickly and reliably
donghui
2019/10/30
1.5K0
如果要使用 Bazel ,我会考虑什么?
谷歌的Bazel构建工具
在当今的软件开发世界中,构建工具的选择对于提高开发效率、维护代码质量以及提升团队协作能力都至关重要。谷歌作为全球技术巨头,为了解决大规模代码构建和测试的挑战,开发了一款名为Bazel的构建工具。Bazel具有强大的功能和灵活性,已成为开源社区中的明星工具。本文将深入探讨谷歌的Bazel构建工具及其在软件开发中的应用。
DevOps持续交付
2023/12/13
6260
谷歌的Bazel构建工具
我的自动化构建之路之 Jenkins+Fastlane+Github内网测试
可能看到这一篇文章很多人认为 Jenkins就可以实现自动化打包,并且 Fastlane配置 完毕之后打包更加的轻松。干嘛还搞在一起,这不是重复了吗。
君赏
2018/09/07
1.7K0
🧭 React Native 版本升级指南
React Native 作为一款跨端框架,有一个最让人头疼的问题,那就是版本更新。尤其是遇到大版本更新,JavaScript、iOS 和 Android 三端的配置构建文件都有非常大的变动,有时候三者的配置文件又互相耦合在一起,往往牵一发而动全身。
卤代烃
2022/02/23
4.8K0
🧭 React Native 版本升级指南
手把手教你利用Jenkins持续集成iOS项目
众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一批的用户在使用中纷纷出现闪退bug,轻则,很可能前期推广砸的钱都白费了,重则,口碑不好,未来也提升不起用户量来了。静下心来分析一下问题的原因,无外乎就是质量没有过关就上线了。除去主观的一些因素,很大部分的客观因素我觉得可以被我们防范的。根据大神们提出的一套开发规范建议,CI + FDD,就可以帮助我们极大程度的解决客观因素。本文接下来主要讨论 Continuous Integration 持续集成(简称CI)
一缕殇流化隐半边冰霜
2018/08/29
1.6K0
手把手教你利用Jenkins持续集成iOS项目
手把手教你利用Jenkins持续集成iOS项目
前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一批的用户在使用中纷纷出现闪退bug,轻则,很可能前期推广砸的钱都白费了,重则,口碑不好,未来也提升不起用户量来了。静下心来分析一下问题的原因,无外乎就是质量没有过关就上线了。 除去主观的一些因素,很大部分的客观因素我觉得可以被我们防范的。根据大神们提出的一套开发规范建议,CI + FDD,就可以帮助我们极大程
DevOps时代
2018/06/22
2.1K0
[Bazel]自定义工具链
本文会讲述 Bazel 自定义工具链的两种方式,Platform 和 Non-Platform 方式。会存在这两种方式的原因是 Bazel 的历史问题。例如,C++ 相关规则使用 --cpu 和 --crosstool_top 来设置一个构建目标 CPU 和 C++ 工具链,这样就可以实现选择不同的工具链构建 C++ 项目。但是这都不能正确地表达出“平台”特征。使用这种方式不可避免地导致出现了笨拙且不准确的构建 APIs。这其中导致了对 Java 工具链基本没有涉及,Java 工具链就发展了他们自己的独立接口 --java_toolchain。因此非平台方式(Non-Platform)的自定义工具链实现并没有统一的 APIs 来规范不同语言的跨平台构建。而 Bazel 的目标是在大型、混合语言、多平台项目中脱颖而出。这就要求对这些概念有更原则的支持,包括清晰的 APIs,这些 API 绑定而不是分散语言和项目。这就是新平台(platform)和工具链(toolchain) APIs 所实现的内容。
别打名名
2020/08/11
4.9K8
Spotify Portal for Backstage 简化平台工程
创建 Backstage 的路径涉及尊重 Spotify 的协作文化和开发人员自主权。其新门户旨在将这种精神带给所有 Backstage 用户。
云云众生s
2024/05/02
1720
Spotify Portal for Backstage 简化平台工程
占坑!利用 JenKins 持续集成 iOS 项目时遇到的问题
持续集成(Continuous Integration,简称CI)是一种软件开发实践:许多团队频繁地集成他们的工作,每位成员通常进行日常集成,进而每天会有多种集成。
DevOps时代
2018/08/01
2.8K0
占坑!利用 JenKins 持续集成 iOS 项目时遇到的问题
程序员面试闪充--Cocoapods的详解
在开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”。 一、介绍 CocoaPods是开发OSX和iOS应用程序的一个第三方库的依赖管理工具。利用CocoaPods,可以定义自己的依赖关系(称作pods),并且随着时间的变化,以及在整个开发环境中对第三方库的版本管理非常方便。 优点:快速查找新的第三方库。替换旧的框架(缩短开发周期和提升软件质量)/
谦谦君子修罗刀
2018/05/02
2.3K0
程序员面试闪充--Cocoapods的详解
【Unity开发小技巧】打包IOS版本须知流程(移动)
Unity是个开放性的平台,打包时也可以选择多种打包类型,几乎包含了所有的平台,目前主流Android,iOS平台,Android平台可以直接使用Unity自行打包,但iOS平台需要借助Mac电脑进行打包,本博客就iOS打包进行一个简单的说明,从开发到上线AppStore的所有流程。
全栈程序员站长
2022/09/07
6K0
【Unity开发小技巧】打包IOS版本须知流程(移动)
Flutter 搭建 iOS 命令行服务打包发布全保姆式流程
在以前的 《 Android 和 iOS 打包提交审核指南》 里介绍了 Flutter 下打包 Android 和 iOS 的指南,不过这部分内容主要介绍的是如何在本地打包发布流程。
GSYTech
2021/04/23
3.5K1
Flutter 搭建 iOS 命令行服务打包发布全保姆式流程
Travis CI 教程:入门
在这个 Travis CI 教程中,学习如何设置流行的持续集成服务,并与 GitHub 集成,以便自动运行测试。
iOSDevLog
2019/05/07
5.7K0
Travis CI 教程:入门
iOS应用构建与部署小结
上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单iOS应用, 本着简单可复现的方式,我们会以尽可能小的成本来构建并在真机运行iOS应用。 也就是说, 不用越狱, 也无需开发者账号。当然,一台iPhone手机还是需要的,最好还有一台Mac。
evilpan
2023/02/12
2.2K0
iOS应用构建与部署小结
推荐阅读
相关推荐
Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验