公式

A - 屋台の営業日数 / Number of Days a Food Stall Is Open 解説 by kyopro_friends


問題文がややこしいですが、\(D=(\sum B_i)-(\sum A_i)\) とすると、「\(S\) 円持った状態から、毎日所持金が \(D\) 円ずつ減るので、\(0\) 円未満にならない範囲で最大何日過ごせますか?」となります。

\(D \leq 0\) のとき所持金は減らないので答えは無限大であり -1 を出力します。\(D>0\) のときは \(\left\lfloor\frac{S}{D}\right\rfloor\) 日過ごすことができます。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n, m;
  long long s;
  cin >> n >> m >> s;
  vector<int> a(n), b(n);
  for(int i=0; i<n; i++) cin >> a[i];
  for(int i=0; i<m; i++) cin >> b[i];

  long long d = 0;
  for(int i=0 ;i<n; i++){
    d -= a[i];
  }
  for(int i=0 ;i<m; i++){
    d += b[i];
  }

  if(d <= 0){
    cout << -1 << endl;
  }else{
    cout << s / d << endl;
  }
}

実装例 (Python)

N, M, S = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))

D = sum(B) - sum(A)
if D <= 0:
  print(-1)
else:
  print(S // D)

投稿日時:
最終更新: