codechef EBAIT Election Bait【欧几里得算法】
题目分析:
欧几里得算法来处理一类分数问题,分数问题的形式如下
$\frac{a}{b} < \frac{p}{q} < \frac{c}{d}$
当a=0时,答案等于$\frac{1}{\lfloor \frac{d}{c} \rfloor + 1}$
当a>=b时,可以考虑前后同减去一个数化为真分数,再加上
当c>d时,因为不满足一二,所以可以直接令答案等于$\frac{1}{1}$
否则分子分母取倒,再倒回来
代码:
#include<bits/stdc++.h>
using namespace std; const int maxn = ; int n,C1,C2;
int a[maxn]; pair<int,int> p1,p2; void comp(pair<int,int> alpha,pair<int,int> beta){
if(1ll*alpha.first*beta.second >= 1ll*alpha.second*beta.first)
p1 = beta;
} pair<int,int> euchild(pair<int,int> alpha,pair<int,int> beta){
if(alpha.first == ) return make_pair(,beta.second/beta.first+);
if(alpha.first >= alpha.second){
int lw = alpha.first/alpha.second,hh = beta.second;
pair<int,int> jh = euchild(make_pair(alpha.first%alpha.second,alpha.second),make_pair(beta.first-lw*hh,hh));
jh.first += jh.second*lw;
return jh;
}
if(beta.first > beta.second) return make_pair(,);
swap(beta.first,beta.second);swap(alpha.first,alpha.second);
pair<int,int> jh = euchild(beta,alpha);
swap(jh.first,jh.second);
return jh;
} void work(){
if(n&){puts("-1");return;}
p1 = make_pair(,);
int a1 = ,a2 = ;
for(int i=;i<n;i++){
if(i&) a1 += a[i];
else a2 += a[i];
comp(p1,make_pair(a1,a2));
}
a2 += a[n]; p2 = make_pair(a2,a1); swap(p1.first,p1.second);
if(1ll*p1.first*p2.second > 1ll*p2.first*p1.second){puts("-1");return;}
pair<int,int> ans = euchild(p1,p2);
if(ans.first <= C1 && ans.second <= C2){
printf("%d %d\n",ans.first,ans.second);
}else puts("-1");
} int main(){
int Tmp; scanf("%d",&Tmp);
while(Tmp--){
scanf("%d%d%d",&n,&C1,&C2);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
work();
}
return ;
}
codechef EBAIT Election Bait【欧几里得算法】的更多相关文章
- 扩展欧几里得算法(extgcd)
相信大家对欧几里得算法,即辗转相除法不陌生吧. 代码如下: int gcd(int a, int b){ return !b ? gcd(b, a % b) : a; } 而扩展欧几里得算法,顾名思义 ...
- 欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
写诗或者写程序的时候,我们经常要跟欧几里得算法打交道.然而有没要考虑到为什么欧几里得算法是有效且高效的,一些偏激(好吧,请允许我用这个带有浓重个人情感色彩的词汇)的计算机科学家认为,除非程序的正确性在 ...
- noip知识点总结之--欧几里得算法和扩展欧几里得算法
一.欧几里得算法 名字非常高大上的不一定难,比如欧几里得算法...其实就是求两个正整数a, b的最大公约数(即gcd),亦称辗转相除法 需要先知道一个定理: gcd(a, b) = gcd(b, a ...
- 欧几里得算法与扩展欧几里得算法_C++
先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...
- 最小公约数(欧几里得算法&&stein算法)
求最小公约数,最easy想到的是欧几里得算法,这个算法也是比較easy理解的,效率也是非常不错的. 也叫做辗转相除法. 对随意两个数a.b(a>b).d=gcd(a.b),假设b不为零.那么gc ...
- vijos1009:扩展欧几里得算法
1009:数论 扩展欧几里得算法 其实自己对扩展欧几里得算法一直很不熟悉...应该是因为之前不太理解的缘故吧这次再次思考,回看了某位大神的推导以及某位大神的模板应该算是有所领悟了 首先根据题意:L1= ...
- ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)
1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...
- 欧几里得算法求最大公约数(gcd)
关于欧几里得算法求最大公约数算法, 代码如下: int gcd( int a , int b ) { if( b == 0 ) return a ; else gcd( b , a % b ) ; } ...
- Python 最大公约数的欧几里得算法及Stein算法
greatest common divisor(最大公约数) 1.欧几里得算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数. 其计算原理依赖于下面的定理: 两个整数的最大公约数等 ...
随机推荐
- MySQL 5.7中如何定位DDL被阻塞的问题
在上篇文章<MySQL表结构变更,不可不知的Metadata Lock>中,我们介绍了MDL引入的背景,及基本概念,从“道”的层面知道了什么是MDL.下面就从“术”的层面看看如何定位MDL ...
- 《Spring Boot 入门及前后端分离项目实践》目录
开篇词:SpringBoot入门及前后端分离项目实践导读 第02课:快速认识 Spring Boot 技术栈 第03课:开发环境搭建 第04课:快速构建 Spring Boot 应用 第05课:Spr ...
- 02-HTML之head标签
head标签 head内常用标签表 标签 类型 意义 <title></titile> 双闭合标签 定义网页标题 <style></style> 双闭合 ...
- Linux提示删除文件cannot remove `文件名': Operation not permitted
Linux系统下删除某个文件时提示如下报错: 执行lsattr命令可以看到隐藏属性-------i--------,如下图: 通过查找资料发现: chattr命令用于改变文件属性.这项指令可改变存放在 ...
- Python_生成随机百分比的方法
可以使用random模块去实现,给定1到100的空间,使用random的choice的方法随机选取一个数字,当这个数字在某个区间时就可以认定为出发了指定的百分比的概率. 这个简单的逻辑也可以在需要时扩 ...
- jmeter的jtl日志转html报告常见报错笔记
问题:生成的jmeter文件可以放任意位置 输入命令转换hmtl报告 PS D:\user\80003288\桌面\Ques> jmeter -g .\test1.jtl -e -o .\rep ...
- 安装sqlprompt
特别说明:注册机会报毒,安装前请先关闭杀毒软件!下载好附件之后解压,打开SQLPrompt_7.2.0.241.exe按照提示安装完成.安装完成后断网!打开数据库,会在菜单栏中看到SQL Prompt ...
- linux之硬盘管理fdisk
1.首先我们用虚拟机模拟服务器加入一块新的硬盘,硬盘容量入下图5GB硬盘. 2.首先我们要对它进行分区,我们从上面知道需要分区格式化的是第二块硬盘. 3.输入n回车是新建分区,p是主分区(只能建立4个 ...
- WPF中关于对前台Xaml中Triggers的一些重要思考。
今天在做一个小Demo的时候碰到了一个比较奇怪的问题,就是其中一个Trigger始终无法执行,<Trigger Property="Popup.IsOpen" Value=& ...
- netstat -na 查看有大量TIME_WAIT解决办法(修改内核参数)
# netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WA ...