Codeforces Round 859 (Div. 4)题解

简介: Codeforces Round 859 (Div. 4)题解

A

给定三个整数 a 、 b 和 c 使得这两个等式恰好有一个为真:

  • a+b=c
  • a−b=c

如果第一个方程为真,则输出 +,否则输出 -。

#include <bits/stdc++.h>
using namespace std;
void solve(){
    int a, b, c;
    cin >> a >> b >> c;
    cout << (a + b == c ? "+" : "-") << endl;
}
int main()
{
    freopen("test.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while(_t -- ){
        solve();
    }
    return 0;
}

B

把所有偶数糖果都放前面,为了保证 Mihai will have strictly more candies than Bianca,偶数之和必须大于奇数之和,否则就输出NO
#include <bits/stdc++.h>
using namespace std;
void solve() {
    int n;
    cin >> n;
    int a = 0, b = 0;
    while (n--)
    {
        int x;
        cin >> x;
        if (x % 2 == 0) b += x;
        else a += x;
    }
    cout << (b > a ? "YES" : "NO") << endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while (_t--) {
        solve();
    }
    return 0;
}

C

如果有两个相同的字母,它们下标之差为奇数,就输出NO,反之YES
#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n;
    string s;
    cin >> n >> s;
    for(int i = 0; i < n; i ++ )
        for(int j = 0; j < i; j ++ )
            if(s[i] == s[j] && (i - j) & 1)
            {
                puts("NO");
                return;
            }
    puts("YES");
}
int main()
{
    freopen("test.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while(_t -- ){
        solve();
    }
    return 0;
}

D

题目只在意数的奇偶性,所有存数组时可以只存奇偶,res为整个数组和的奇偶性,

下面的每个操作,如果把L~R中的数换成奇数,res加上区间内零的个数

如果换成偶数,res减去区间内一的个数,在判断res的奇偶性

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int s[N];
void solve(){
    int n, q;
    cin >> n >> q;
    for(int i = 1; i <= n; i ++ )
    {
        int x;
        cin >> x;
        s[i] = x & 1;
        s[i] += s[i - 1];
    }
    while(q -- )
    {
        int res = s[n] & 1;
        int l, r, k;
        cin >> l >> r >> k;
        if(k & 1) res ^= (r - l + 1) - (s[r] - s[l - 1]);
        else res ^= s[r] - s[l - 1];
        cout << (res & 1 ? "YES" : "NO") << endl;
    }
}
int main()
{
    freopen("test.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while(_t -- ){
        solve();
    }
    return 0;
}

E

此题二分模板题,算一段区间和的时候记得初始化前缀和

难在它是交互问题,不适应输入输出的方式

#include <bits/stdc++.h>
using namespace std;
void solve() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        a[i] += a[i - 1];
    }
    int l = 1, r = n;
    while (l < r)
    {
        int mid = l + r >> 1;
        cout << "?" << " " << mid - l + 1 << " ";
        for (int i = l; i <= mid; i++)
            cout << i << " ";
        cout << endl << endl;

        int x;
        cin >> x;
        if (x != a[mid] - a[l - 1]) r = mid;
        else l = mid + 1;
    }
    cout << "! " << r << endl;
}
int main()
{
    freopen("test.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while (_t--)
    {
        solve();
    }
    return 0;
}

F

模拟,就遇到边界就拐弯,找到终点退出

有人可能会疑惑,为什么要循环2*n*m次,明明只有n*m个格子啊

有可能终点在球后面,而球初始移动方向是反方向,这样就需要走到尽头在拐回来才能遇见终点

#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n, m;
    cin >> n >> m;
    int a, b, c, d;
    string s;
    cin >> a >> b >> c >> d >> s;
    int cnt = 0;

    for(int i = 1; i <= 2 * n * m; i ++ )
    {
        if(a == c && b == d) 
        {
            cout << cnt << endl;
            return;
        }

        bool f = false;
        if(s[1] == 'L' && b == 1)
        {
            s[1] = 'R';
            f = true;
        }
        else if(s[1] == 'R' && b == m)
        {
            s[1] = 'L';
            f = true;
        }
        if(s[0] == 'U' && a == 1)
        {
            f = true;
            s[0] = 'D';
        }
        else if(s[0] == 'D' && a == n)
        {
            f = true;
            s[0] = 'U';
        }
        
        if(f) cnt ++ ;

        if(s[0] == 'U') a -- ;
        else a ++ ;
        if(s[1] == 'L') b -- ;
        else b ++ ;
    }
    cout << -1 << endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while(_t -- ){
        solve();
    }
    return 0;
}

G

结论:假设已经有了序列$c_1,c_2,c_3...c_k$,那么这个序列的各个子序列和,一定可以表示出$[1, \sum_1^kC_i]$内的所有数字。

所以将数组排序,维护一个前 i 项的和,遍历第 i 项时,前 i - 1 项的和一定要大于等于第 i 项

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N];
void solve(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++ ) cin >> a[i];
    sort(a, a + n);
    if(a[0] != 1)
    {
        cout << "NO" << endl;
        return;
    }
    long long sum = a[0];
    for(int i = 1; i < n; i ++ )
    {
        if(sum < a[i])
        {
            cout << "NO" << endl;
            return;
        }
        sum += a[i];
    }
    cout << "YES" << endl;
}
int main()
{
    freopen("test.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int _t = 1;
    cin >> _t;
    while(_t -- ){
        solve();
    }
    return 0;
}
目录
相关文章
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
124 3
|
9天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
681 154
|
15天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
957 152
|
负载均衡 Java 微服务
OpenFeign:让微服务调用像本地方法一样简单
OpenFeign是Spring Cloud中声明式微服务调用组件,通过接口注解简化远程调用,支持负载均衡、服务发现、熔断降级、自定义拦截器与编解码,提升微服务间通信开发效率与系统稳定性。
358 156
|
7天前
|
分布式计算 监控 API
DMS Airflow:企业级数据工作流编排平台的专业实践
DMS Airflow 是基于 Apache Airflow 构建的企业级数据工作流编排平台,通过深度集成阿里云 DMS(Data Management Service)系统的各项能力,为数据团队提供了强大的工作流调度、监控和管理能力。本文将从 Airflow 的高级编排能力、DMS 集成的特殊能力,以及 DMS Airflow 的使用示例三个方面,全面介绍 DMS Airflow 的技术架构与实践应用。