CodeForces - 1478C - Nezzar and Symmetric Array (思维+规律)

简介: 笔记

Nezzar and Symmetric Array


题意

11.png

思路

举个例子−4,−3,−2,−1,1,2,3,4 可以发现规律 :一个数到一个较小的数和这个较小的数的相反数的距离是自身的两倍 比如 4 到 -3 和 4 到 3 距离为 8


并且一个绝对值较小的数和两个绝对值比它大的正负数的距离和 = 二倍大数的绝对值


所以可以从大到小考虑依次还原数组 判断是否符合条件即可又发现了一个规律


首先记录d数组中每个数出现的次数 稍微想一下可以知道 一个数肯定是两个两个出现 并且是偶数


用 sum 记录 当前数到比它绝对值大的数的距离t.first 减去sum 后得到的为 当前数到所有绝对值小于等于自己的数(这样的数有n个 每次找到后 n–)的距离 可以得到 x= (t.first−sum)/ 2 / n


记录上一个找到的数为las 因为是从大到小找且找正的那个 所以 如果x>=las  ∣∣  x<=0 就不合题意了


代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
//#define mod 1000000007
using namespace std;
typedef  long long LL;
typedef pair<int, int>PII;
inline LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; }
const int N = 200010;
int n;
LL a[N];
bool cmp(LL a, LL b) {
  return a > b;
}
void solve() {
  bool flag = true;
  cin >> n;
  map<LL, LL, greater<LL>>mp;
  for (int i = 1; i <= 2 * n; ++i) {
    cin >> a[i];
    mp[a[i]]++;
  }
  LL las = LLONG_MAX;
  LL sum = 0;
  for (auto &t : mp) {
    //cout << "t.first == " << t.first << endl;
    if (t.second != 2) {
      flag = false;
      break;
    }
    else if (t.first & 1) {
      flag = false;
      break;
    }
    else {
      if (((t.first - sum) / 2) % n) {
        flag = false;
        break;
      }
      LL x = (t.first - sum)/ 2 / n;
      //cout << "x == " << x << endl;
      if (x <= 0 || x >= las) {
        flag = false;
        break;
      }
      n--;
      sum += 2 * x;
      las = x;
    }
  }
  if (flag)puts("YES");
  else puts("NO");
}
int main() {
  int t; cin >> t;
  while (t--)
    solve();
  return 0;
}


目录
相关文章
codeforces722——C.Destroying Array(并查集+栈+逆向思维)
codeforces722——C.Destroying Array(并查集+栈+逆向思维)
88 0
codeforces722——C.Destroying Array(并查集+栈+逆向思维)
|
10月前
|
Python
使用array()函数创建数组
使用array()函数创建数组。
190 3
|
3月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
129 67
|
5月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
108 5
|
5月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
145 2
|
5月前
|
存储 JavaScript 前端开发
JavaScript Array(数组) 对象
JavaScript Array(数组) 对象
54 3
|
5月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
|
6月前
|
Go
Golang语言之数组(array)快速入门篇
这篇文章是关于Go语言中数组的详细教程,包括数组的定义、遍历、注意事项、多维数组的使用以及相关练习题。
97 5
|
7月前
|
Python
PyCharm View as Array 查看数组
PyCharm View as Array 查看数组
178 1
|
8月前
|
索引