解题报告-P11670 [USACO25JAN] Cow Checkups S

news/2025/9/17 20:34:01/文章来源:https://www.cnblogs.com/Starpop/p/19097491

P11670 [USACO25JAN] Cow Checkups S

题目描述

Farmer John 的 \(N\)\(1 \leq N \leq 5 \cdot 10^5\))头奶牛站成一行,奶牛 \(1\) 在队伍的最前面,奶牛 \(N\) 在队伍的最后面。FJ 的奶牛也有许多不同的品种。他用从 \(1\)\(N\) 的整数来表示每一品种。队伍从前到后第 \(i\) 头奶牛的品种是 \(a_i\)\(1 \leq a_i \leq N\))。

FJ 正在带他的奶牛们去当地的奶牛医院进行体检。然而,奶牛兽医非常挑剔,仅愿意当队伍中第 \(i\) 头奶牛为品种 \(b_i\)\(1 \leq b_i \leq N\))时对其进行体检。

FJ 很懒惰,不想完全重新排列他的奶牛。他将执行以下操作恰好一次。

  • 选择两个整数 \(l\)\(r\),使得 \(1 \leq l \le r \leq N\)。反转队伍中第 \(l\) 头奶牛到第 \(r\) 头奶牛之间的奶牛的顺序。

FJ 想要衡量这种方法有多少效果。求出对于所有 \(N(N+1)/2\) 种可能的操作被兽医检查的奶牛数量之和。

输入格式

输入的第一行包含 \(N\)

第二行包含 \(a_1, a_2, \ldots, a_N\)

第三行包含 \(b_1, b_2, \ldots, b_N\)

输出格式

输出一行,包含对于所有可能的操作被兽医检查的奶牛数量之和。

输入输出样例 #1

输入 #1

3
1 3 2
3 2 1

输出 #1

3

输入输出样例 #2

输入 #2

3
1 2 3
1 2 3

输出 #2

12

输入输出样例 #3

输入 #3

7
1 3 2 2 1 3 2
3 2 2 1 2 3 1

输出 #3

60

说明/提示

样例解释

样例 #1

如果 FJ 选择 \((l=1,r=1)\)\((l=2,r=2)\)\((l=3,r=3)\),则没有奶牛将会被检查。注意这些操作并没有改变奶牛的位置。

以下操作会导致一头奶牛被检查。

  • \((l=1,r=2)\):FJ 反转第一头和第二头奶牛的顺序,因此新队伍中每头奶牛的品种将为 \([3,1,2]\)。第一头奶牛将会被检查。
  • \((l=2,r=3)\):FJ 反转第二头和第三头奶牛的顺序,因此新队伍中每头奶牛的品种将为 \([1,2,3]\)。第二头奶牛将会被检查。
  • \((l=1,r=3)\):FJ 反转第一头,第二头和第三头奶牛的顺序,因此新队伍中每头奶牛的品种将为 \([2,3,1]\)。第三头奶牛将会被检查。

所有六种操作中被检查的奶牛数量之和为 \(0+0+0+1+1+1=3\)

样例 #2

有三种导致 \(3\) 头奶牛被检查的可能操作:\((l=1,r=1)\)\((l=2,r=2)\)\((l=3,r=3)\)。其余每种操作均导致 \(1\) 头奶牛被检查。所有六种操作中被检查的奶牛数量之和为 \(3+3+3+1+1+1=12\)

子任务

  • 测试点 4:\(N\le 100\)
  • 测试点 5:\(N\le 5000\)
  • 测试点 6-9:\(a_i\)\(b_i\) 均在范围 \([1,N]\) 内均匀随机生成。
  • 测试点 10-15:\(a_i\)\(b_i\) 均在范围 \([1,2]\) 内均匀随机生成。
  • 测试点 16-23:没有额外限制。

解题报告

我去,洛谷上的题解都是什么大智慧!!!我就是个屑逼!!!

参考题解:题解Cow Checkups S - 洛谷专栏

先把可以产生的情况分成两类,需要翻转才能产生价值的和不需要翻转就可以产生价值的。

先处理不需要翻转的情况,显然,对于位置 \(i\),只有 \(a_i==b_i\) 是才不用翻转就有价值。

