博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces.1110E.Magic Stones(思路 差分)
阅读量:5240 次
发布时间:2019-06-14

本文共 904 字,大约阅读时间需要 3 分钟。


听dalao说很nb,做做看(然而不小心知道题解了)。

\(Description\)

给定长为\(n\)的序列\(A_i\)\(B_i\)。你可以进行任意多次操作,每次操作任选一个\(i\in[2,n-1]\),把\(A_i\)变成\(A_{i-1}+A_{i+1}-A_i\)

求能否将序列\(A_i\)变成\(B_i\)
\(n\leq10^5\)

\(Solution\)

\(A_i\to A_{i-1}+A_{i+1}-A_i\)这个形式很有趣,求出\(A_i\)的差分序列\(d_i\)试试看。

\(d_{i-1}=A_i-A_{i-1},\ d_i=A_{i+1}-A_i\)
如果变换\(A_i\),那么\(d_{i-1}\)会变成\(A_{i+1}-A_i=d_i\)\(d_i\)会变成\(A_i-A_{i-1}=d_{i-1}\)
也就是我们可以任意交换\(A_i\)的差分序列\(d_i\)
所以再求出\(B_i\)的差分序列\(d_i'\),判断\(d_i\)能否变成\(d_i'\),再判一下\(A_1\)是否等于\(B_1\)即可。


//46ms  900KB#include 
#include
#include
#define gc() getchar()typedef long long LL;const int N=1e5+5;int d1[N],d2[N];inline int read(){ int now=0;register char c=gc(); for(;!isdigit(c);c=gc()); for(;isdigit(c);now=now*10+c-48,c=gc()); return now;}inline bool Check(const int n){ for(int i=1; i

转载于:https://www.cnblogs.com/SovietPower/p/10364291.html

你可能感兴趣的文章
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
全连接神经网络(DNN)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
React Router 4.0 基本使用
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>