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 ...
随机推荐
- X Shell 4配色方案[Solarized Dark]
X Shell 4是个很好的Windows下登录Linux服务器的终端,比Putty好用 X Shell 4的下面这种方案,我个人很喜欢 用vim写shell脚本的效果: 按如下步骤配置: 1)把下面 ...
- openwrt上opkg更新报错"opkg_download: Failed to download ............."
開始搞op的时候,看到op居然能够直接安装一些插件.激动坏了,由于这东西对嵌入式的小系统来说简直不敢想,可是op就支持了,就是这么任性. 好不easy编译了固件.依照网上的教程.telnet进去.首先 ...
- FIR滤波器设计
FIR滤波器的优越性: 相位对应为严格的线性,不存在延迟失真,仅仅有固定的时间延迟: 因为不存在稳定性问题,设计相对简单: 仅仅包括实数算法,不涉及复数算法,不须要递推运算,长度为M,阶数为M-1,计 ...
- Myeclipse 中添加mysql的jdbc驱动
打开myeclipse后单击菜单栏中的myeclipse——>preferences 然后在Myeclipse Enterprise workbench下的Java Enterprise Pro ...
- Droppable(放置)组件
.加载方式 //class 加载方式 <div id="dd" class="easyui-droppable" data-options="a ...
- Neral的前言
大家好,我是Neral,我准备写一个js库. 在动笔之前,我一直都处在很忐忑的状态,因为我写代码讲究的是一种感觉,那是看到自己写的代码之后大脑中就出现之后的无数个编码分支的快感,但是,如果很长一段时间 ...
- NHIBERNATE之映射文件配置说明(转载4)
二十.自定义值类型 开发者创建属于他们自己的值类型也是很容易的.比如说,你可能希望持久化Int64类型的属性, 持久化成为VARCHAR 字段.NHibernate没有内置这样一种类型.自定义类型 ...
- MySQL 远程访问开启
打开mysql客户端,直接运行以下命令:1.use mysql; 2.update user set host='%' where user='root'; 会报错:ERROR 1062 (23000 ...
- C++ Primer 5th 第1章 开始
*****代码在Ubuntu g++ 5.31 / clang++ 3.8(C++11)下编写调试***** 每个C++程序必须有一个main( )函数,main( )函数的返回值也必须是int类型, ...
- sql解释执行顺序
一.查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WHERE where ...