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 10001 LL a[N]; LL n1,a1; LL lcm; template<typename T>
void read(T &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} LL gcd(LL a,LL b) { return !b ? a : gcd(b,a%b); } bool judge_lcm(int k,LL n)
{
lcm=;
for(int i=;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=; y=; return;}
exgcd(b,a%b,y,x); y-=a/b*x;
} LL mul(LL a,LL b,LL mod)
{
LL res=;
while(b)
{
if(b&) { b--; res+=a; res%=mod; }
a<<=; a%=mod; b>>=;
}
return res;
} LL merge(LL n2,LL a2)
{
LL d=gcd(n1,n2),c=a2-a1;
if(c%d) return -;
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=;i<=k;++i) read(a[i]);
if(!judge_lcm(k,n))
{
puts("NO");
return ;
}
n1=a[]; a1=;
LL j=a1;
for(int i=;i<=k;++i)
{
j=merge(a[i],a[i]-(i-));
if(j==-) { puts("NO"); return ; }
}
if(!j) j=lcm;
if(j+k->m) { puts("NO"); return ;}
for(int i=;i<=k;++i)
if(gcd(lcm,j+i-)!=a[i]) { puts("NO"); return ; }
puts("YES");
}

Codeforces 338 D. GCD Table的更多相关文章

  1. CF 338 D GCD Table(CRT)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 给定一个序列,a[1 ..k],问是否存在(i , ...

  2. Codeforces 583 DIV2 GCD Table 贪心

    原题链接:http://codeforces.com/problemset/problem/583/C 题意: 大概就是给你个gcd表,让你还原整个序列. 题解: 由$GCD(a,a)=a$,我们知道 ...

  3. 【Codeforces 582A】 GCD Table

    [题目链接] 点击打开链接 [算法] G中最大的数一定也是a中最大的数.          G中次大的数一定也是a中次大的数. 第三.第四可能是由最大和次大的gcd产生的 那么就不难想到下面的算法: ...

  4. 【Codeforces 582A】GCD Table

    [链接] 我是链接,点我呀:) [题意] 给你一个数组A[]经过a[i][j] = gcd(A[i],A[j])的规则生成的二维数组 让你求出原数组A [题解] 我们假设原数组是A 然后让A数组满足A ...

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

    C. GCD Table Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/583/problem/C ...

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

    题目链接:http://codeforces.com/contest/583/problem/C C. GCD Table time limit per test 2 seconds memory l ...

  7. 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 ...

  8. Codeforces Round #323 (Div. 1) A. GCD Table

    A. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  9. SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)

    4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the results of ...

随机推荐

  1. 移动端jq及zepto事件绑定

    最近做移动端网页,用到了zepto.js , 其大致用法跟 jquery 差不多,但是在时间绑定的时候被困了好久的坑. 这里说的主要是给未来元素绑定事件.未来元素:这里指的是通过 ajax 请求得到数 ...

  2. LAYOUT 注意点

    1:CLK时钟GND全包,可以适当调整布局使包地完整. 2:WIFI天线下层均净空GND 3:过孔尽量不打在焊盘上或距离焊盘太近容易漏锡

  3. 利用HOG+SVM实现行人检测

    利用HOG+SVM实现行人检测 很久以前做的行人检测,现在稍加温习,上传记录一下. 首先解析视频,提取视频的每一帧形成图片存到磁盘.代码如下 import os import cv2 videos_s ...

  4. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  5. Linux内核分析——第八周学习笔记

    实验作业:进程调度时机跟踪分析进程调度与进程切换的过程 20135313吴子怡.北京电子科技学院 [第一部分]理解Linux系统中进程调度的时机 1.Linux的调度程序是一个叫schedule()的 ...

  6. C语言编程—自动生成四则运算升级版

    #include<stdio.h> #include<time.h> struct fenshu { int fenzi; int fenmu; }Fenshu[]; int ...

  7. ElasticSearch 2 (19) - 语言处理系列之故事开始

    ElasticSearch 2 (19) - 语言处理系列之故事开始 摘要 全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场.尽管只精确匹配用户查询的词肯定会是精确的, ...

  8. 获取select的 text

    JS获取select的value和text值的简单实例 感谢 3lian8 的投递 时间:2014-02-27 来源:三联教程 本篇文章主要是对JS获取select的value和text值的简单实例进 ...

  9. FuelPHP 系列(三) ------ Model 模型

    框架封装好的 model 类有几个,按需继承就好. 有:/fuel/core/classes/model/crud.php /fuel/packages/orm/classes/model.php / ...

  10. 关于“代码规范”,“Review”和“Check list”

    关于“代码规范”,“Review”和“Check list”,就我个人理解,这三者相辅相成.代码规范是在编程时就该注意的,为Review减轻负担.而要进行Review,又需要一个Check list作 ...