Official

A - 10yen Stamp Editorial by physics0523


プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは「practice contest」(https://atcoder.jp/contests/practice/) の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
また、プログラミングコンテストの問題に慣れていない方は、「AtCoder Beginners Selection」(https://atcoder.jp/contests/abs) の問題をいくつか試すことをおすすめします。
「競プロ典型 90 問」(https://atcoder.jp/contests/typical90) では、プログラミングコンテストで扱われる典型的な 90 問の問題に挑戦可能です。


この問題を解くためには、以下の \(2\) つの工程が必要です。

  • \(X\) 円が \(Y\) 円と比べていくら不足しているか求める。これは \(Y-X\) とすることで求められます。
    • ただし、 \(X \ge Y\) である場合はこの時点で答えが \(0\) と確定するので、 \(0\) を出力して終了します。
  • (少なくとも) \(Y-X\) 円を支払うために、 \(10\) 円切手が何枚必要かを求める。これを求めるには、 \(Y-X\)\(10\) で割って小数点以下を切り上げる必要があります。

切り上げの計算は言語によりさまざまな方法がありますが、以下で示す方法が競技プログラミングにおいて最も汎用的です。

正整数 \(a\) を正整数 \(b\) で割って小数点以下を切り上げた値は、 \((a+b-1)\)\(b\) で割って小数点以下を切り捨てた値に等しい。
この方法の利点: 多くのプログラミング言語において、整数を整数で割って整数にする演算は切り捨てで実装されています。この方針をとることで、実装が手軽になります。
注意: この計算方法は、 \(a,b\) が実数になると成立しません。

実装例(C++):

#include<bits/stdc++.h>

using namespace std;

int ceil(int a,int b){return (a+b-1)/b;}

int main(){
  int x,y;
  cin >> x >> y;
  if(x>=y){cout << "0\n";return 0;}
  cout << ceil(y-x,10) << '\n';
  return 0;
}

posted:
last update: