array
by ysy
【题目描述】
给定一个长度为n的数列,每次你可以进行以下操作之一:
(1)将一个数+a;
(2)将一个数-a;
(3)将一个数+b;
(4)将一个数-b;
你需要将所有数全部变为0,求最小操作数。
【输入数据】
第一行三个整数n,a,b,第二行n个整数x1~xn表示数列。
【输出数据】
一行一个整数表示答案。无解输出-1。
【样例输入】
2 2 3
1 2
【样例输出】
3
【数据范围】
对于10%的数据,n,a,b,|xi|<=1000。
对于30%的数据,n,a,b<=1000。
对于另外10%的数据,a=1。
对于另外10%的数据,a=2,b=3。
对于100%的数据,1<=n<=105,1<=a,b<=109,|xi|<=109。
【题解思路】
很容易转化成数学模型:ax+by = c,使(|x|+|y|)min。
对于方程ax+by = c,我们可以用exgcd求出一组解。
当a,b互质时,保证ax+by = c有解。
设d = gcd(a,b).a/d*x+b/d*y = c/d;
此时可求出一组特解:x',y'。
则ax+by = c的通解可以表示为:x = c/d * x' + k * b/d,y = c/d * y' - k * a/d;
然后如何使(|x|+|y|)min。考虑到对于上述通解,我们可以打表或意念理解,这是个单峰函数。
即存在唯一且确定值k,使得|c/d*x' + k*b/d|+|c/d*y' - k* a/d|最小,尽可能使绝对值接近零,那么对于这两个数使得x取得最小的正数或最大的负数(绝对值尽量接近0)。
时间复杂度 O(nlog|xi|)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
int n,a,b,k;
inline void exgcd(int a,int b,int m,ll &x,ll &y){
if(!b) x = m/a,y = ;
else {
exgcd(b,a%b,m,x,y);
swap(x,y);
y -= a/b*x;
}
}
inline int gcd(int a,int b){return b ? gcd(b,a%b) : a;}
ll x,y,p;
int main(){
freopen("array.in","r",stdin);
freopen("array.out","w",stdout);
n = read(),a = read(),b = read();
k = gcd(a,b);
a /= k,b /= k;
if(a<b) swap(a,b);
rep(i,,n){
int j = read();
if(j%k) printf("-1\n"),exit();
exgcd(a,b,j/k,x,y);
if(y<) {
x -= b*((-y)/a+);
y += a*((-y)/a+);
}
x += b*(y/a);
y -= a*(y/a);
p += min(abs(x)+abs(y),abs(x+b)+abs(y-a));
}
printf("%lld\n",p);
return ;
}
/*
2 2 3
1 2
*/
noip模拟【array】的更多相关文章
-
大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
-
CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
-
CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
-
CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
-
NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
-
contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
-
NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
-
队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
-
队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
-
队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
随机推荐
-
三言两语之js事件、事件流以及target、currentTarget、this那些事
厉害了我的哥--你是如此简单我却将你给遗忘 放假前再看某文档,里边提到两个我既熟悉又陌生的概念target.currentTarget,说他熟悉我曾经看到过这两个事件对象的异同处,说他陌生吧?很不 ...
-
iOS 跳转到App Store下载或评论
//跳转到app在AppStore页面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString string ...
-
shell-bash学习03 别名、日期、函数
别名 使用alias 创建 alias new_command='command sequence' 保存 echo 'alias cmd="command seq"' >& ...
-
node_nibbler:自定义Base32/base64 encode/decode库
https://github.com/mattrobenolt/node_nibbler 可以将本源码复制到自己需要的JS文件中,比如下面这个文件,一个基于BASE64加密请求参数的REST工具: [ ...
-
codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)
题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...
-
计算app内部缓存文件大小
#pragma mark - 计算单个文件大小 - (long long)fileSizeAtPath:(NSString*)filePath{ NSFileManager* manager = [N ...
-
2014年辛星Javascript解读第二节
本小节我们解说一下Javascript的语法,尽管js语言很easy,它的语法也相对好学一些,可是不学总之还是不会的,因此,我们来一探到底把. ********凝视************* 1.我们 ...
-
Go 语言之三驾马车
interface Go是一门面向接口编程的语言,interface的设计自然是重中之重.Go中对于interface设计的巧妙之处就在于空的interface可以被当作"Duck" ...
-
一个Java程序员的2018年展望与2017年总结
回顾2017年,可以说是对我而言有重大转折的一年.我们选择放弃了北京,来到了杭州,开始了新的生活.房子的事情也基本上落实了,虽然其中经历了种种坎坷,但是结局还是美好的,现在在等贷款放贷.中国人嘛,没有 ...
-
SkyWalking
介绍 SkyWalking 创建与2015年,提供分布式追踪功能.从5.x开始,项目进化为一个完成功能的Application Performance Management系统.他被用于追踪.监控和诊 ...