这场CF怎么这么多构造题……

题目链接:CF原网 洛谷

题目大意:给定两个长度为 $n$ 的序列 $c$ 和 $t$。每次我们可以对 $c_i(2\le i<n)$ 进行一次操作,也就是把 $c_i$ 变成 $c_i'=c_{i-1}+c_{i+1}-c_i$。问 $c$ 能否在若干次操作后变成 $t$。

$1\le n\le 10^5,1\le c_i,t_i\le 2\times 10^9$。


很容易考虑差分。我们设 $d_i=c_i-c_{i-1},s_i=t_i-t_{i-1}(2\le i\le n)$。

那么对 $c_i$ 进行一次操作后,

$d_i$ 会变成 $d_i'=c_i'-c_{i-1}=c_{i-1}+c_{i+1}-c_i-c_{i+1}=c_{i+1}-c_i=d_{i+1}$,

$d_{i+1}$ 会变成 $d_{i+1}'=c_{i+1}-c_i'=c_{i+1}-(c_{i-1}+c_{i+1}-c_i)=c_i-c_{i-1}=d_i$。

实际上就是把 $d_i$ 和 $d_{i+1}$ 换了个位置。

很明显,仅仅通过交换相邻元素,就可以把原序列变成任意一种原元素的排列。

而两个序列完全相同,当且仅当它们的第一个元素相同且差分序列完全相同。

所以只需判断 $c_1=t_1$ 且 $d$ 和 $s$ 能通过重排变得完全一样即可。

后半部分如何判断?排个序后看看是否完全一样即可。

时间复杂度 $O(n\log n)$。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
char ch=getchar();int x=,f=;
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,c[maxn],t[maxn],d1[maxn],d2[maxn];
int main(){
n=read();
FOR(i,,n) c[i]=read();
FOR(i,,n) t[i]=read();
if(c[]!=t[]) return puts("No"),; //先判首项相等
bool flag=true;
FOR(i,,n) d1[i]=c[i]-c[i-],d2[i]=t[i]-t[i-]; //两个差分序列
sort(d1+,d1+n+);sort(d2+,d2+n+); //排序
FOR(i,,n) if(d1[i]!=d2[i]){flag=false;break;} //比较
puts(flag?"Yes":"No");
}

最新文章

  1. sqlserver数据以及日志文件的设置小结
  2. javascript 与jquery为每个p标签增加onclick方法
  3. 共享jQuery/Eclipse/SVN/PS/DW/的API文档
  4. struts2中怎么把action中的值传递到jsp页面
  5. pdo 的配置与启用
  6. 每天一道LeetCode--371. Sum of Two Integers
  7. Oracle每10天删除数据,并重建索引
  8. POJ 2002 Squares 哈希
  9. access_token的获取方式
  10. iperf
  11. js正则表达式验证字符长度
  12. c++ 容器、继承层次、句柄类
  13. k-means算法的Python实现
  14. Centos常用命令之:搜索
  15. 一种转换Ipv6地址的方法
  16. Linux中常用来查看进程的命令PS
  17. python类与对象-如何为创建大量实例节省内存
  18. 使用Python访问微信
  19. Ubuntu 18.0.4安装docker
  20. AMM调整为ASMM命令(关闭memory_target自动管理方式)

热门文章

  1. # 20155319 Exp3 免杀原理与实践
  2. 一、InnoDB引擎
  3. libgdx自制简易版Don&#39;t Touch The White Tile
  4. JAVAWEB 项目注册登录模块问题总结
  5. python语言程序设计2
  6. Ubuntu16.4下QT配置opencv3.1+FFmpeg
  7. C++ string 类详解
  8. Beta阶段展示博客
  9. 20135119_涂文斌 实验三 敏捷开发与XP实践
  10. Linux内核分析——第八周学习笔记