zoukankan      html  css  js  c++  java
  • CF1110E Magic Stones

    CF1110E Magic Stones

    题目描述

    一次操作选择1<i<n,使  $ c_i $  变为  $ c_i = c_{i-1} + c_{i+1}  - c_i $ 

    是否能做若干次操作,使每个 $ c_i $ 和 $ t_i $ 相等?

    数据范围:1e5

    题解:

    看到这个形式很容易想到差分

    我们把这个移项

    c[i]'-c[i-1]=c[i+1]-c[i]

    这就是差分后的序列

    所以每次操作对于差分数列的值没有发生改变 改变的只有位置 也就是交换一下位置

    只比较差分序列即可

    注意特判第一位

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define ll long long
    #define rg register
    #define I inline
    #define MAXN 100010
    
    I ll read()
    {
        ll f = 1, x = 0;
        char  ch;
        do
        {
            ch = getchar();
            if(ch == '-') f = -1;
        }while(ch < '0' || ch > '9');
        do
        {
            x = (x<<3) + (x<<1) + ch - '0';
            ch = getchar();
        }while(ch >='0' && ch <='9');
        return f*x;
    }
    
    int n;
    int a[MAXN],t[MAXN];
    int ca[MAXN],ct[MAXN];
    
    int main()
    {
        n = read();
        for(int i=1;i<=n;i++)
        {
            a[i] = read(); 
            ca[i] = a[i] - a[i-1];
        }
        for(int i=1;i<=n;i++)
        {
            t[i] = read();
            ct[i] = t[i] - t[i-1];
        }
        if(a[1]!=t[1]||a[n]!=t[n]) 
        {
            cout << "No" << endl;
            return 0;
        }
        sort(ca+1,ca+n+1);
        sort(ct+1,ct+n+1);
        for(int i=1;i<=n;i++)
        {
            if(ca[i]!=ct[i])
            {
                cout << "No" << endl;
                return 0;
            }
        }
        cout << "Yes" << endl;
        return 0;
    }

     

  • 相关阅读:
    【转】MySQL导入数据乱码的分析与解决
    查看MySQL的warning
    修改MySQL字符集
    【转】PHP乱码问题,UTF8(乱码)
    马哥Linux——第一周作业
    马哥Linux——第二周作业
    .Net内部运行过程
    Html那些事
    面向对象图解、类型转换图解,写给.Net新手
    javascript对于DOM加强
  • 原文地址:https://www.cnblogs.com/wlzs1432/p/12239181.html
Copyright © 2011-2022 走看看