当前位置: 首页 > news >正文

2025ICPC沈阳区域赛 K题

https://qoj.ac/contest/2641/problem/14950

题目概述

平面上有 \(n\) 只青蛙(编号 \(1\)\(n\)),初始坐标互不相同。外部刺激会触发连锁跳跃反应:

  • 当青蛙 \(i\) 受到刺激,它会选择跳过另一只青蛙 \(j\),并精准落在以 \(j\)中心对称点上。
  • 跳跃完成后,青蛙 \(j\) 成为下一只唯一受到刺激的青蛙。
  • 连锁反应在某只青蛙选择原地不动时结束。

题目给出了所有青蛙的初始坐标最终坐标以及第一只被刺激的青蛙编号 \(s\),求最后一只被刺激的青蛙编号 \(t\)


思路

面对这道题,如果顺着题目的描述去思考,就会想到模拟,但这肯定不行。

模拟的死胡同

最直观的想法是写代码去模拟青蛙跳来跳去。但很快会发现两个无法逾越的鸿沟:

  • 信息缺失:题目只给了开头和结尾,根本没有给中间具体的跳跃顺序(谁跳了谁)。
  • 复杂度超标:跳跃次数高达 \(2 \times 10^5\),即便知道顺序,高频的坐标更新和追踪也极易超时。
  • 结论必须跳出局部细节,从宏观寻找规律。

Hint 1 : 从局部变化观察全局属性

既然不能盯着每一步怎么跳,我们就需要寻找一个“全局属性”。在涉及大量坐标移动的题目中,最容易想到的全局属性就是“所有人坐标的总和”。

我们先看最基本的数学规则:青蛙 \(A\) 跳过青蛙 \(B\) 落地到对称点。
根据平面几何的中点公式(对称中心点坐标是两端点坐标的平均值):

\[\frac{A_{\text{旧}} + A_{\text{新}}}{2} = B \implies A_{\text{旧}} + A_{\text{新}} = 2 \times B \]

我们可以推导出 \(A\) 跳跃后的新坐标公式:

\[A_{\text{新}} = 2 \times B - A_{\text{旧}} \]

接下来,我们观察这一次跳跃对全场坐标总和(设为 \(Sum\))带来了什么影响?
因为整场只有青蛙 \(A\) 动了,其他青蛙都没动,所以:

\[\text{新总和} = \text{旧总和} - A_{\text{旧}} + A_{\text{新}} \]

把上面推导出的 \(A_{\text{新}}\) 代入进来:

\[\text{新总和} = \text{旧总和} - A_{\text{旧}} + (2 \times B - A_{\text{旧}}) \]

\[\text{新总和} = \text{旧总和} - 2 \times A_{\text{旧}} + 2 \times B \]

Hint2 : 移项,分类配对

盯着上面这个公式:\(\text{新总和} = \text{旧总和} - 2 \times A_{\text{旧}} + 2 \times B\)
搞算法和数学有一个常用技巧 —— 配对,把属于“跳跃前”的变量移到等号一边,把属于“跳跃后”的变量移到另一边

我们将 \(2 \times B\) 移到左边:

\[\text{新总和} - 2 \times B = \text{旧总和} - 2 \times A_{\text{旧}} \]

这时候,奇迹出现了:

  • 等号右边是:跳跃前的坐标总和 \(- 2 \times\) 跳跃前受刺激的青蛙坐标 (\(A\))
  • 等号左边是:跳跃后的坐标总和 \(- 2 \times\) 跳跃后受刺激的青蛙坐标 (\(B\))

我们发现等号左边和等号右边的共同点都是 坐标的总和 - 当前受到刺激的青蛙坐标

这说明了什么?无论青蛙怎么乱跳,这个组合计算出来的数值在全过程中是绝对绝对不会变的! 这就是整个系统的“不变量”(守恒量)。


算法设计与求解步骤

既然找到了这个永恒不变的总和,我们就可以直接绕过中间几十万步复杂的跳跃过程,直接连线开局结局

  1. 计算初始常数 \(K\)
    利用初始状态所有青蛙的坐标,算出初始总和 \(Sum_{\text{start}}\)。已知第一只被刺激的青蛙是 \(s\),其初始坐标为 \(P_s\)

\[K = Sum_{\text{start}} - 2 \times P_s \]

  1. 利用最终状态列方程
    算结局时所有青蛙的最终坐标总和 \(Sum_{\text{end}}\)。设最后一只被刺激的青蛙最终坐标为 \(Q_t\)。由于不变量守恒:

\[Sum_{\text{end}} - 2 \times Q_t = K \]

  1. 一元一次方程求解 \(Q_t\)

\[2 \times Q_t = Sum_{\text{end}} - K \implies Q_t = \frac{Sum_{\text{end}} - K}{2} \]

  1. 全场搜寻目标
    算出了最后一只青蛙的具体坐标 \(Q_t\) 后,在最终的青蛙队伍里挨个比对,看谁刚好站在这,谁就是我们要找的青蛙 \(t\)

C++ 代码实现

