sicily 1099. Packing Passengers

1099. Packing Passengers

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

PTA, Pack ‘em Tight Airlines is attempting the seemingly impossible—to fly with only full planes and still make a profit. Their strategy is simplicity and efficiency. Their fleet consists of 2 types of equipment (airline lingo for airplanes). Type A aircraft cost costA dollars to operate per flight and can carry passengersA passengers. Type B aircraft cost costB dollars to operate per flight and can carry passengersB passengers.

PTA has been using software that works well for fewer than 100 passengers, but will be far too slow for the number of passengers they expect to have with larger aircraft. PTA wants you to write a program that fills each aircraft to capacity (in keeping with the name Pack 'em Tight) and also minimizes the total cost of operations for that route.

Input

The input file may contain data sets. Each data set begins with a line containing the integer n (1 <= n <= 2,000,000,000) which represents the number of passengers for that route. The second line contains costA and passengersA, and the third line contains costB and passengersB. There will be white space between the pairs of values on each line. Here, costA, passengersA, costB, and passengersB are all nonnegative integers having values less than 2,000,000,001.
After the end of the final data set, there is a line containing “0” (one zero) which should not be processed.

Output

For each data set in the input file, the output file should contain a single line formatted as follows:
Data set <N>: <A> aircraft A, <B> aircraft B
Where <N> is an integer number equal to 1 for the first data set, and incremented by one for each subsequent data set, <A> is the number of airplanes of type A in the optimal solution for the test case, and <B> is the number of airplanes of type B in the optimal solution. The 'optimal' solution is a solution that lets PTA carry the number of passengers specified in the input for that data set using only airplanes loaded to their full capacity and that minimizes the cost of operating the required flights. If multiple alternatives exist fitting this description, select the one that uses most airplanes of type A. If no solution exists for PTA to fly the given number of passengers, the out line should be formatted as follows:
Data set <N>: cannot be flown

Sample Input

600
30 20
20 40
550
1 13
2 29
549
1 13
2 29
2000000000
1 2
3 7
599
11 20
22 40
0

Sample Output

Data set 1: 0 aircraft A, 15 aircraft B
Data set 2: 20 aircraft A, 10 aircraft B
Data set 3: 11 aircraft A, 14 aircraft B
Data set 4: 6 aircraft A, 285714284 aircraft B
Data set 5: cannot be flown

题目分析

两架飞机装人,要求油费最少
飞机一定要装满人
飞机还可能不能装人,就为了弄个除0的坑


#include <stdio.h>

int main() {
  long long total;
  int count = 1;
  while (scanf("%lld", &total)) {
    if (total == 0)
      break;

    long long ca, pa, cb, pb;
    scanf("%lld%lld%lld%lld", &ca, &pa, &cb, &pb);
    bool judge = false;

    if (pa == 0) {
      if (pb == 0) {
        printf("Data set %d: cannot be flown\n", count++);
      } else {
        if (total % pb != 0) {
          printf("Data set %d: cannot be flown\n", count++);
        } else {
          printf("Data set %d: 0 aircraft A, %lld aircraft B\n",
             count++, total / pb);
        }
      }
      continue;
    }
    if (pb == 0) {
      if (pa == 0) {
        printf("Data set %d: cannot be flown\n", count++);
      } else {
        if (total % pa != 0) {
          printf("Data set %d: cannot be flown\n", count++);
        } else {
          printf("Data set %d: %lld aircraft A, 0 aircraft B\n",
             count++, total / pa);
        }
      }
      continue;
    }

    if (ca * pb > cb * pa) {
      judge = true;
      long long temp;
      temp = pa; pa = pb; pb = temp;
      temp = ca; ca = cb; cb = temp;
    }

    long long numa = total / pa;
    long long numb = 0;
    total = total % pa;
    while (total % pb != 0 && numa > 0) {
      if (numa > 0) {
        numa--;
        total += pa;
      } else {
        break;
      }
    }
    if (total % pb != 0) {
      printf("Data set %d: cannot be flown\n", count++);
    } else {
      numb = total / pb;
      if (judge) {
        numa += numb;
        numb = numa - numb;
        numa = numa - numb;
      }
      printf("Data set %d: %lld aircraft A, %lld aircraft B\n",
             count++, numa, numb);
    }
  }
  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值