[CSP-S模拟测试]:数列(数学)
题目传送门(内部题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++
[CSP-S模拟测试]:数列(数学)的更多相关文章
- 0823NOIP模拟测试赛后总结
考了两场感觉虚了... NOIP模拟测试30 分着考的. 就只有T2的美妙的暴力拿分了,60分rank10,挂了. T1是一道sb题,爆零了十分遗憾. 许多人都掉进了输出格式的坑里,C没大写.少个空格 ...
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- csp-s模拟测试92
csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- 【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1& ...
随机推荐
- Java第三周总结报告
本周做了什么? 本周利用Java语言重新回顾了条件结构与循环结构和字符串的处理等问题,认识到了Java与C/C++的在这两个方面的不同. 下周准备做什么? 学习Java面向对象的有关知识,包括对象与类 ...
- 360度3D 旋转插件
Circlr插件是一款基于jQuery的可以对图片进行360度全方位旋转展示的插件.Circlr通过按一定角度规律拍摄的产品图片,制作出可以使用鼠标拖动.鼠标滚轮和移动触摸来进行图片逐帧旋转的效果.比 ...
- Dango之初识安装
1. MVC和MTV框架 1.1MVC Web服务器开发领域里著名的MVC模式 所谓MVC就是把Web应用分为模型(M), 控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起 ...
- SCUT - 492 - 鬼符「搦手的鬼畜生」 - 简单数学
https://scut.online/p/492 求[1,a]范围内的a模m的逆元的数量. 一开始用扩展欧几里得算法草了一发,WA了,当时不太清楚模非质数的周期,看来扩展欧几里得算法的笔记才知道要加 ...
- centos7配置mysql8.0主从复制
注意:1.主库:10.1.131.75,从库:10.1.131.762.server-id必须是纯数字,并且主从两个server-id在局域网内要唯一. [主节点]vi /etc/my.cnf[mys ...
- java实现spark常用算子之cogroup
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...
- chrom插件1
本文是稀土掘金投稿,虽然其中有倔金的私货,是篇推广文,但我看过后认为内容确实不错,有些好插件还是第一次知道,对我很有帮助,考虑过后还是决定推荐给大家,最近我比较关注各种提高开发效率的工具与技巧,今后看 ...
- unittest assert断言
unittest常用的断言方法 1.assertEqual(self, first, second, msg=None) --判断两个参数相等:first == second 2.assertNotE ...
- 常用Java中response.setContentType参数
image/bmp BMP image/png PNG image/gif GIF image/jpeg JPEG image/tiff TIFF image/x-dcx DCX image/x-pc ...
- Redis启动方式
一.前端启动 直接运行bin/redis-server将以前端模式启动.[bin目录是在/usr/local/redis/bin] # ./redis-server 启动缺点: ssh命令窗口关闭则r ...