CF 1110 E. Magic Stones

E. Magic Stones

链接

题意:

  给定两个数组,每次可以对一个数组选一个位置i($2 \leq i \leq n - 1$),让a[i]=a[i-1]+a[i+1]-a[i],或者b[i]=b[i-1]+b[i+1]-b[i]。问进行一些操作后,a和b能否相同。

分析:

  考虑一次操作会变成什么样子。

  a b c

  a a+c-b c

  我们发现这些数字差分后是不变的。于是对两个数组差分后,排序,看是否一样即可。注意判一下1和n是否相等。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;

inline int read() {
    int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch==‘-‘)f=-1;
    for(;isdigit(ch);ch=getchar())x=x*10+ch-‘0‘;return x*f;
}

const int N = 100005;
LL a[N], b[N], c1[N], c2[N];

int main() {
    int n = read();
    for (int i = 1; i <= n; ++i) a[i] = read();
    for (int i = 1; i <= n; ++i) b[i] = read();
    if (a[1] != b[1] || a[n] != a[n]) {
        puts("No"); return 0;
    }
    for (int i = 1; i < n; ++i) c1[i] = a[i + 1] - a[i];
    for (int i = 1; i < n; ++i) c2[i] = b[i + 1] - b[i];
    sort(c1 + 1, c1 + n);
    sort(c2 + 1, c2 + n);
    for (int i = 1; i < n; ++i) {
        if (c1[i] != c2[i]) {
            puts("No"); return 0;
        }
    }
    puts("Yes");
    return 0;
}

原文地址:https://www.cnblogs.com/mjtcn/p/10357192.html

时间: 2024-11-13 01:27:26

CF 1110 E. Magic Stones的相关文章

CF 1110 D/E

CF 1110 D. Jongmah 题目大意:给你?\(n\)个瓷砖,每块瓷砖上有一个数字?\(a_i,(1\leq a_i\leq m)\).你可以将三个有连续数字?\((比如3,4,5)\)的瓷砖或者三个数字相同?\((比如7,7,7)\)的瓷砖组成一个三元组.每个瓷砖只能用一次.问最多可以得到多少个三元组.? 比赛的时候好像全场A穿,然而并没有想到 (TAT. 一开始想到\(DP\),但是?觉得状态数太大:于是想了奇奇怪怪的贪心,但是都能找到反例. 这道题的关键是要发现一个性质:同一位置

E. Magic Stones CF 思维题

E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Grigory has nn magic stones, conveniently numbered from 11 to nn . The charge of the ii -th stone is equal to cici . Sometime

Magic Stones CodeForces - 1110E (思维+差分)

E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Grigory has nn magic stones, conveniently numbered from 11 to nn. The charge of the ii-th stone is equal to cici. Sometimes G

【CF1110E】 Magic Stones - 差分

题面 Grigory has n n magic stones, conveniently numbered from \(1\) to \(n\). The charge of the \(i\)-th stone is equal to \(c_i\). Sometimes Grigory gets bored and selects some inner stone (that is, some stone with index \(i\), where \(2 \le i \le n-1

CF - 1110 C Meaningless Operations

题目传送门 题解: 首先根据观察,很容易发的是: x != (1<<k) - 1 时候 答案就是, 将x二进制下再最高位后的0都变成1. 然后就是考虑 x == (1<<k) - 1的时候 同样根据观察可以得到  b ^ x =  x - b, b&x = b 所以就是将x拆成2个数, 然后这2个数的gcd最大. 我们就最后找x的因子. 如 x = b * c 那么们就可以把2个数分成 c , (b-1) * c,gcd 为 c. 或者 b , b * (c-1)   gc

CF 1110 D. Jongmah

D. Jongmah 链接 题意: 一些数字,有两种方式组成一个三元组,[x,x,x],[x,x+1,x+2],每个数字只能用一次,求最多组成多少三元组. 分析: 因为每三个[x,x+1,x+2]是可以拆成[x,x,x],[x+1,x+1,x+1],[x+2,x+2,x+2]的,所以可以认为对于以x开始的[x,x+1,x+2]最多有两个. 于是可以dp[i][x][y]表示到第i个数字,存在x个[i-1,i,i+1],y个[i,i+1,i+2],最多组成多少个三元组(这些三元组的右端点在i以内,

【Codeforces Global Round 1 E】Magic Stones

[链接] 我是链接,点我呀:) [题意] 你可以把c[i]改成c[i+1]+c[i-1]-c[i] (2<=i<=n-1) 问你能不能把每一个c[i]都换成对应的t[i]; [题解] d[i] = c[i+1]-c[i]; (1<=i<=n-1) change c[i] c[i]' = c[i+1]+c[i-1]-c[i]; d[i-1] = c[i]'-c[i-1]; = c[i+1]+c[i-1]-c[i]-c[i-1] == c[i+1]-c[i] = d[i]; d[i]

「日常训练」Magic Stones(CodeForces-1110E)

题意 给定两个数组c和t,可以对c数组中的任何元素变换\(c_i\)?成\(c_{i+1}+c_{i-1}-c_i\)?,问c数组在若干次变换后能否变换成t数组. 分析 这种魔法题目我是同样的没做过.Editorial里说用差分来能够看出思路.问题是,如何能够想到差分来做?因为它的变换就是相邻的数的加减法,那么想要找到思路的突破口必须也得从这里突破. 考虑变换前后的数组: 原来:\(a_{i-1}, a_i, a_{i+1}\) 之后:\(a_{i-1}, a_{i-1}+a_{i+1}-a_i

[CF1110E]Magic Stones

题目大意:有一个长度为$n(n\leqslant10^5)$的数列$c$,问是否可以经过若干次变换变成数列$t$,一次变换为$c'_i=c_{i+1}+c_{i-1}-c_i$ 题解:思考一次变换的本质,对$c$做差分,原差分为$c_i-c_{i-1},c_{i+1},c_i$:对$c_i$做一次变换后为:$c'_i-c_{i-1}=c_{i+1}+c_{i-1}-c_i-c_{i-1}=c_{i+1}-c_i,c_{i+1}-c'_i=c_{i+1}-(c_{i+1}+c_{i-1}-c_i)