当前位置:首页 > 技术 > 正文内容

Codeforces Round 859 Solutions

访客 技术 2026年10月13日 1

目录

A. Plus or Minus

B. 抓糖果

C. 查找并替换

D. 奇数查询

E. 面试

F. 弹跳球

G2. 子序列加法(困难版)

A. Plus or Minus

直接模拟

void solve() {
    int a, b, c; cin >> a >> b >> c;
    a + b == c ? puts("+") : puts("-");
}

B. 抓糖果

先处理偶数再处理奇数,只需检查总数

void solve() {
    int n; cin >> n;
    long long s1 = 0, s2 = 0;
    for (int i = 1; i <= n; i++) {
        int x; cin >> x;
        if (x % 2) s2 += x;
        else s1 += x;
    }
    s1 > s2 ? puts("YES") : puts("NO");
}

C. 查找并替换

将第一个字符变为0或1均可,后续会相应变化。如果出现相等的情况则不行。

void solve() {
    int n; cin >> n;
    string a; cin >> a;
    int f = 0;
    unordered_map<char, int> q;
    q[a[0]] = 1;
    for (int i = 1; i < n; i++) {
        if (!q.count(a[i])) q[a[i]] = q[a[i - 1]] ^ 1;
        if (q[a[i]] == q[a[i - 1]]) {
            f = 1;
            break;
        }
    }
    q.clear();
    if (f) puts("NO");
    else puts("YES");
}

D. 奇数查询

简单区间查询,使用前缀和维护即可

void solve() {
    int n, m; cin >> n >> m;
    long long sum = 0;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        sum += a[i];
        a[i] += a[i - 1];
    }
    while (m--) {
        int l, r, k; cin >> l >> r >> k;
        long long ans = a[l - 1] - a[r];
        long long res = sum + ans + k * (r - l + 1);
        res & 1 ? puts("YES") : puts("NO");
    }
}

E. 面试

简单的交互题通常使用二分。这里使用前缀和维护,然后通过二分查询判断是否满足,调整中间值 mid 即可。

void solve() {
    int n; cin >> n;
    vector<long long> a(n + 1), sum(n + 1);
    for (int i = 1; i <= n; i++) cin >> a[i], sum[i] = a[i];
    for (int i = 1; i <= n; i++) sum[i] += sum[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;
        long long res; cin >> res;
        if (res != sum[mid] - sum[l - 1]) r = mid;
        else l = mid + 1;
    }
    cout << "! " << l << endl;
}

F. 弹跳球

直接模拟弹跳的过程。根据题目提示,数据范围为 nm,最多会有 nm 个点,根据鸽巢原理,必然会重复。因此可以推断出结果。

void solve() {
    int n, m, sx, sy, ex, ey; cin >> n >> m >> sx >> sy >> ex >> ey;
    char s[2]; cin >> s;
    int x = s[0] == 'D' ? 1 : -1, y = s[1] == 'R' ? 1 : -1;
    int ans = 0, flag = false, res = 0;
    while (sx != ex || sy != ey) {
        int f = 0;
        res++;
        if (sx + x > n || sx + x <= 0) x = -x, f++, ans++;
        if (sy + y > m || sy + y <= 0) y = -y, f++, ans++;
        if (f == 2) ans--;
        sx += x, sy += y;
        if (ans > n * m) {
            flag = true;
            break;
        }
    }
    !flag ? cout << ans << endl : cout << -1 << endl;
}

G2. 子序列加法(困难版)

后面的数一定由前面的数构成。如果某个数比前面的总和还大,则无法构造。使用前缀和维护即可。

void solve() {
int n; cin >> n;
vector a(n + 1);
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a.begin() + 1, a.begin() + n + 1);
if (a[1] != 1) {
cout << "NO" << endl;
return;
}
vector b(n + 1);
b[0] = 0;
for (int i = 1; i <= n; i++) b[i] = b[i - 1] + a[i];
b[0] = 1;
for (int i = 1; i <= n; i++) {
if (a[i] > b[i - 1]) {
cout << "NO" << endl;
return;
}
}
cout << "YES" << endl;
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。