再結合
うん。3ゴール2はどこだ?
ゴール3、5などの大数問題は、大数に等号条件比較のバージョンが入っているため、ゴール3とゴール4はあまり変わらない.
また、ゴール2も同じ形なので、ゴール1に挑戦しました.
結果は悲惨だったが...でも記録を整理するために...もう一つゴール1からゴール2の問題をします...
https://www.acmicpc.net/problem/3015
問題の説明
EX)は1 3 2 4あり、高仮定
1と2を選択すると、3が条件を満たしていない場合、X
3と4を選択した場合、そのうち2が条件であり、カウント
解答方法
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);
}
}
結果...失敗が多すぎるReference
この問題について(再結合), 我々は、より多くの情報をここで見つけました https://velog.io/@tekies09/백준-3015-오아시스재결합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol