首页 > 其他分享 >[题解] [CCPC陕西省赛2022 H题] Cute Rabbit

[题解] [CCPC陕西省赛2022 H题] Cute Rabbit

时间:2024-04-17 16:13:42浏览次数:20  
标签:Cute gcd int 题解 兔子 leq MAXN 2022 ans

[CCPC陕西省赛2022 H题] Cute Rabbit

题目描述

有 \(n\) 只白色的兔子,把其中 \(m\) 只染成绿色。每只兔子上有一个数 \(a_i\) ,如果所有白色兔子上的数对所有绿色兔子上的数两两取余的值均相同,则该种染色方式合法,求能够使染色合法的最大的 \(m\) 。

输入格式

第一行有一个整数 \(n(2 \leq n \leq 10^5)\) ,表示兔子的数量。

第二行有 \(n\) 个整数 \(a_1, a_2, ..., a_n (1 \leq a_i \leq 10^6)\)。

输出格式

输出一行一个整数,表示问题的答案。

题解

首先考虑到的一种情况是把除了最小的数都涂成绿色,此时所有白数对绿数取余的答案都是其本身,显然合法。

考虑其他的情况。不难得出,所有绿色的数必须小于白色的数。因此,我们将所有数排序,之后枚举白数和绿数的分界线即可。此时,问题转化成了将前 \(i\) 个数染成绿色之后如何判断该染色方案是否合法。通过观察可以发现,染色合法的充分必要条件是 \(gcd(a_{i+1}, a_{i+2}, ..., a_n) \% lcm(a_1, a_2, ..., a_i) = 0\) 。因此,我们只需要预处理出前缀 \(lcm\) 和后缀 \(gcd\)即可 \(O(1)\) 的判断染色的合法性。

AC代码

//
// Created by wxy3265 on 2024/4/16.
//
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;

const int MAXN = 1e6 + 3;

int n;
int a[MAXN], l[MAXN], g[MAXN];

int gcd(int x, int y) {
    return y? gcd(y, x % y): x;
}
inline int lcm(int x, int y) {
    return x * y / gcd(x, y);
}

signed main() {
    int ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    sort(a + 1, a + 1 + n);
    for (int i = 2; i <= n; i++) {
        if (a[i] > a[1]) ans++;
    }
    if (ans == 0 || ans == n - 1) {
        cout << n - 1;
        return 0;
    }
    int tot = 1;
    for (int i = 1; i <= n; i++) {
        if (i == 1) l[i] = a[i];
        else l[i] = lcm(l[i - 1], a[i]);
        if (l[i] <= a[n]) tot++;
    }
    g[n - 1] = a[n] - a[n - 1];
    for (int i = n - 2; i > 0; i--) {
        g[i] = gcd(g[i + 1], a[i + 1] - a[i]);
    }
    g[n] = a[n];
    if (a[n] % l[n] == 0) ans = n - 1;
    for (int i = 1; i <= n - 1 && i <= tot - 1; i++) {
        if (g[i + 1] % l[i] == 0) {
            ans = max(ans, i);
        }
    }
    cout << ans << '\n';
    return 0;
}

标签:Cute,gcd,int,题解,兔子,leq,MAXN,2022,ans
From: https://www.cnblogs.com/Floyd3265/p/18140997

相关文章

  • uoj32 跳蚤公路题解
    题目链接点击打开链接题目解法首先问题等价于有一个负环可以到\(v\)假设环边的\(w\)之和为\(b\),\(c\)之和为\(k\),则这个环的长度就为\(kx+b\)如果是负环,需要满足\(kx+b<0\)钦定负环上的一个点\(st\),令\(f_{i,j}\)表示从\(st\)到\(i\)的路径中,\(\sumc=j\)的......
  • 【问题解决】Fatal error "unsafe repository ('git目录名' is owned by someone else
    问题复现近期升级了Gitv2.37.0,发现在gitbash进入git目录执行git命令时出现错误:Fatalerror"unsaferepository('git目录名'isownedbysomeoneelse)",无法使用git做一些操作。问题解决两个方法:降级到v2.35.2之前,或者,gitconfig--global--addsafe.directory仓库目录......
  • 再次进入虚拟机找不到共享文件夹的内容了---问题解决
    问题描述在重新开启虚拟机之后,发现原来的路径上没有上次共享文件夹的内容了,查看虚拟机设置,发现共享文件夹还在启用,也不是这里的问题;问题解决因为我们是用链接的方式实现的本地和虚拟机文件共享,所以,每次重新进入虚拟机时,就需要重新链接一下,用下面这行代码就能够再次看到共享文件......
  • 新手大白话 UUCTF 2022 新生赛ezpop 字符串逃逸
    今天做个字符串逃逸的题目,这个题还挺不错的,不多bb直接看源码。点击查看代码<?php//flaginflag.phperror_reporting(0);classUUCTF{public$name,$key,$basedata,$ob;function__construct($str){$this->name=$str;}function__wakeup(){......
  • 2024/4/15考试题解
    目录成绩报告A.排座位题目内容思路代码B.梦中的学校题目内容思路代码C.激突冲击题目内容思路代码D.奖学金题目内容思路代码成绩报告T1说是快排,其实跟快排没有任何关系,就是单纯考了个语法。T2不会推式子,但是输出1有20分。T3不会差分约束(打拓扑排序导致的),同理输出-1得18分。T4fre......
  • P6864 [RC-03] 记忆 题解(评分:8.1)(2023.12.13)
    前言这下又不是官解了吧?模拟赛题,在一个月后又出现在了数据结构讲稿上,令人忍俊不禁。Solution官方解法是用线段树加矩阵,不过赛时的我显然没这么聪明,是想不到的。赛时我就只知道先发掘一些答案的性质。一、一些性质首先,发现这个撤销操作比较棘手,考虑没有撤销操作的情况下,每一......
  • P2178 [NOI2015] 品酒大会 题解(评分:8.0)(2024.2.23)
    前言"I'mfree."做法与题解区都不同,虽然麻烦,但是毕竟复杂度是对的,而且想法很自然,还是写一写吧!Solution题意:给定长为\(n\)的字符串\(s\)和长为\(n\)的数组\(A\),对于每个\(r\),求满足\(\text{LCP}(\text{Suffix}(x),\text{Suffix}(y))\ger,x<y\)的数对\((x,y)\)数......
  • [error] Error: Fail to open IDE 问题解决
    在使用HBuilder编译器,控制台报[error]Error:FailtoopenIDE 错误如下所示: 有两个原因所致:  其一:微信小程序AppID错误  解决方案:点击项目目录 manifest.json,打开项目配置,将AppID填到配置界面的微信小程序AppID输入框中,重新运行即可,如下所示: 其二:小程序打......
  • P8290 [省选联考 2022] 填树
    MyBlogsP8290[省选联考2022]填树很有意思的拉插优化DP。首先可以枚举\(L\)来限制选的数的值域在\(L,L+k\)中。然后进行树上DP:设\(v_i\)表示当前点\(i\)能填多少种数,\(w_i\)表示当前点\(i\)能填的数的和。\(f_i\)表示当前\(i\)子树内的所有合法根链数量,\(g......
  • 【题解】P4307 [JSOI2009] 球队收益 / 球队预算
    P4307[JSOI2009]球队收益/球队预算题解题目传送门题意简述一共有\(n\)个球队比赛,输了赢了都会有相应的支出,现在让你安排\(m\)场比赛的输赢,是总支出最少。思路首先看到最小支出,状态不好定义,直接费用流,启动!。后文如果没有特殊说明,边的费用均为\(0\)。考虑建图,其......