文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

鉛筆リサイクルの新技術 [AtCoder Regular Contest 011 A]

atcoder.jp


冷静にシミュレーションします。


N 本の鉛筆は、最初に必ず販売できるので、まずこれを答えに足します。


次に、以下の操作を鉛筆が m 本未満になるまでおこないます。


・回収した鉛筆から製品を作る(N/m*n 本作れる)
・製品を作った後に出た余りを求める(N%m 本余る)
・次に製品を作るときに使える鉛筆の数を求める
 →今販売した N/m*n 本と、余った N%m 本
・今販売した本数を答えに足す(N/m*n 本)


この一連の操作をコードにすると以下のようになります。


void solve () {

	int m = nextInt(), n = nextInt(), N = nextInt();
	int ans = N, seihin = 0, amari = 0;

	while (N >= m) {
		seihin = N/m*n;
		amari = N%m;
		N = seihin + amari;
		ans += seihin;
	}

	out.println(ans);

}


冒頭にも書きましたが「冷静に」「一つずつ」シミュレーションすることが大事だと思います。