テキトーなメモ帳

テキトーなメモ帳

AOJ:2525 Change

手元に残る日本円を最大化するための手段として考えられるのは次の2つ

  • 各国に対して余分に投資して、為替差益で儲ける
  • 各国に対して必要経費分のみ払う。


で、為替差益で儲けることはできるのか?というと
投資先の国をC国、余分に投資した金額をx円、為替差益をx'円、C国で余分に得たお金をR(単位はC)とすると


R = [r*x/100]
x' = [100 * R/r] <= 100*R / r = 100*[r*x/100]/r <= 100*(r*x/100)/r = x
より x' <= x
したがって、為替差益によって儲かることはない。


というわけで、与式を式変形して各国に対する必要経費分のみ算出すればいいことがわかる。

#define _USE_MATH_DEFINES
#define INF 0x3f3f3f3f

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <limits>
#include <map>
#include <string>
#include <cstring>
#include <set>
#include <deque>
#include <bitset>
#include <list>
#include <cctype>
#include <utility>
  
using namespace std;
  
typedef long long ll;
typedef pair <int,int> P;
typedef pair <int,P> PP;
  
static const double EPS = 1e-8;
  
int tx[] = {0,1,0,-1};
int ty[] = {-1,0,1,0};

int main(){
  ll money,rate_d,rate_r,consume_d,consume_r;
  while(~scanf("%lld %lld %lld %lld %lld",
	       &money,&rate_d,&rate_r,&consume_d,&consume_r)){
    ll x1 = consume_d*100/rate_d;
    if(rate_d * x1 % 100 != 0) x1++;
    ll x2 = consume_r*100/rate_r;
    if(rate_r * x2 % 100 != 0) x2++;
    
    printf("%lld\n",money - x1 -x2 >= 0 ? money - x1 -x2 : -1);
  }
}