Codeforces Round #694 (Div. 2) D. Strange Definition 思维

11 篇文章 0 订阅

D. Strange Definition

题意

如果 x x x y y y 满足 l c m ( x , y ) g c d ( x , y ) \frac{lcm(x,y)}{gcd(x,y)} gcd(x,y)lcm(x,y) 是完全平方数,则 x x x y y y 相邻。

给一个长度为 n n n 的数组,满足 1 ≤ a i ≤ 1 0 6 1\le a_i\le 10^6 1ai106 。每一秒过后,数组每个元素 a i a_i ai 都会替换为自身与所有与 a i a_i ai 相邻的数的乘积。定义 d i d_i di a i a_i ai 相邻的元素的个数。给出 q q q 个询问,每次询问 t t t 秒时的 m a x ( d i ) max(d_i) max(di)

题解
  • l c m ( x , y ) g c d ( x , y ) = x ⋅ y g c d 2 ( x , y ) \frac{lcm(x,y)}{gcd(x,y)}=\frac{x\cdot y}{gcd^2(x,y)} gcd(x,y)lcm(x,y)=gcd2(x,y)xy ,如果这个数是完全平方数,当且仅当 x ⋅ y x\cdot y xy 是完全平方数。所以 x x x y y y 相邻当且仅当 x ⋅ y x\cdot y xy 是一个完全平方数。
  • a i a_i ai 分解成 ∑ p i c i \sum p_i^{c_i} pici。求 m a x ( d i ) max(d_i) max(di) ,所以可以忽略偶数次幂,也就是可以除掉 a i a_i ai 的所有完全平方数。然后统计处理过后 a i a_i ai 出现的个数,初始答案就是出现的最大次数。
  • 经过 1 1 1 秒后,对于 a i a_i ai ,如果 c n t [ a i ] cnt[a_i] cnt[ai] 是偶数,那么 a i a_i ai 就会变成一个完全平方数,可以看作 1 1 1 ,所以 a i a_i ai 的次数就累加到 1 1 1 上。注意不能重复操作,需要维护一个 v i s [ ] vis[] vis[] 数组。操作一次之后再操作就不会产生影响了。
代码
#pragma region
//#pragma optimize("Ofast")
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
using namespace std;
typedef long long ll;
#define tr t[root]
#define lson t[root << 1]
#define rson t[root << 1 | 1]
#define rep(i, a, n) for (int i = a; i <= n; ++i)
#define per(i, a, n) for (int i = n; i >= a; --i)
#pragma endregion
const int maxn = 3e5 + 5;
int a[maxn], cnt[maxn << 2], vis[maxn << 2];
int sqr(int x) { return x * x; }
int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        int n, q;
        scanf("%d", &n);
        int ans[2] = {0};
        rep(i, 1, n) {
            scanf("%d", &a[i]);
            for (int j = 2; sqr(j) <= a[i]; ++j) {
                while (a[i] % sqr(j) == 0) a[i] /= sqr(j);
            }
            cnt[a[i]]++;
            ans[0] = max(ans[0], cnt[a[i]]);
        }
        rep(i, 1, n) {
            if (cnt[a[i]] % 2 == 0 && a[i] != 1 && !vis[a[i]]) {
                cnt[1] += cnt[a[i]], cnt[a[i]] = 0;
                vis[a[i]] = 1;
            }
            ans[1] = max({ans[1], cnt[1], cnt[a[i]]});
        }
        scanf("%d", &q);
        while (q--) {
            ll w;
            scanf("%lld", &w);
            printf("%d\n", ans[w != 0]);
        }
        cnt[1] = 0;
        rep(i, 1, n) cnt[a[i]] = 0, vis[a[i]] = 0;
    }
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值