题目传送门(内部题95)


输入格式

  第一行三个整数$n,a,b$,第二行$n$个整数$x_1\sim x_n$表示数列。


输出格式

  一行一个整数表示答案。无解输出$-1$。


样例

样例输入:2 2 3
1 2

样例输出:

3


数据范围与提示

  对于$10\%$的数据,$n,a,b,|x_i|\leqslant 1,000$。
  对于$30\%$的数据,$n,a,b\leqslant 1,000$。
  对于另外$10\%$的数据,$a=1$。
  对于另外$10\%$的数据,$a=2,b=3$。
  对于$100\%$的数据,$1\leqslant n\leqslant 10^5,1\leqslant a,b\leqslant 10^9,|x_i|\leqslant 10^9$。


题解

这道题是让我们解$xa+yb=x_i$,且要最小化$abs(x)+abs(y)$;那么,我们可以先用$exgcd$解出其中一组解$(x',y')$,那么解集就是$(x'+ka,y'-kb)$,那么$x$只会取最小的正值或最大的负值,分类讨论取最小值即可。

时间复杂度:$\Theta(n\log|x_i|)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,a,b,x,y;
int s[100001];
long long ans;
int exgcd(int a,int b,int &x,int &y)
{
int ret,tmp;
if(!b){x=1;y=0;return a;}
ret=exgcd(b,a%b,x,y);
tmp=x;
x=y;
y=tmp-a/b*y;
return ret;
}
int main()
{
scanf("%d%d%d",&n,&a,&b);
int gcd=__gcd(a,b);
a/=gcd;b/=gcd;
exgcd(a,b,x,y);
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
s[i]=abs(s[i]);
if(s[i]%gcd){puts("-1");return 0;}
s[i]/=gcd;
}
for(int i=1;i<=n;i++)
{
if(!s[i])continue;
long long nowx=1LL*x*s[i];
long long nowy=1LL*y*s[i];
long long res=0x3f3f3f3f3f3f3f3f;
long long dx=(nowx%b+b)%b;
long long dy=nowy+(nowx-dx)/b*a;
res=min(res,abs(dx)+abs(dy));
dx-=b;dy+=a;
res=min(res,abs(dx)+abs(dy));
dy=(nowy%a+a)%a;
dx=nowx+(nowy-dy)/a*b;
res=min(res,abs(dx)+abs(dy));
dx+=b;dy-=a;
res=min(res,abs(dx)+abs(dy));
ans+=res;
}
printf("%lld\n",ans);
return 0;
}

rp++

最新文章

  1. -[NSNull countByEnumeratingWithState:objects:count:]:
  2. Codeforces Round #341 (Div. 2)
  3. &quot;Unity测试系列&quot;文章索引
  4. SharePoint Error:a system restart from a previous installation or update is pending
  5. awk实现 文本内的换行符 为分隔符,输出变为逗号
  6. dom event无法获取问题
  7. effective c++:资源管理
  8. EF TO MYSQL 无法查询中文的解决方法
  9. Python:urllib和urllib2的区别
  10. MySQL之查询优化方式(笔记)
  11. Scheme入门
  12. ES6核心内容精讲--快速实践ES6(一)
  13. Java设计模式 (转)
  14. Doom HDU - 5239 (找规律+线段树)
  15. 【转】FluentAPI详细用法
  16. 大数据处理N!(21&lt;N&lt;2000)
  17. ECDSA host key for 192.168.0.101 has changed and you have requested strict checking.
  18. C++类成员函数
  19. Django套用现成模板,导入css,js,images等文件
  20. 获取scrollTop始终为0问题

热门文章

  1. 03、重定义CDF
  2. static修饰的成员与非static修饰类的成员的区别
  3. js的小练习
  4. JavaScript concat() 方法
  5. 枚举java语言中的修饰符组合
  6. webpack3 打包
  7. iOS App沙盒目录结构
  8. Laravel5如何向闭合函数内传递参数 where function 传参
  9. CentOS 7.4下源码编译安装配置LAMP环境详解
  10. Linux 安装 nginx 安装PCRE库