sicily 1099 Packing Passengers
/**
** 题意: 求x,y 满足 x*pa+y*pb=n 同时使得 p = x*ca+y*cb的值最小,若有多种可能,则选择最大x值的组合
** 分析: x*pa+y*pb=n 可以用 线性同余方程 求得各组解: X=x+(pb/q)*t, Y=y-(pa/q)*t
** t为整数,显然 X,Y>=0,所以 -x/(pb/q) <= t <= y/(pa/q)
** 欲使 x*ca+y*cb 最小, 注意到 其中 [(pb/q)*t]*ca + [-(pa/q)*t]*cb = (pb*ca-pa*cb)/q*t
** 当pb*ca-pa*cb<0,t应取最大值;
** 当pb*ca-pa*cb>0,t应取最小值;
** 当pb*ca-pa*cb=0,应选择较大的X值,显然 pb/q总是大于0的,所以t 选择最大值,X取得更大值
** http://zh.wikipedia.org/wiki/%E6%89%A9%E5%B1%95%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AE%97%E6%B3%95
***/
#include<iostream>
#include<cmath>
using namespace std; /**
** 扩展欧几里德算法(辗转相除法), x*a+y*b=gcd(a,b)=q
**/
long long x,y,q;
void extend_eulid(long long a,long long b){
if(b==){
x=;
y=;
q=a;
}
else{
extend_eulid(b,a%b);
//收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解
long long temp=x;
x = y;
y = temp-a/b*y;
}
}
int main()
{
int n,ca,pa,cb,pb,cnt=;
long long upper,lower,t;
while(cin>>n&&n){
cin>>ca>>pa>>cb>>pb;
extend_eulid(pa,pb);
if(n%q!=)
cout<<"Data set "<<cnt++<<": cannot be flown"<<endl;
else{
//求特解
x = x*n/q;
y = y*n/q;
upper = (long long)floor((double)y/(pa/q)); //返回小于或者等于指定表达式的最大整数头
lower = (long long)ceil((double)-x/(pb/q)); //返回大于或者等于指定表达式的最小整数头
t = pb*ca-pa*cb<= ? upper : lower;
cout<< "Data set "<<cnt++<<": "<<x+(pb/q)*t<<" aircraft A, "<<y-(pa/q)*t<<" aircraft B"<<endl;
}
}
return ;
}
sicily 1099 Packing Passengers的更多相关文章
- Sicily1099-Packing Passengers-拓展欧几里德算法
最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1099.c 做这题的时候查了别人的做法花了半天都没 ...
- sicily 中缀表达式转后缀表达式
题目描述 将中缀表达式(infix expression)转换为后缀表达式(postfix expression).假设中缀表达式中的操作数均以单个英文字母表示,且其中只包含左括号'(',右括号‘)’ ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;
错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java ...
- sicily 1934. 移动小球
Description 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2).其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y ...
- poj 1099
http://poj.org/problem?id=1099 #include<stdio.h> #include<string.h> #include <iostrea ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误:
- Bin Packing
Bin Packing 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/F 题目: A set of ...
- idea启动tomcat失败,1099端口被占用
今天遇到一个问题,当使用idea启动一个tomat服务的时候,报错:不能连接本地1099端口. /Users/liqiu/soft/develop/apache-tomcat-/bin/catalin ...
- UVa 102 - Ecological Bin Packing(规律,统计)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
随机推荐
- HybridApp开发准备工作——WebView
如大家所见,手机真是越来越离不开我们的日常生活了,像我,现在出门必带的是手机.移动电源.公交卡:钱包什么的再也没出过门.两年前,我还在Android的应用开发中当了一次过客.嗯,当时JAVA学得太糟糕 ...
- JavaScript基础知识(学习笔记)
1. 在JavaScript中所有事物都是对象:字符串.数字.数组.日期等等2. 在JavaScript中,对象是拥有属性和方法的数据3. 属性是与对象相关的值,方法是能够在对象上执 ...
- Android编程之ActivityManager: Segmentation fault
今天运行代码时,出现了一个不能运行的故障问题:ActivityManager: Segmentation fault 是的,这个原因网上有诸多解释:包名不能是中文或者非法字符,或者重启新的avd来解决 ...
- 第12届北师大校赛热身赛第二场 A.不和谐的长难句1
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php? pid=17121 2014-04-25 22:59:49 不和谐的长难句1 Time Limit: ...
- LeetCode::Remove Duplicates from Sorted List II [具体分析]
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- Eclipse颜色主题插件-Eclipse Color Theme
Eclipse颜色主题插件-Eclipse Color Theme 由于看烦了eclipse自带的的配色方案,自己动手配置又太麻烦,无意间在 http://eclipsecolorthemes.org ...
- MySQL 加密/压缩函数
这些问题可能导致数据值的改变.一般而言,上述问题可能在你使用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生. AES_ENCRYPT()和AES_DECRYPT() ...
- CentOS6.7 常用操作命令
centos 安装py环境 1.安装wget工具: yum install wget 2.安装Python-2.7.8: wget --no-check-certificate https://www ...
- (转)在Repeater中嵌套使用Repeater
在一般的网站中浏览类别的用户控件通常都位于大多数 ASP.NET 页的左边,它使用户能够按类别快速的查找产品.最近遇到一个客户,因为在他网站上展示的产品并不多,所以要求在原有类别浏览的基础上将产品也加 ...
- Oracle ACL (Access Control List)详解
在Oracle11g中,Oracle在安全方面有了很多的改进,而在网络权限控制方面,也有一个新的概念提出来,叫做ACL(Access Control List), 这是一种细粒度的权限控制.在ACL之 ...