这部分又分成两部分:

  1. 以位置 \(i\) 为中心的区间翻转:计算最多有所少个这样的区间,结果为 \(\min(i,n-i+1)\)
  2. 未涉及位置 \(i\) 的翻转:就是那些右端点小于 \(i\) 的区间和左端点大于 \(i\) 的区间,显然区间 \([1,i-1]\) 的所有子区间和区间 \([i+1,n]\) 的所有子区间都可以,结果为 \(\dfrac {i(i+1)}{2}+\dfrac {(n-i)(n-i+1)}{2}\)

现在开始处理翻转产生的价值。

设存在 \(a_i==b_j\),规定 \(i<j\),我们想求出这一对匹配可以提供多少价值。显然只有形为 \([x-t,y+t](t \in \N)\) 的区间才可以让这对匹配产生价值,同时我们关注区间的合法性,应有关于边界的条件:\(x-t \geq 1\)\(y+t \leq n\),化为 \(t \leq \min(x-1,n-y)\),那么 \(t\) 只有 \(\min(x,n-y+1)\) 种情况。

一个我无比惊叹的想法:拆掉 \(\min\),分别统计 \(x\)\(n-y-1\) 作为最小值的贡献

\(x\) 作为最小值为例,这相当于说 \(x\) 和最左端的距离比 \(y\) 和最右段的距离更小,也相当与:\(x\) 距离区间 \([1,n]\) 的中心的距离比\(y\) 更远

那么就很简单了,我们从区间中心 \(mid\) 开始扩展到区间 \([l,r]\),对于每一个 \(a_l\),我们统计 \(pos \in [l+1,r]\) 中满足 \(b_{pos}==a_l\)\(pos\) 的个数 \(cnt\),因为有 \(r-mid==mid-l\),那么肯定有 \(|pos-mid| \leq |l-mid|\),那么位置 \(l\) 将产生总共 \(cnt \times l\) 的价值。位置 \(r\) 同理。

至于 \(cnt\) 怎么计算,直接用桶数组维护就好了。

