zoukankan      html  css  js  c++  java
  • CF1478C-Nezzar and Symmetric Array

    题目

    给出一个长度为 (2n) 的数组,问是否存在一个满足条件的 (a) 数组,满足给出的 (d) 数组。((1≤n≤10^5,0≤d_i≤10^{12})

    题目链接:https://codeforces.com/contest/1478/problem/C

    分析

    首先,(d) 数组中的数必须是成对出现,两两相同。一开始从小的数入手,推了很久的公式都没有解决。其实,从最大的 (a_i) 入手就很好写。可以发现,有:

    [a_i=frac{d_{i}-2sum_{j=i+1}^{n}{a_j}}{2i} ]

    按照公式,求出 (a) ,然后按照题目条件依次判断即可。

    代码

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N=2e5+5;
    ll d[N],a[N];
    map<ll,int>mp;
    int main()
    {
        int t,n;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            mp.clear();
            for(int i=1;i<=2*n;i++)
                scanf("%lld",&d[i]);
            sort(d+1,d+1+2*n);
            int f=0,cnt=0;
            for(int i=1;i<=2*n;i+=2)
            {
                if(d[i]!=d[i+1]||d[i]%2==1)
                {
                    f=1;
                    break;
                }
                d[++cnt]=d[i];
            }
            if(f==0)
            {
                ll sum=0;
                for(int i=n;i>=1;i--)
                {
                    if((d[i]-2*sum)%(2*i))
                    {
                        f=1;
                        break;
                    }
                    a[i]=(d[i]-2*sum)/(2*i);//cout<<i<<":"<<a[i]<<endl;
                    if(mp.count(a[i])||a[i]<=0)
                    {
                        f=1;
                        break;
                    }
                    mp[a[i]]=1;
                    sum+=a[i];
                }
                if(f) printf("NO
    ");
                else printf("YES
    ");
            }
            else printf("NO
    ");
        }
        return 0;
    }
    
    
  • 相关阅读:
    day 34
    day 33 线程锁
    day 32 操作系统、线程和进程(GIL锁)
    day 31 网络基础的补充
    day 30 多线程 socketserver模块补充
    python自学笔记 2019/07/01
    类与对象的概念
    递归及三种二分法
    好看的颜色
    zend 汉化
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/14349736.html
Copyright © 2011-2022 走看看