B3830题解

· · 题解

题目分析

首先,我们先化简一下式子,移项得 a_i=\frac{c_{i}-y }{x} ,乍眼一看,y 多像小学数学中的余数呀!但有一点,这里的 y 不一定要小于除数 x。但这并不影响 c_{i} \bmod {x} 为定值 y。这样一来就简单了!我们先判断 c_{i} \bmod {x} 是否一样。不一样直接输出 -1 即可华丽结束。如果一直都为定值的话,最后用 c 数组中的最小值减去 x 就是 y 的最小值了。由此可见,如果 c 数组中的最小值小于 x,方为无解。最后,注意数据范围就行了。

Code

#include<bits/stdc++.h>
using namespace std;
long long n,x,c[1000050];//不开long long见祖宗,全局变量
int main(){
    {cin>>n>>x;
    for(int i=1;i<=n;i++){
        cin>>c[i];
    }
   //输入
   }
    {long long yu=c[1]%x;
    for(int i=1;i<=n;i++){
        if(c[i]%x!=yu){
            cout<<-1;
            return 0;
        }
    }
   //余数判断环节
   }
   {sort(c+1,c+1+n);//排序,注意左闭右开
    if(c[1]<x){
    cout<<-1;
   }else{
    cout<<c[1]-x;
   }
   //最终特判
   }
    return 0;
}