CF338D GCD Table 题解

这篇具有很好参考价值的文章主要介绍了CF338D GCD Table 题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CF338D GCD Table 题解

题目描述

你有一个长度为 \(k\) 的数列 \(a\)

询问是否存在 \(x\in[1,n]~~~y\in[1,m]\) 使得 \(\forall i~~~ \gcd(x,y+i-1)=a_i\)

解析

我们转换一下可以得到:

\[\forall i ~~\left\{ \begin{matrix} x\equiv 0\pmod{a_i} \\ y+i-1\equiv 0\pmod{a_i} \end{matrix} \right. \]

前面一个 \(x\) 很好解决,直接最大公倍数

\(y\) 可以转化一下:

\[y\equiv 1-i\pmod{a_i} \]

经典扩展中国剩余定理

但是我们因为分开考虑的 \(x\)\(y\) 得到的不一定是充要条件

我们需要再次验证一下。

温馨提示

1.在运算过程中会爆 long long 需要龟速乘。

2.在运算过程中最大公倍数也就是 \(x\) 会爆long long ,我们需要判断一下有没有超过 \(n\) 如果超过直接 NO。

3.计算 \(y\) 的时候有可能 \(y = 0\) 在这个情况下我们考虑 \(y = 0\)\(y = x\) 是等价的我们可以直接赋值成 \(x\)

考虑 \(x\) 还表示了 \(a\) 数列的最大公倍数文章来源地址https://www.toymoban.com/news/detail-472000.html

代码

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int N = 1e4 + 10;
int k;
ll n, m, a[N], x = 1,y = 0,M;
ll mmul(ll x,ll k,ll p){
    ll ans = 0,d = x;
    while(k){
        if(k & 1) ans = (ans + d) % p;
        k >>= 1;
        d = d * 2 % p;
    }
    return ans;
}
ll gcd(ll a,ll b){
    if(b == 0) return a;
    return gcd(b, a % b);
}
void exgcd(ll a,ll b,ll &x,ll &y){
    if(b == 0){
        x = 1,y = 0;
        return ;
    }
    exgcd(b, a % b, x, y);
    ll z = x;
    x = y;
    y = z - (a / b) * y;
}
ll jfc(ll a,ll b,ll c){
    ll x = 0,y = 0,g;
    g = gcd(a,b);
    a /= g,b /= g;
    if(c % g) return -1;
    exgcd(a, b, x, y);
    return mmul((x % b + b) % b,c / g,b);
}
void input(){
    cin>>n>>m>>k;
    for(int i = 1; i <= k; ++i){
        cin>>a[i];
    }
}
bool op(){
    for(int i = 1;i <= k; ++i){
        ll now = jfc(x,a[i],(((1 - i + a[i]- y) % a[i] + a[i]) % a[i]));
        if(now == -1) return 0;
        y = (mmul(now,x,x * a[i] / gcd(x,a[i])) + y) % (x * a[i] / gcd(x,a[i]));
        x = x * a[i] / gcd(x,a[i]);
        if(x > n) return 0;
    }    
    if(y == 0) y = x;
    if((y + k - 1) > m) return 0;
    return 1;
}
bool pd(){
    for(int i = 1;i <= k; ++i){
        ll now = gcd(x,y + i * 1ll - 1ll);
        if(now != a[i]) return 0 ;
    }
    return 1;
}
int main(){
    input();
    if(op() && pd()){
        cout<<"YES";    
    }else{
        cout<<"NO";
    }
    return 0;
}

到了这里,关于CF338D GCD Table 题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CodeForces CF1846G 题解

    CodeForces题目链接 洛谷题目链接 标准答案是状压之后,转化成Dijkstra算法跑最短路。我这里提供一个不一样的思路。 主人公得了病,有部分类型的症状。所有类型症状共有 (n) 种,用长为 (n) 的01串表示是否有那种症状。共有 (m) 种药,吃第 (i) 种药需要花费时间 (t_i) ,

    2024年02月14日
    浏览(39)
  • CF1145G AI Takeover 题解

    人工智能取得了进展。在这一题中,我们考虑的是石头剪刀布游戏。 然而,比赛的前一天晚上有一群人把机器人弄坏了,于是使用一个程序替代。 您需要找到一个策略,使您能够获胜。祝你好运! 为了方便,石头剪刀布分别用三个字符表示: R , P , S 。 本题有 6 个测试点,

    2024年03月26日
    浏览(43)
  • CF1178F1 Short Colorful Strip 题解

    题目描述 这是F题的第一个子任务。F1和F2的区别仅在对于m和时间的限制上 有n+1种颜色标号从0到n,我们有一条全部染成颜色0的长为m的纸带。 Alice拿着刷子通过以下的过程来给纸带染色: 我们按照从1到n的顺序进行染色,进行每次染色时,我们选取一个区间[ai,bi],0=aibi=m,并

    2024年02月01日
    浏览(37)
  • CF963B Destruction of a Tree 题解

      洛谷题目链接   这里提供一个较为朴素的 DP 想法。   给定一棵树,节点个数不超过 (2 times 10^5) ,每次可以删掉度数为偶数的点。问最后能不能删完;能删完给出删除方案。   首先可以随便选一个点作为根。   其次,我们考虑在一棵子树的删除情况,我们令

    2024年02月08日
    浏览(37)
  • CF1881F Minimum Maximum Distance 题解 贪心+DFS

    You have a tree with n n n vertices, some of which are marked. A tree is a connected undirected graph without cycles. Let f i f_i f i ​ denote the maximum distance from vertex i i i to any of the marked vertices. Your task is to find the minimum value of f i f_i f i ​ among all vertices. For example, in the tree shown in the example, vertices 2 2 2 , 6 6

    2024年02月22日
    浏览(42)
  • CF1178F2 Long Colorful Strip 题解 搜索

    题目描述 这是 F 题的第二个子任务。F1 和 F2 的区别仅在对于 m m m 和时间的限制上 有 n + 1 n+1 n + 1 种颜色标号从 0 0 0 到 n n n ,我们有一条全部染成颜色 0 0 0 的长为 m m m 的纸带。 Alice 拿着刷子通过以下的过程来给纸带染色: 我们按照从 1 1 1 到 n n n 的顺序进行染色,进行每

    2024年02月01日
    浏览(40)
  • 【图论经典题目讲解】CF786B - Legacy 一道线段树优化建图的经典题目

    D e s c r i p t i o n mathrm{Description} Description 给定 1 1 1 张 n n n 个点的有向图,初始没有边,接下来有 q q q 次操作,形式如下: 1 u v w 表示从 u u u 向 v v v 连接 1 1 1 条长度为 w w w 的有向边 2 u l r w 表示从 u u u 向 i i i ( i ∈ [ l , r ] iin [l,r] i ∈ [ l , r ] )连接 1 1 1 条长度为 w w w

    2024年02月20日
    浏览(89)
  • 【图论经典题目讲解】CF715B - Complete The Graph

    D e s c r i p t i o n mathrm{Description} Description 给定一张 n n n 个点, m m m 条边的无向图,点的编号为 0 ∼ n − 1 0sim n-1 0 ∼ n − 1 ,对于每条边权为 0 0 0 的边赋一个不超过 1 0 18 10^{18} 1 0 18 的 正整数 权值,使得 S S S 到 T T T 的最短路长度为 L L L 。 S o l u t i o n mathrm{Solution} Solut

    2024年02月19日
    浏览(40)
  • 算法题目题单+题解——图论

    本文为自己做的一部分图论题目,作为题单列出,持续更新。 题单由题目链接和题解两部分组成,题解部分提供简洁题意,代码仓库:Kaiser-Yang/OJProblems。 对于同一个一级标题下的题目,题目难度尽可能做到递增。 题目链接:Luogu P3547 [POI2013] CEN-Price List 题解: 题目链接:

    2024年02月19日
    浏览(38)
  • 题解动态规划:蓝桥杯2022国赛B组 题解 A题目

    在这组题(蓝桥杯C/C++ B组 国赛)里面挑了几道喜欢的题目,做了一下,笔记思路如下。( 其实是我觉得能做出的题 ) 题目图片来源于:CSDN 罚时大师月色 请问2022,拆分成10个不同的正整数有多少种不同的分法。 这道题目,拿到手上的时候,第一个想法是暴力,但是,每次

    2023年04月08日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包