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

P10217 [省选联考 2024] 季风 题解

这辈子不会想写第二次的题目

题目链接

解题思路

实际上就是推式子,再加上一个常见的trick

问题转换

定义:固定位移为题目中的x,y,调整位移为题目中的x',y',那么结果就是Σ固定位移 + Σ调整位移 = x,y

问题可以变为以下这样

  1. $ \sum_{i=0}^{m-1}(x_{i mod n}) + \sum_{i=0}^{m-1}({x'}_i) = X $
  2. $ \sum_{i=0}^{m-1}(y_{i mod n}) + \sum_{i=0}^{m-1}({y'}_i) = Y $
  3. $ |\sum_{i=0}^{m-1}({x}i)| + |\sum^{m-1}({y'}_i)| \le mk $

转换1,2,可以得到:

4.$\sum_{i=0}^{m-1}({x'}i) = X - \sum^{m-1}(x_{i mod n}) $

5.$ \sum_{i=0}^{m-1}({y'}i) = Y - \sum^{m-1}(y_{i mod n}) $

4 + 5 带入 3,可以得到

$ |X - \sum_{i=0}^{m-1}(x_{i mod n})| + |Y - \sum_{i=0}^{m-1}(y_{i mod n})| \le mk$

好了,此时第一步完成了

拆绝对值

接下来先给出一个常见trick:

$ | a - b | \le x\(,就是要\) a - b \le x$ 且 $ b - a \le x$

那么$ |X - \sum_{i=0}^{m-1}(x_{i mod n})| + |Y - \sum_{i=0}^{m-1}(y_{i mod n})| \le mk$就可以转变成以下四个条件同时满足

  • $ X - \sum_{i=0}^{m-1}(x_{i mod n}) + Y - \sum_{i=0}^{m-1}(y_{i mod n}) \le mk$
  • $ X - \sum_{i=0}^{m-1}(x_{i mod n}) - Y + \sum_{i=0}^{m-1}(y_{i mod n}) \le mk$
  • $ -X + \sum_{i=0}^{m-1}(x_{i mod n}) + Y - \sum_{i=0}^{m-1}(y_{i mod n}) \le mk$
  • $ -X + \sum_{i=0}^{m-1}(x_{i mod n}) - Y + \sum_{i=0}^{m-1}(y_{i mod n}) \le mk$

然后再转化一下,就可以变成:

  • [\sum_{i=1}^m(x_i+y_i+k)\geq X+Y]

  • [\sum_{i=1}^m(x_i-y_i+k)\geq X-Y]

  • [\sum_{i=1}^m(-x_i+y_i+k)\geq -X+Y]

  • \(\sum_{i=1}^m(-x_i-y_i+k)\geq -X-Y\)

(这里已经把x,y给无限循环了,也从1~n了,这样可以和写代码一样,不然太痛苦了)

接下来是初中数学:

以这个式子进行分析:\(\sum_{i=1}^m(x_i+y_i+k)\geq X+Y\)

显然,\(m = Kn + b\)

定义$ S = $ \(\sum_{i=1}^n(x_i+y_i+k)\),$ pos = \sum_{i=1}^b(x_i+y_i+k)$

那么问题就变成解不等式\(SK + pos \le mk\),可以解得\(K\)的大小

对于\(b\),枚举\(n\)就行了,注意\(S\)可能等于\(0\)

代码实现

看似简单,实则要自己手写向上/向下取整,调了2h

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define File(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout)
#define LL long long
#define fi first
#define se second
int n;
LL k;
LL X,Y;
const int N = 1e5 + 10;
LL x[N],y[N];
int test_id = 0;
LL s1,s2,s3,s4;
LL pos1,pos2,pos3,pos4;
const LL inf = 1e18;
LL my_ceil(LL a,LL b){if(a > 0 && b > 0) return a / b + (a % b != 0);return a / b;
}
LL my_floor(LL a,LL b){if(a > 0 && b < 0) return -1;if(a / b < 0 && (a % b != 0)) return a / b - 1;return a / b;
}
pair< LL , LL > calc(LL k, LL b, LL t){if(k < 0){return {0,my_floor(t-b,k)};}if(k == 0){if(b >= t)return {0,inf};if(b < t)return {inf+1,-1};}if(k > 0){return {my_ceil(t-b,k),inf};}return {114,514};
}
pair<LL,LL> get(pair<LL,LL> x,pair<LL,LL> y){return {max(x.fi,y.fi),min(x.se,y.se)};
}
void solve(){test_id  ++ ;cin >> n >> k >> X >> Y;s1 = s2 = s3 = s4 = 0;pos1 = pos2 = pos3 = pos4 = 0;for(int i=1;i<=n;i++) cin >> x[i] >> y[i];for(int i=1;i<=n;i++){s1 += k - x[i] - y[i];s2 += k - x[i] + y[i];s3 += k + x[i] - y[i];s4 += k + x[i] + y[i];}LL ans = inf + 1;for(int i=0;i<n;i++){pair<LL ,LL>  ran = {0,inf};if(i > 0){pos1 += k - x[i] - y[i];pos2 += k - x[i] + y[i];pos3 += k + x[i] - y[i];pos4 += k + x[i] + y[i];}ran = get(ran,calc(s1,pos1,-X - Y));ran = get(ran,calc(s2,pos2,-X + Y));ran = get(ran,calc(s3,pos3,X - Y));ran = get(ran,calc(s4,pos4,X + Y));if(ran.fi <= ran.se){ans = min(ans,ran.fi * n + i);}}if(ans == inf + 1) ans = -1;cout << ans << "\n";
}
int main()
{IOS;int T;cin >> T;while(T -- ) solve();return 0;
}
http://www.rkmt.cn/news/125104.html

相关文章:

  • 测试文章
  • 差分电压采样
  • [WC 2016] 论战捆竹竿
  • 12/19
  • 实验6作业
  • Mintlify平台静态资产API跨租户内容注入漏洞分析
  • Experiment 6
  • 102302134陈蔡裔数据采集综合实践
  • A2A协议
  • C语言之成绩排序
  • 使用sharedPerences保存app配置文件
  • 分享文件:charles-proxy-4.6.3-win64.msi
  • 2025年12月中医馆,昆明中医,云南中医馆推荐:行业权威盘点与品质诊疗红榜发布 - 品牌鉴赏师
  • Android ALSA驱动进阶之获取周期帧数snd_pcm_lib_period_frames:用法实例(九十五) - 详解
  • 从研究问题到分析初稿:深度解析PaperXie AI科研工具中数据分析模块在学术写作场景下的辅助逻辑与技能实现路径
  • 详细介绍:Golang Cobra 教程:构建强大的CLI应用
  • 在 Windows 11 中,以管理员权限打开 CMD(命令提示符)的几种常用方法
  • 完整教程:Live2D形象展示与文本语音播报:打造生动交互体验的完整实现
  • SSM基于信息安全的无锡旅游服务系统5l83d(脚本+源码+数据库+调试部署+研发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 【赵渝强老师】国产金仓数据库的数据库集群
  • 12.19 程序员修炼之道:从小工到专家 - GENGAR
  • 06.cloundflare的使用
  • 完整教程:Flutter 布局入门
  • CVE-2025-14910:Edimax BR-6208AC路由器路径遍历漏洞深度解析
  • 完整教程:CentOS快速安装DockerCE指南
  • 英语_阅读_a plan for cancer prevention_待读
  • 女装店铺数据分析系统:从数据预处理到智能推荐的全链路技术实现与深度解析
  • 第二阶段:Android音视频基础 - 教程
  • Day6 链表的基础操作I -卡码网C++基础课
  • 峰会收官传捷报!金当汉默斯创新实力获认可,一举拿下“重磅新品”“人气飙升”双项殊荣