首页 > 其他分享 >Codeforces Round 929 (Div. 3) 题解(D-G)

Codeforces Round 929 (Div. 3) 题解(D-G)

时间:2024-02-28 19:45:56浏览次数:39  
标签:int 题解 mathbin 929 input rm Div mod

比赛链接:https://codeforces.com/contest/1933

官解暂未放出。

质量不错的一场 D3。

CF1933D. Turtle Tenacity: Continual Mods

题意

将数组 \(a_{1..n} \ge 1\) 重排,问是否能使 \(((a_1 \mathbin {\rm mod} a_2) \mathbin {\rm mod} a_3) \cdots \mathbin {\rm mod} a_n \ne 0\)。

题解

记 \(m\) 为原数组最小值 \(\min a\)。首先若最小值唯一,只要将其放在数组首位,它将始终不变,符合要求。另外,若有一个模 \(m\) 不为零的元素,将它和 \(m\) 放在数组的前两位,即可造出一个全新的唯一最小值,符合上面的条件。

除此之外总是无解的。证明:若所有元素都是 \(m\) 的倍数,则结果也总是 \(m\) 的倍数(因为 \((xm) \mathbin {\rm mod} (ym) = (x \mathbin {\rm mod} y ) m\))。而因为至少存在两个 \(m\),至少有一个 \(m\) 被用做过模数,在这一步答案一定变为 \(0\)。

有另外一种判定方式,显然与上面是等价的:若 \(\gcd\) 的出现次数至少为两次,则说明答案为否。

代码实现

C++,$\gcd$ 判据
void solve() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int &x : a) cin >> x;
    int g = a[0];
    for (int x : a) g = gcd(g, x);
    cout << (ranges::count(a, g) <= 1 ? "YES" : "NO") << "\n";
}
Python,$\min$ 判据
for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    m = min(a)
    if a.count(m) == 1 or any(x % m for x in a):
        print("YES")
    else:
        print("NO")

标签:int,题解,mathbin,929,input,rm,Div,mod
From: https://www.cnblogs.com/cpchenpi/p/-/CF1933-solutions

相关文章

  • Codeforces Round 929 (Div. 3)
    CodeforcesRound929(Div.3)比赛链接A.TurtlePuzzle:RearrangeandNegate思路根据题意,很明显数组中所有元素的绝对值总和就是答案Code#include<bits/stdc++.h>usingnamespacestd;#defineall(x)x.begin()+1,x.end()#defineintlonglongvoidsolve(){......
  • D. Vlad and Division
    原题链接题解对于一个数,我们将其转换成二进制,然后补零到31位我们发现,能和数x配对的数只有一个,那就是按位翻转后的x,即x和\(2^{31}-1\)异或的值所以我们要找有没有能互相配对的值,以及组数,配对用map?code#include<bits/stdc++.h>usingnamespacestd;constintval=2147483......
  • 题解 P10196【[USACO24FEB] Lazy Cow P】
    总算铂金组场切一题。似乎做麻烦了,而且常数蛮大的,但是没啥思维难度,记录一下。对于每一个需求,我们将其放置在平面直角坐标系的\((m_i,b_i)\)位置。另外,自然有一个\((0,0)\)需求,也同样处理这个点。我们需要支持插入一个点的操作,并维护出答案。先考虑不需要动态插点,只在最后求......
  • 第十四届蓝桥杯个人题解
    a幸运的数主要是思路 遍历1-100000000每一层循环,首先将其每一位分到数组里,并记录位数,如果是偶数位再接着往下,比较前半和后半是否相等:通过加减最后结果是否为零来判断intmain(){  intnum=0;  for(inti=1;i<100000000;i++)  {    ints[9]={0};......
  • ABC338G evall 题解
    题意:给定一个由数字和加号和乘号组成的字符串,求出\(\sums(i,j)\)。其中\(s(i,j)\)表示\(i\)到\(j\)字符组成的表达式的值。考虑\(\text{dp}\)。设\(dp_{i}\)表示以\(i\)为起点的所有表达式的值之和。那么我们考虑以一些加号作为分界点来转移。假设\(i\)右边最......
  • CF1209G2 Into Blocks (hard version) 题解
    Description给你\(n\),\(q\),\(n\)表示序列长度,\(q\)表示操作次数。我们需要达成这么一个目标状态:如果存在\(x\)这个元素,那么必须满足所有\(x\)元素都必须在序列中连续。然后你可以进行这么一种操作,将所有的\(x\)元素的变为任意你指定的\(y\)元素,并且花费\(cnt[x......
  • 2024牛客寒假算法基础集训营6 题解 ( A,B,C,D,E,I)
    2024牛客寒假算法基础集训营6题解(A,B,C,D,E,I)A 宇宙的终结题意找到\([l,r]\)区间中有多少数恰好等于三个不同素数的乘积思路数据范围很小,可以考虑暴力,遍历\([l,r]\)区间内每个数,拿每个小于当前数的素数一直往下除,判断是否存在能被恰好3个素数整除的情况代码/********......
  • 【vue】做一个从右边出来又回去的一个抽屉div
    前言:工作需要做一个从右往左出现的一个弹窗,要有抽屉效果,看了网上各种方法好多都不能用,最后试了一种可以用,但是忘记是哪个网址了,现在就是自己写一下这个随便以后用到方便找。做一个从右边出来又回去的一个抽屉divhtml代码<divclass="addBtn"@click="show">点击按钮出......
  • 题解 NKOJ2929 【[THUSC2014] 函数求解】
    代码:#include<iostream>#include<queue>#include<cstdio>#include<cmath>usingnamespacestd;typedefstruct{ intnxt; intend; intdis; doublecost;}Edge;constintN=2e3,M=400+7,K=80800+7;constdoubleep......
  • ABC294 EFG 题解
    E-2xNGrid题意给你一个\(2\timesL\)的网格,但是\(L\)很大,所以用以下形式压缩:将同一个颜色的连续段视为一个整体,那么每一行就可以用若干个二元组\((a_i,b_i)\)表示,其中\(a_i\)为颜色,\(b_i\)为连续段的长度。保证长度\(\le10^5\)。输入以上述形式压缩,现在让你求出......