http://codeforces.com/problemset/problem/338/D

题意:

有一张n*m的表格,其中第i行第j列的数为gcd(i,j)

给出k个数

问在这张表格中是否 有某一行中连续的某一部分 就是 这k个数

题意转化:

是否存在 一对i,j

满足gcd(i,j)=a1,gcd(i,j+1)=a2,…… gcd(i,j+k-1)=ak

直观上感觉:

i要满足的必要条件是 i |  lcm(a1,a2……ak)

j要满足的必要条件是

j= a1*k1,j+1=a2*k2……,j+k-1=ak*k_k

相当于

j ≡ 0 mod a1

j ≡ -1 mod a2

……

j≡ -(k-1) mod ak

利用扩展中国剩余定理可以求出 满足条件的最小的j

我们令i=lcm(a1,a2……ak)

去检验 是否满足 gcd(i,j+m-1)= a_m  m∈[1,k]

若满足条件输出YES,否则输出NO

为什么用满足必要条件的最小的i和j检验?

证明 i= lcm(a1,a2……ak)是唯一满足要求的i:

若还存在一个 i*x  满足条件,那么

将 i , i*x,j 质因数分解,存在一个 p^k 能整除i*x、j,不能整除i

∵ i= lcm(a1,a2……ak)

∴i的质因数分解的任意一项 必须能整除 a中的某一个

而 p^k 不能整除a 中的任意一个,否则i的质因数分解包含 p^k

证明 满足 j ≡ -(h-1) mod a[h] 的最小的j一定满足要求

若存在一个j*x 满足条件,而j不满足条件

即 存在一个h,满足 gcd(i,j+h-1)< a[h],gcd(i,j*x+h-1)= a[h]

将 j,j*x ,a[h]质因数分解,j*x 中 存在一个p^k2,满足

j 中 为 p^k1,a[h] 中为 p^k2 , 且 k1<k2

∵  j ≡ -(h-1) mod a[h]

即 j= a[h]*s - h+1

∴ j+h-1 = a[h]*s,所以k1>=k2

所以 最小的j一定满足要求

#include<cstdio>
#include<iostream>using namespace std;typedef long long LL;#define N 10001LL a[N];LL n1,a1;LL lcm;template<typename T>
void read(T &x)
{x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
}LL gcd(LL a,LL b) { return !b ? a : gcd(b,a%b); }bool judge_lcm(int k,LL n)
{lcm=1;for(int i=1;i<=k;++i) {lcm=lcm/gcd(lcm,a[i])*a[i];if(lcm>n) return false;}return true;
}void exgcd(LL a,LL b,LL &x,LL &y)
{if(!b) { x=1; y=0; return;}exgcd(b,a%b,y,x); y-=a/b*x;
}LL mul(LL a,LL b,LL mod)
{LL res=0;while(b){if(b&1) { b--; res+=a; res%=mod; }a<<=1; a%=mod; b>>=1;}return res;
}    LL merge(LL n2,LL a2)
{LL d=gcd(n1,n2),c=a2-a1;if(c%d) return -1;LL x,y;exgcd(n1/d,n2/d,x,y);LL mod=n2/d;x=(x%mod+mod)%mod;LL k=(mul(c/d,x,mod)%mod+mod)%mod;a1=(a1+n1*k%(mod*n1))%(mod*n1);n1*=mod;return a1;
}int main()
{LL n,m; int k;read(n); read(m); read(k);for(int i=1;i<=k;++i) read(a[i]);if(!judge_lcm(k,n)){puts("NO");return 0;}n1=a[1]; a1=0;LL j=a1;for(int i=2;i<=k;++i){j=merge(a[i],a[i]-(i-1));if(j==-1) { puts("NO"); return 0; }}if(!j) j=lcm;if(j+k-1>m) { puts("NO"); return 0;}for(int i=1;i<=k;++i) if(gcd(lcm,j+i-1)!=a[i]) { puts("NO"); return 0; }puts("YES");
}

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8459432.html

