洛谷 P1154 奶牛分厩(数学)

题目链接:https://www.luogu.com.cn/problem/P1154

如果$a mod c=b mod c$,当且仅当$a-b=0(mod c)$,这是很好理解的。

这道题只需要对任意一对$a_i$,$a_j$作差。如果差都不是k的倍数,那么就是可以的。

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 using namespace std;
 5 const int N=5005;
 6 const int M=1e6+5;
 7 int n,a[N],vis[M];
 8 int main(){
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
11     for(int i=1;i<=n;i++)
12     for(int j=i+1;j<=n;j++){
13         int t=abs(a[i]-a[j]);
14         vis[t]=1;
15     }
16     for(int i=n;i<=1e6;i++){//枚举k 
17         if(!vis[i]){
18             int flag=1;
19             for(int j=i;j<=1e6;j+=i){//j为k的倍数,看在差中是否出现过 
20                 if(vis[j]){ flag=0; break;}
21             }
22             if(flag){
23                 printf("%d",i);
24                 return 0;
25             }
26         }
27     }
28     return 0;
29 }
AC代码
原文地址:https://www.cnblogs.com/New-ljx/p/13922746.html