P1154 奶牛分厩 题解

· · 题解

看这道题题解比较少,来凑个数

大佬们的题解实在是太高深了 我就写简单一点,方便大家看懂

核心定理:c%b=(a%b+(c+a)%b)%b

也就是说,当k为某两个数之差时,一定会有两头牛住在同一个厩里

所以我们只要求出所有数的差,再从小到大搜索,只要这个数不为任何两头牛的差,就输出

#include<iostream>
#include<cmath>
using namespace std;
int a[1000005],b[1000005]={0};//定义不多说
int main()
{
    int i,n,j,k=1;
    cin>>n;//输入
    for(i=1;i<=n;i++)
    cin>>a[i];//输入
    for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
            b[abs(a[i]-a[j])]=1;//把任意两个数的差在b数组中值为1
    i=n;//至少n个厩
    while(b[i]==1)
        i++;//一旦这个数没有出现过就停止
    cout<<i;//输出
 }