首页 > 其他分享 >2022.11.2每日一题

2022.11.2每日一题

时间:2022-11-03 11:12:53浏览次数:71  
标签:10 int 每日 cin Polycarp 数组 2022.11 1000

Daimayuan Online Judge-整齐的数组

题目描述

\(Polycarp\) 有一个长度为 \(n\) 的数组 \(a_1,a_2,...,a_n\)(\(n\) 是偶数)。\(Polycarp\) 还得到了一个正整数 \(k\),他开始对数组 \(a\) 做如下操作:选择一个下标 \(i(1≤i≤n)\) 使 \(a_i\) 减去 \(k\)。
在 \(Polycarp\) 进行若干次操作后(可能 \(0\) 次),数组 \(a\) 中的所有数都变成相同的了。请你找到最大的符合要求的 \(k\),如果 \(k\) 可以为任意大,请输出 \(−1\)。

输入格式

第一行一个整数 \(t\),表示测试单元的个数。
接下来每个测试单元有两行。第一行包含一个偶数 \(n\)。第二行包含 \(n\) 个整数 \(a_1,a_2,...,a_n\)。

输出格式

对于每个测试单元输出单独一行一个整数 \(k(k≥1)\) —— \(Polycarp\) 能用来对数组进行操作的最大的数,或者 \(−1\) —— 如果 \(k\) 能任意大的话。

样例输入
3
6
1 5 3 1 1 5
8
-1 0 1 -1 0 1 -1 0
4
100 -1000 -1000 -1000
样例输出
2
1
1100
数据范围

所有数据保证 \(1≤t≤10\),\(4≤n≤40\)(\(n\) 是偶数),\(−10^6≤a_i≤10^6\),并且 \(n\) 的总和不超过\(100\)。

解题思路

我们需要对数组中的某些数减去若干个 \(k\),比如数组中的 \(a[i]\) 和 \(a[j]\) 且 \(a[i]≤a[j]\),并且 \(a[i] - n * k = a[j] - m * k\),那么我们可以得到 \(a[i] = a[j] + (n - m) * k\)。经过操作,数组中的数都变成相同的,根据前面推导的式子也就相等于所有的数都变成了最小的那个数。我们只需要计算每个数与最小数的差值的最大公约数即可。特判所有数都相等时输出 \(-1\)。

C++代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 50;

int t, n;
int a[N];

int gcd(int a, int b)
{
    if(b == 0)
        return a;
    return gcd(b, a % b);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin >> t;
    while(t --)
    {
        cin >> n;
        for(int i = 1; i <= n; i ++)
            cin >> a[i];
        sort(a + 1, a + n + 1);
        int ans = 0;
        for(int i = 2; i <= n; i ++)
        {
            if(a[i] == a[1]) continue;
            ans = gcd(ans, a[i] - a[1]);
        }
        if(ans) printf("%d\n", ans);
        else puts("-1");
    }
    return 0;
}

标签:10,int,每日,cin,Polycarp,数组,2022.11,1000
From: https://www.cnblogs.com/Cocoicobird/p/16853779.html

相关文章

  • 2022.11.1每日一题
    DaimayuanOnlineJudge-网格判断题目描述您将获得一个\(n×n\)的网格,网格中每个正方形的颜色为黑色或白色。如果满足以下所有条件,则网格是正确的:每行的黑色方块数......
  • 2022.11.2 模拟赛题解
    简要题意给定一棵\(n\)个节点的有根树,树根为\(1\)号节点,每个结点有一个权值\(a_i(|a_i|\leq10^9)\),求包含\(1\)的前\(k\)小的连通块的权值。简要题解前置内......
  • 739 每日温度
    题目739每日温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都......
  • 【2022.11.2】Vue基础学习(7)
    内容详细1vue3介绍1.性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%2.源码的升级使用Proxy代替defineProperty实现响应式......
  • [2022.11.2]collection
    collection接口1.单列集合框架结构l----collection接口:单列集合,用来存储一个一个的对象/----List接口:存储序的、可重复的数据。-->“动态”数组/--......
  • 2022-11-02每日一题
    Acwing逆序对的个数给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第i个和第j个元素,如果满足i<j且a[i]>a[j],则其为一个......
  • 【2022.11.02】机器学习名词记录
    学习来源均来自:https://www.bilibili.com/video/BV1Wv411h7kN当我们设定函数的时候,不一定是线性的情况下,可以将一个曲线图拆分成多个函数相加正如下图中的红色图,是由四......
  • 2022年4月第十三届蓝桥杯省赛C组C语言 习题解析(每日一道)
    试题B:特殊时间   【问题描述】           2022年2月22日22:20是一个很有意义的时间,年份为2022,由3个2和1个0组   成,如果将月和日......
  • 【闲话】2022.11.01
    今天是冬月的第一天万圣节dsu晚上会去大家屋里要糖的说起来很久没喝南瓜粥了今日一推这种东西,本来就是越离谱越好阴蜂(早就)已经有理论解了大家要不去打一下((说起来......
  • 2022-11-01每日一题
    第k个数给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列从小到大排序后的第k个数。输入格式第一行包含两个整数n和k。第二行包含n个整数(所......