//
// Created by awake on 2026/5/17.
//
#include <bits/stdc++.h>
using namespace std;// clang-format off
struct { auto operator()(auto &i) { cin >> i; } } IN; // NOLINT
struct { auto operator()(auto &i) { cout << i << ' '; } } OUT; // NOLINT
// clang-format on
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)// NOLINT
#define int long long
using pii = pair<int, int>; //NOLINT
using ll = long long;       //NOLINT
template <typename T>
using vec = vector<T>; //NOLINT#define endl '\n'void solve()
{int n, s;cin >> n >> s;vec<pii> P;vec<pii> Q;pii sum1 = {0, 0};pii sum2 = {0, 0};pii st = {0, 0};for (int i = 1; i <= n; i++){int px, py, qx, qy;cin >> px >> py >> qx >> qy;P.emplace_back(px, py);Q.emplace_back(qx, qy);sum1.first += px;sum1.second += py;sum2.first += qx;sum2.second += qy;if (i == s){st.first += px;st.second += py;}}int Kx = sum1.first - 2 * st.first;int Ky = sum1.second - 2 * st.second;int enx = (sum2.first - Kx) / 2;int eny = (sum2.second - Ky) / 2;for (int i = 0; i < n; i++){if (Q[i].first == enx && Q[i].second == eny){cout << (i + 1) << endl;return;}}
}signed main()
{IOS;int T = 1;// cin >> T;while (T--)solve();return 0;
}

tag说明

数学 : 解题的核心过程是代数公式的列举、移项、合并同类项,最终化简出一个优雅的等式。
不变量:本题最精准的方法论标签。面对复杂多变的过程,寻找“总量不变”或“特定代数和不变”的属性,是算法竞赛中非常经典的一类套路。
几何 :利用了基础的“中心对称 / 点对称”的几何性质(中点公式)。不过它对几何知识的考察非常浅。

http://www.rkmt.cn/news/1306022.html

相关文章:

  • 2026年5月劳力士官方售后网点深度评测与亲测报告(含迁址/新开门店) - 速递信息
  • 2026年南充门头招牌,发光字,软膜灯箱优质厂家选择指南——全川供货、工程专用、一站式采购 - 四川华蔓广告有限公司
  • 优惠拉满的正宗川菜馆推荐:椒爱这波福利真的可以冲 - 速递信息
  • 2026年5月17日爱彼官方售后网点深度评测报告:数据验证与实地横评 - 速递信息
  • 2026年5月17日积家官方售后网点实地探访与避坑指南(含迁址新开)——基于真实体验的核验报告 - 速递信息
  • 2026年山西智能阅卷系统机构最新推荐排行榜行业专家:山西普泰泽科技有限公司 - 品牌推广大师
  • 2026年上海周边城市亲子酒店推荐(江浙沪+南京周边适配) - 速递信息
  • Java学习笔记:方法重写
  • 2026杭州GEO优化公司深度测评:技术源头、实战成果与选型指南 - 速递信息
  • 南充地区喷绘写真、平板UV喷印、亚克力字制作 - 四川华蔓广告有限公司设计安装施工 - 四川华蔓广告有限公司
  • 2026年泉州市面上口碑好的装修公司十大靠谱品牌推荐——深度解析“3F改造家”如何以工匠精神重塑旧房翻新市场 - 速递信息
  • 长沙到岳阳商务车/长沙到岳阳商务车电话/长沙去岳阳商务车/长沙去岳阳商务车电话/黄花机场到岳阳商务车电话/黄花机场去岳阳商务车 - 速递信息
  • 如何优化 MySQL 数据库的查询性能?
  • 2026长沙到岳阳商务车/长沙到岳阳商务车电话/岳阳到长沙商务车/岳阳到长沙商务车电话推荐 - 速递信息
  • 2026年4月热门的鹿优选商城推荐,手机购物/线上购物/护肤品时尚好物优选/好物优选,鹿优选商城商品质量如何 - 品牌推荐师
  • 装饰用
  • docker运行hermes agent
  • 2026涪陵家具工厂推荐|沙发/床垫/定制家具实力厂家汇总 - 企业推荐师
  • 南充地区门头招牌、发光字、软膜灯箱制作 - 四川华蔓广告有限公司设计安装施工 - 四川华蔓广告有限公司
  • 2026年4月技术好的清理筛实力厂家推荐,粮食通风地笼/斗式提升机/悬空输送机/比重精选筛/清理筛,清理筛生产厂家哪个好 - 品牌推荐师
  • 宿主机与vm共享folder的开发
  • 2026年贵州AI网络推广怎么做才不踩坑?贵阳豆包搜索推广5大服务商实战对标指南 - 年度推荐企业名录
  • 物质的本质
  • Nginx 配置 API 网关鉴权失败报错 502 Bad Gateway 如何解决?
  • Java程序中如何ping一个域名是否有效
  • 面向对象程序设计-第一部分总结
  • MIT 开源 ScalarGui 图形化搞定超大 Git 仓库克隆,支持断点续传与稀疏检出
  • 万字 Claude Code 深度实践:安装、工作流与定制化配置详解
  • claude code命令使用
  • 2026年电磁加热厂家/电磁导热油炉厂家/电导热油炉厂家排行 - 速递信息