再結合


うん。3ゴール2はどこだ?


ゴール3、5などの大数問題は、大数に等号条件比較のバージョンが入っているため、ゴール3とゴール4はあまり変わらない.
また、ゴール2も同じ形なので、ゴール1に挑戦しました.
結果は悲惨だったが...でも記録を整理するために...もう一つゴール1からゴール2の問題をします...
https://www.acmicpc.net/problem/3015

問題の説明

  • A-Bの2つのインデックスを選択します.
  • A-Bインデックス間でA、Bのペアを求め、それらの値はAとBより小さいか等しい
    EX)は1 3 2 4あり、高仮定
    1と2を選択すると、3が条件を満たしていない場合、X
    3と4を選択した場合、そのうち2が条件であり、カウント
  • 解答方法

  • クラス(高さ、数)
  • を作成
  • スタックの構成上逆順出発??X
  • 入力受信時スタックチェック

    2.1スタックが空の場合、直接カウントXを入れる
    2.2スタックが埋め込まれている場合は、topを現在の値と比較します.
    2.2.1現在の値より大きい=>ここでは、2の値は最終的に3という壁で塞がれ、1と一致しないため、=>1のスタック除去=>は少なくともペアを生成するので、もう1つの数を増やすだけです
    2.2.2現在の値と同じ=>スタックから取り出す=>同じ値は、スタック内の値の数=>を更新しますが、ペアを作成することができます.したがって、現在のペアを作成できる数を追加できます.
    2.2.3現在の値より小さい=>スタックを作成できる=>ペアであるため、現在のペアが作成できる数を追加できます.
    3.チェック済みの現在番号をスタック
  • に入れる
    ソースコード
    import java.io.*;
    import java.util.*;
    
    public class Main {
    
    // 저장할 타입
    	static class people{
    		int height;
    		int count;
    		public people(int height, int count) {
    			this.height = height;
    			this.count = count;
    		}
    		
    	}
        
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		int k = Integer.parseInt(br.readLine());
    		long answer = 0;
            //저장할스택
    		Stack<people> s =new Stack<>();
            // 진행
    		for(int i=0;i<k;i++) {
            //입력받기
    		int cur = Integer.parseInt(br.readLine());
            // 본인과 매칭 성공시 갯수니까 1로 초기화
    		people cp = new people(cur,1);
    		while(!s.isEmpty()) {
            //위에 꺼내오기
    		people sp = s.peek();
    			if(sp.height==cur) { // if문으로 값이 같으면 꺼내고 현재꺼의 갯수 ++
    				answer += sp.count;
    				cp.count += sp.count;
    				s.pop();
    				continue;
    			}
                // 안에 들어있는게 더크면 거기있는 1개만 매칭이 가능하므로 1개 ++ 후 종료
    			else if(sp.height>cur) {
    				answer ++;
    				break;
    			}
                // 작거나 같은경우에는 갯수만큼 매칭이 가능하니까 count 갯수만큼 더해줌
    			answer += sp.count;
    			s.pop();
    		}
            //만든 cp 넣어주기
    		s.add(cp);
    		}
    		System.out.println(answer);
    
    	}
    
    }
    結果...失敗が多すぎる