复杂度 \(O(n)\),代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
const int N=501100;#define ckmax(x,y) ( x=max(x,y) )
#define ckmin(x,y) ( x=min(x,y) )inline int read()
{int f=1,x=0; char ch=getchar();while(!isdigit(ch)) { if(ch=='-') f=-1; ch=getchar(); }while(isdigit(ch))  { x=x*10+ch-'0';    ch=getchar(); }return f*x;
}vector<int> pos[N];
int n;
int a[N],cnta[N];
int b[N],cntb[N];
int ans;signed main()
{n=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=n;i++) b[i]=read();for(int i=1;i<=n;i++){if(a[i]!=b[i]) continue;ans+=min(i,n-i+1);ans+=i*(i-1)/2+(n-i)*(n-i+1)/2;}int l=n/2+1,r=n/2;for(int i=1;i<=(n+1)/2;i++){if(++r>n) break;ans+=(cnta[b[r]]+cntb[a[r]])*(n-r+1);cnta[a[r]]++,cntb[b[r]]++;if(--l<1) break;ans+=(cnta[b[l]]+cntb[a[l]])*l;cnta[a[l]]++,cntb[b[l]]++;}printf("%lld",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word vba 对 带编号格式的PO单 段落下添加对应的图片

Attribute VB_Name = "APO_PathStaging" Option Explicit Configuration Constants Private Const BASE_FOLDER As String = "\\10.0.0.10\部门共享\PO\" Private Const START_PARA As Long = 582 Private Const PATH_TAG As String = "[IMG] " …

解题报告-P11671 [USACO25JAN] Farmer Johns Favorite Operation S

P11671 [USACO25JAN] Farmer Johns Favorite Operation S 题目描述 又是 Farmer John 的农场上寒冷而无聊的一天。为了打发时间,Farmer John 发明了一种关于在整数数组上进行操作的有趣的休闲活动。 Farmer John 有一…

详细介绍:javascript文本长度检测与自动截取,用于标题长度检测

详细介绍:javascript文本长度检测与自动截取,用于标题长度检测2025-09-17 20:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

解码C语言运算符

算术运算符运算符 描述 示例 结果+ 加法 5 + 3 8- 减法 5 - 3 2* 乘法 5 * 3 15/ 除法 5 / 2 2% 取模 5 % 2 1++ 自增 a++ a+1-- 自减 a-- a-1注意:整数除法会截断小数部分 取模运算只能用于整数类型关系运算符运算符…

完整教程:一篇读懂Pormise!!【前端ES6】

完整教程:一篇读懂Pormise!!【前端ES6】2025-09-17 20:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

93. 递归实现组合型枚举

93. 递归实现组合型枚举 if (sum + n - u < m) return; 如果当前记录的数据 加上 后面的所有可以被选的数据 时无法达到要求时终止 state记录了哪些数据被选,哪些没被选的 state | 1 << u 选择当前的数据,比如0101 -> 10101 #include <iostream> using n…

Sort方法学习(伪代码记录)

Sort 方法总结 selectionSort(vector& a) 核心思想:选择最大/小的数移到最前/后 // 1. 计算数组长度// 2. 控制已排序部分的边界 for(i=0; i<n; i++){// 3. 在未排序部分(j到末尾)中寻找真正的maxfor(j=i+1, j<n; j++) find(max);// 3. 将最大的数放至数组头swap(…

深入解析:【每日一问】运算放大器与比较器有什么区别?

深入解析:【每日一问】运算放大器与比较器有什么区别?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mon…

9.17支配对问题专题总结

概括 每次查询一定范围内的点组成的点对中的最优值,而通过一些分析去减少有用点对的数量,这样子的有用点对称为 支配对 T1策略是将 \(a_i\) 相同的序列取出来单独考虑 固定 \(b_i<b_j,i<j\) 然后考虑能找出来一个序列 \(i,j1,j2,j3...\) 但是发现选 \(i,j2\) 不如选 \(…

Xじゃないか

並行じゃないか いや 通信じゃないか わかりあえなくて 愛じゃないか ——絡みなんです それがAIなんです。\[\newcommand{\c}{\mathcal} \newcommand{\eps}{\epsilon} \newcommand{\co}[2]{{\color{#1}{#2}}} \]L…

开源收银体系_大型收银系统源码_OctShop

开源收银体系_大型收银系统源码_OctShoppre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

完整教程:热力图是什么?三分钟学会热力图数据分析怎么做!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

机器视觉检测中光源的作用以及分类 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

XXL-JOB(2)

XXL-JOB(2)1、入门和集成<!-- xxl-job-core --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.5.0</version></dependency> 搭建控制台 XXL-JOB-ADMIN jar 本地启动,…

P9753 [CSP-S 2023] 消消乐

前置算法动态规划 hash哈希题目大意 给定一个字符串,可以将相邻两个相同的字符删除,然后合并成一个新序列。 例如:abba,可以先将两个 b 删除,然后合并成 aa,最后删除 a。 求出有多少个字串,最后可以将其变为空串,我们称之为合法的字串。 思路 看到数据范围,只能使用 \…

9.16 CSP-S模拟22 改题记录

HZOJ 写在前面 连着两天吃了两坨。。。好吧,那就一坨一坨地消化一下吧。话说如果这真是S组难度那我不真就废了?这场真是T1猜结论题,T2就来坨大的,不知道啥是二分图暴力都不会打。T3反正就是我是大春竹。T4上演忘记结论创造结论,然鹅实际上还是不会写。没有文件输入输,没有…

AT_agc058_b [AGC058B] Adjacent Chmax

转化为对某个区间染色,然后设 \(f_{i, j}\) 为前 \(i\) 种颜色染了 \([1, j]\) 的方案数,简单转移即可。

Jenkins CVE-2018-1000600漏洞利用与SSRF攻击分析

本文详细分析了Jenkins GitHub插件CVE-2018-1000600漏洞的利用方法,通过CSRF漏洞和权限缺失实现凭证窃取与完全响应SSRF攻击,包含PoC代码和影响版本范围说明。Jenkins - CVE-2018-1000600 PoC 来源博客文章 https://blog.orange.tw/2019/01/hacking-jenkins-part-1-play-with…

NOIP 集训日记(学术)

workwork学术版。 9.9 P4117 [Ynoi2018] 五彩斑斓的世界 分块神题。 拿到题以后发现不能直接做,然后你就开始观察。 设区间最大值为 \(maxn\) ,查询的数为 \(x\) 一个显然的性质:把所有小于等于 \(x\) 的数加上 \(x\) ,然后区间减 \(x\) ,得到的结果不变。然后我们思考一下…