news 2026/5/6 3:39:29

UVa 10413 Crazy Savages

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 10413 Crazy Savages

题目描述

在一个神秘岛屿上,有nnn个疯狂的野人,他们生活在mmm个排成环形的洞穴中(编号111mmm)。第iii个野人初始位于洞穴CiC_iCi,每天早晨他会顺时针移动到第PiP_iPi个洞穴,并且他只能存活LiL_iLi天。

野人喜欢打架,如果两个或更多野人在同一天出现在同一个洞穴,他们会战斗至死。但神奇的是,在题目条件下,所有野人在自然死亡前从未相遇过。

我们需要找出满足这一条件的最小洞穴数mmm

数据范围:

  • 测试用例数t≤10t \leq 10t10
  • 野人数n≤15n \leq 15n15
  • 洞穴数m≤1,000,000m \leq 1,000,000m1,000,000
  • 1≤Ci,Pi≤1001 \leq C_i, P_i \leq 1001Ci,Pi100
  • 0≤Li≤1,000,0000 \leq L_i \leq 1,000,0000Li1,000,000

题目分析

关键观察

对于野人iii,在第kkk天(0≤k≤Li0 \leq k \leq L_i0kLi)时,他所在的洞穴位置为:
posi(k)=(Ci+k⋅Pi) mod m pos_i(k) = (C_i + k \cdot P_i) \bmod mposi(k)=(Ci+kPi)modm

两个野人iiijjj在第kkk天相遇的条件是:
(Ci+kPi) mod m=(Cj+kPj) mod m (C_i + kP_i) \bmod m = (C_j + kP_j) \bmod m(Ci+kPi)modm=(Cj+kPj)modm

这等价于:
(Ci−Cj)+k(Pi−Pj)≡0(modm) (C_i - C_j) + k(P_i - P_j) \equiv 0 \pmod{m}(CiCj)+k(PiPj)0(modm)

A=Pi−PjA = P_i - P_jA=PiPjB=Cj−CiB = C_j - C_iB=CjCi,则上式变为:
kA≡B(modm) kA \equiv B \pmod{m}kAB(modm)

我们需要确保在k=0,1,…,min⁡(Li,Lj)k = 0, 1, \dots, \min(L_i, L_j)k=0,1,,min(Li,Lj)范围内,该同余方程无解

同余方程解的分析

对于方程kA≡B(modm)kA \equiv B \pmod{m}kAB(modm)

  1. 有解条件:当且仅当gcd⁡(A,m)∣B\gcd(A, m) \mid Bgcd(A,m)B
  2. 解的形式:如果解存在,则解在模m/gcd⁡(A,m)m/\gcd(A, m)m/gcd(A,m)意义下唯一
  3. 最小非负解:可以通过扩展欧几里得算法求得

算法思路

  1. 枚举洞穴数:从m=max⁡(Ci)m = \max(C_i)m=max(Ci)开始(至少需要容纳所有野人的初始位置),依次增加mmm直到找到满足条件的解
  2. 检查条件:对于每个候选mmm,检查所有野人对(i,j)(i, j)(i,j)
    • 计算A=Pi−PjA = P_i - P_jA=PiPjB=Cj−CiB = C_j - C_iB=CjCi
    • 如果gcd⁡(A,m)∤B\gcd(A, m) \nmid Bgcd(A,m)B,则无解,继续检查下一对
    • 否则,求最小非负解k0k_0k0
    • 如果k0≤min⁡(Li,Lj)k_0 \leq \min(L_i, L_j)k0min(Li,Lj),则野人会在有生之年相遇,当前mmm不满足条件
  3. 输出结果:找到满足所有野人对都不相遇的最小mmm

复杂度分析

  • 野人对数:O(n2)=O(152)=O(225)O(n^2) = O(15^2) = O(225)O(n2)=O(152)=O(225)
  • 洞穴数枚举:最多1,000,0001,000,0001,000,000
  • 每次检查:O(log⁡m)O(\log m)O(logm)(扩展欧几里得算法)
  • 总复杂度:O(t⋅106⋅n2log⁡m)O(t \cdot 10^6 \cdot n^2 \log m)O(t106n2logm),在题目限制下可接受

代码实现