Codeforces 338 D. GCD Table相关推荐

  1. Codeforces Round #323 (Div. 2) C. GCD Table

    C. GCD Table 题目链接: http://codeforces.com/contest/583/problem/C 题意是给你n个数,可以构成n*n的GCD矩阵,矩阵里的元素顺序可以是任意的 ...

  2. Codeforces Round #323 (Div. 2) C.GCD Table

    C. GCD Table The GCD table G of size n × n for an array of positive integers a of length n is define ...

  3. CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...

  4. Codeforces Round #323 (Div. 2): C. GCD Table(思维题)

    题意: 给你一个长度为n的序列a[1]~a[n], 之后用这个序列生成一个n*n的矩阵,其中矩阵第i行第i列的值为a[i],第i行第j列(j!=i)的值为Gcd(a[i], a[j]),现在给你一个矩 ...

  5. CodeForces - 803C Maximal GCD(贪心 + 枚举)

    链接一 链接二 You are given positive integer number n. You should create such strictly increasing sequence ...

  6. CodeForces - 1459C Row GCD(数论+推公式)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数组 aaa,再给出一个长度为 mmm 的数组 bbb,现在要求输出,当 j=1,2,...,mj = 1,2,...,mj=1,2,...,m ...

  7. Codeforces 40 E. Number Table

    题目链接:http://codeforces.com/problemset/problem/40/E 妙啊... 因为已经确定的格子数目严格小于了$max(n,m)$,所以至少有一行或者一列是空着的, ...

  8. CF D. GCD Table

    传送门 题意: 给你一个n*m的矩阵,第i行j列元素的值为gcd(i,j),现给你一个长度为k的序列,问这个序列是否能和矩阵中某一行连续子串匹配. 思路: 对于 a 1 a_1 a1​来说,我们可以列 ...

  9. Codeforces 623B Array GCD 数论,dp

    文章目录 题意 题解 题意 一个序列每个数都大于111,要使整个数列的最大公约数大于111,可以最多删除一个子串,每一个数花费aaa元,也可以给一个数增添111或者减少111,每个数最多操作一次.求达 ...

最新文章

  1. JAVA-Socket通信笔记
  2. OpenStack-MitakaCentos7.2双节点搭建--(二)Keystone(认证服务)
  3. eclipse——jsp字体设置
  4. 【职场】从算法工程师到主管的转变,需要改变的是什么
  5. P2577 [ZJOI2005]午餐
  6. 等保2.0安全管理制度对比_一手资料!等保2.0云计算安全与风险评估
  7. antd 判断input输入内容是否大于_Python基础语法 | 代码规范amp;判断语句amp;循环语句...
  8. servlet的doPost 和doGet和web文件结构
  9. 解决Apex英雄下载慢、origin平台下载打开的究极3种方法
  10. Java函数中改变变量值
  11. 带蓝牙5.0芯片选型厂商总结和市场趋势分析
  12. 【python技巧】RGB值组合三元色(红绿蓝)
  13. 站群服务器用SS5 SOCKS5 配置多IP/多端口高性能代理服务器(16G内存主机支持超过100万并发S5代理)
  14. 嘉兴 机器人仓库 菜鸟_菜鸟智能机器人仓库启用 助力包裹分得又快又好
  15. [系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
  16. 集合工具类 以及 几个小面试题(是我保存的)
  17. ORB-SLAM2系列第六章—— 跟踪线程
  18. Windows下 iCloud Drive 更改缓存文件夹位置
  19. Kali Linux渗透测试 126 拒绝服务--Smurf 攻击
  20. 2020低压电工考试及低压电工模拟考试题库

热门文章

  1. OpenFOAM安装+ParaView安装+环境配置(deb直接安装详细记录-Ubuntu14.04+OpenFOAM4.1)
  2. highroller赌城java下载,非常有用的链接
  3. 合并两个有序数组(双/三指针)
  4. 平衡树-Treap基础内容
  5. nginx session共享_Centos下实现nginx负载均衡
  6. 电话号码的字母组合Python解法
  7. html地图无法点击,无法触发谷歌地图标记点击事件从HTML按钮
  8. selenium java 断言_Java+Selenium+Testng自动化测试学习(三)— 断言
  9. php注册界面模板,WeUI注册页面
  10. 如何设置定时器每天执行一次_游戏活动的自动循环——定时器管理