CF1110E Magic Stones(构造题)
这场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");
}
CF1110E Magic Stones(构造题)的更多相关文章
- CF1110E Magic Stones 差分
传送门 将原数组差分一下,设\(d_i = c_{i+1} - c_i\) 考虑在\(i\)位置的一次操作会如何影响差分数组 \(d_{i+1}' = c_{i+1} - (c_{i+1} + c_{ ...
- [CF1110E]Magic Stones
题目大意:有一个长度为$n(n\leqslant10^5)$的数列$c$,问是否可以经过若干次变换变成数列$t$,一次变换为$c'_i=c_{i+1}+c_{i-1}-c_i$ 题解:思考一次变换的本 ...
- 【CF1110E】 Magic Stones - 差分
题面 Grigory has n n magic stones, conveniently numbered from \(1\) to \(n\). The charge of the \(i\)- ...
- E. Magic Stones CF 思维题
E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- cf251.2.C (构造题的技巧)
C. Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabyt ...
- hdu4671 Backup Plan ——构造题
link:http://acm.hdu.edu.cn/showproblem.php?pid=4671 其实是不难的那种构造题,先排第一列,第二列从后往前选. #include <iostrea ...
- Educational Codeforces Round 7 D. Optimal Number Permutation 构造题
D. Optimal Number Permutation 题目连接: http://www.codeforces.com/contest/622/problem/D Description You ...
- Codeforces 482 - Diverse Permutation 构造题
这是一道蛮基础的构造题. - k +(k - 1) -(k - 2) 1 + k , 1 , k , 2, ....... ...
- BZOJ 3097: Hash Killer I【构造题,思维题】
3097: Hash Killer I Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 963 Solved: 36 ...
随机推荐
- English_word_learning
这次报名参加了学院的21天打卡活动,说实话,也是想给自己一个积累的平台. 毕竟,真的有时候感觉挺弱的 有的人用了一年考完了四六级,而有人却用四年还未考完. 听到有一位学长因为自己的四级成绩没有达到48 ...
- vue-cli 使用 font-awesome 字体插件
在 cmd 中,运行:cnpm install font-awesome在 main.js 里添加import "font-awesome/css/font-awesome.css" ...
- 【arm学习】我的第一个裸板程序
初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...
- MySQL在x64系统上1067问题解决
最近一个项目需要用到MYSQL,因为以前也弄过,所以就没怎么多想,直接下一个完事了.于是乎果断上官方网站下了一个installer(5.26),修改了一下默认位置和配置,然后一路next,最后在配置完 ...
- Jq_网站顶部定时折叠广告
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><titl ...
- 个人新站 【EXP技术分享博客】 落成~ 全新的技术资源~ 欢迎莅临~
对的,我筹备了大半年的个站技术网站正式开张了~ EXP技术分享博客: http://exp-blog.com CSDN上面大部分文章已经迁移过去了,以后也会更多地在新站点更新~ 为了庆祝新站开张,近期 ...
- win10引导错误的修复(内容系转载)
#!尊重原作者,再此声明此内容属于网络转载,只是为了能保留下来方便日后查阅!!! win10误删引导文件,0xc0000098的解决方案,bcd引导文件受损情况分析 一.※相对简单的解决方法,对应的情 ...
- Google C++ 编码规范
刚刚看到一位博主的文章分享Google C++ 编码规范 本人做一下记录,方便以后学习.. 中文在线版本地址: http://zh-google-styleguide.readthedocs.io/e ...
- 微软职位内部推荐-SW Engineer II for Azure Network
微软近期Open的职位: Software Engineer II The world is moving to cloud computing. Microsoft is betting Windo ...
- linux 操作 mysql 指定端口登录 以及启动 停止
linux 操作 mysql 指定端口登录 mysql -uroot -p -h10.154.0.43 -P3341 1.查看mysql版本方法一:status;方法二:select version( ...