// Crazy Savages// UVa ID: 10413// Verdict: Accepted// Submission Date: 2025-11-15// UVa Run Time: 0.430s//// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intn;intc[20],p[20],l[20];// 扩展欧几里得算法,求解 ax + by = gcd(a,b)intexgcd(inta,intb,int&x,int&y){if(b==0){x=1;y=0;returna;}intd=exgcd(b,a%b,y,x);y-=a/b*x;returnd;}// 检查m是否满足条件boolcheck(intm){for(inti=0;i<n;++i){for(intj=i+1;j<n;++j){intA=p[i]-p[j];intB=c[j]-c[i];intmaxDay=min(l[i],l[j]);intd=__gcd(A,m);if(B%d!=0)continue;intnew_m=m/d;intnew_A=A/d;intnew_B=B/d;// 处理负数情况if(new_A<0){new_A=-new_A;new_B=-new_B;}new_B=(new_B%new_m+new_m)%new_m;intx,y;exgcd(new_A,new_m,x,y);x=(x%new_m+new_m)%new_m;intk0=(longlong)x*new_B%new_m;if(k0<=maxDay)returnfalse;}}returntrue;}intmain(){intt;cin>>t;while(t--){cin>>n;intmaxC=0;for(inti=0;i<n;++i){cin>>c[i]>>p[i]>>l[i];maxC=max(maxC,c[i]);c[i]--;// 转换为0-based,方便模运算}// 从maxC开始枚举mfor(intm=maxC;m<=1000000;m++){if(check(m)){cout<<m<<endl;break;}}}return0;}

总结

本题的关键在于将野人相遇问题转化为同余方程求解问题,通过数论方法判断在野人有生之年是否存在相遇的可能。算法采用枚举加验证的方式,利用扩展欧几里得算法高效求解同余方程,在题目数据范围内可以高效运行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 3:38:28

构建社交自动化CLI工具:主命令树+提供商树架构设计与实战

1. 项目概述&#xff1a;一个为社交媒体运营者打造的自动化CLI工具 如果你和我一样&#xff0c;每天需要管理多个Facebook页面、广告账户&#xff0c;手动在Meta Business Suite、Ads Manager和Excel之间来回切换&#xff0c;只为拉取一份内容表现报告或检查广告花费&#xff…

作者头像 李华
网站建设 2026/5/6 3:32:38

Python 爬虫高级实战:加密通信爬虫与数据安全传输

前言 在政企数据采集、商业竞品数据抓取、私密业务信息爬取等高敏感场景中&#xff0c;爬虫通信明文传输、接口裸请求、原始数据明文存储会引发严重安全隐患。网络抓包、流量劫持、中间人攻击、报文篡改、数据泄露、接口伪造请求等风险时刻威胁爬虫业务稳定&#xff0c;同时极…

作者头像 李华
网站建设 2026/5/6 3:31:30

基于改进型SVPWM调制钳位型单相三电平NPC逆变器中点电位平衡仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…

作者头像 李华
网站建设 2026/5/6 3:27:54

G_Wagon恶意软件深度剖析:从NPM伪装到云密钥收割的供应链攻击新范式

2026年1月23日&#xff0c;Aikido安全公司的研究人员在npm官方注册表中发现了一个名为ansi-universal-ui的恶意包&#xff0c;这个看似普通的轻量级UI组件库&#xff0c;实际上是代号为G_Wagon的高度复杂多阶段信息窃取木马。此次事件之所以引起全球安全界的高度关注&#xff0…

作者头像 李华
网站建设 2026/5/6 3:27:47

基于提示工程与工作流自动化构建AI商业顾问系统

1. 项目概述&#xff1a;当AI顾问走进你的业务最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“JoePlant/ChatGPT-Business-Consultant”。光看名字&#xff0c;你大概能猜到它的方向——用类似ChatGPT这样的大语言模型来扮演商业顾问的角色。这可不是简单的聊天机器人&a…

作者头像 李华
网站建设 2026/5/6 3:22:30

告别sysfs!在iMX6ULL上实战libgpiod:从交叉编译到点亮RGB三色灯

告别sysfs&#xff01;在iMX6ULL上实战libgpiod&#xff1a;从交叉编译到点亮RGB三色灯 嵌入式Linux开发中&#xff0c;GPIO控制是最基础却至关重要的功能。当开发者拿到一块iMX6ULL开发板准备驱动RGB LED时&#xff0c;可能会惊讶地发现传统的sysfs接口已成为历史。自Linux 4.…

作者头像 李华