[Java]伯俊2775号[婦人会長になる]java


白俊2775号です.
https://www.acmicpc.net/problem/2775

質問する


普段からクラス会に参加するのが好きな朱熹は、この機会に女性会長になり、各階層の人を集めてクラス会を組織しようとした.
このアパートに住むには条件があり、「a階のb番に住むには、自分の下(a-1)階の1番からb番までの人数で、人を連れて帰って住む」という契約条項を守らなければならない.
アパートに空き家がないと仮定し、すべての住民がこの契約条件を守ったとすると、与えられた正の整数kとnに対して、k階印刷n号に何人が住んでいるのか.しかし、マンションは0階から、各階は1番から、0階のi号はi名である.

入力


最初の行はTestcaseの数Tを与える.そして、それぞれの場合、1行目の整数k、2行目の整数nを入力する

考える


アクション
何階の何番が何人住んでいるのか知りたければ、0階から探している階まで順番に上がればいいです.
フロアと湖を繰り返すので2階建てゲートを使います.
また、各階の1番は1人なので、nが1なら、繰り返す必要はなく、直接1を出力しifゲートを使います.
else部分は,nが1でなければ,すなわち,1番でなければ計算できないことを実現した.
なぜLinkedListを使うのか
データ構造はLinkedListを使用します.
最初はListを使っていましたが、階数が上がっているので渋滞するところがありました.
例えば、2階3番を求めた場合、最初の0階1番から3番までの人数をlistとすると、[1,2,3]の値はlistとなる.
次に、1階の人数から、下層の人数の影響を受けるので、前の階の人数の湖のデータが必要です.1階の湖を繰り返すjの複文は引き続き1番から繰り返されるので、list.get()で値を取るときは1番から取ります.listで住民の価格を加算し続けると、listの後の値に入るので、正しい値を出力できません.
それを考えると、headもtailも使えるLinkedListが最適だと思います.
各戸籍の住民数はlinkedList.add()で入力され、
次の階を過ぎて、linkedList.poll()を通って前から値上げし、sum +=を通って値上げを続けます.
その後、各層の湖を繰り返し、sumを0に処理します.
各層の1番は1人なので、累積した和を適用し続けると、正しい値が得られません.
このように各層の数字を繰り返すと、linkedList.getLast()によってlinkedListの最後の居住世帯数が得られる.
住民数の計算が完了したら、必ずlinkedList.clear()を計算しなければならない.
これにより、次の結果値が得られます.

TMI


最初はルールを見つけて問題を解決できると思います.
だから私はルールを見つけたいと思って、本当にたくさんのことをしましたが、見つかりませんでした.
友人の助けで等差数列であることが分かった.
下から計算して上がって、無駄なことをしないほうがいいと思います.
しかし、ここの問題.
ルールが見つからないのは問題ではありません.
だから0階から計算を始めた時、私がドアの上でもがいている様子を発見しました.
私は繰り返しの文章の中で、上の階の住民の人数をどのように獲得するかを考えた.

いずれにしても、問題を解いたが、問題を解いた後の感じは
なぜ本当の隣人を連れて生活するのか、
なぜその数字を知ったの?こんなアパートを建てた人は誰ですか.

出て行け

コード#コード#

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int T = Integer.parseInt(br.readLine());
		LinkedList<Integer> linkedList = new LinkedList<>();		

		for(int i=0; i<T; i++) {
			int k = Integer.parseInt(br.readLine());
			int n = Integer.parseInt(br.readLine());

			if(n==1) {
				linkedList.add(1);
			}
			else {
				int sum = 0;
				for(int l=0; l<=k; l++) {

					for(int j=1; j<=n; j++) {
						if(l == 0) {
							linkedList.add(j);
						}
						else {
							sum += linkedList.poll();
							linkedList.add(sum);
						}

					}
					sum = 0;
				}
			}

			System.out.println(linkedList.getLast());
			linkedList.clear();

		} // for End
	} // Main End
} // Class End