[BOJ]15970矢印描画/ベースソートアルゴリズム
4545 ワード
Problem | 白準15970矢印を描画
位置が直線上の0、1、2...等非負の数の整数を一定の間隔で右に置きます.これらの位置の各位置には点があります(<図1>).指定点の位置が違います.2点間の距離は、2点位置の数の差を表します.<図1>には4つの点が与えられ、点aとbの距離は3である.
各点にN色のうちの1つがあります.私服、色は1からNの数字で表します.
各点pについて、pから始まる直線矢印を用いて別の点qに接続しようとする.ここで、点qはpのような色の点の中でpに最も近い点であるべきである.最近の点が2つ以上あれば、勝手に1つ選んでください.
各点について、常に同じ色の異なる点が存在します.したがって、上記の条件を満たすqまで、各点pから常に矢印を描くことができる.
例えば、点を順次対(位置、色)と表記する場合、a=(0,1)、b=(1,2)、c=(3,1)、d=(4,2)、e=(5,1)と呼ぶ.
以下の<図2>にこれらの点を表示します.ここで、白は1に相当し、黒は2に相当する.
-入力:標準入力で次の情報を取得します.最初の行は、点の個数を表す整数Nを与える.次のN行では、点座標と色を表す2つの整数xとyがそれぞれ与えられる.
各点が有する色cについて、色cを有する点は正確に2つ存在し、点の個数は2≦N≦10を満たす.
-サブタスク:
1)点の色はすべて同じで、点の個数は2≦N≦300を満たす.
2)点の色は正確に2種類に分けられ,点の個数は2≦N≦1000を満たす.
1)点の個数は2≦N≦5000を満たす.
Aの配列が灰色を基準とする場合、A[i]およびA[j]が考慮される.
引き続きtemp変数でmin値を置き換え、最短距離を探します.
可能ですが、O(n^2)がタイムアウトする可能性があります.
同じ色の痣だけを集める.
*プロパティを使用してソートする場合、隣接する場所はその両側にあります*
両側の数値の差が小さい値を矢印値に追加します.
以下、a[color]に該当する位置をArrayListとして追加する.
位置が直線上の0、1、2...等非負の数の整数を一定の間隔で右に置きます.これらの位置の各位置には点があります(<図1>).指定点の位置が違います.2点間の距離は、2点位置の数の差を表します.<図1>には4つの点が与えられ、点aとbの距離は3である.
各点にN色のうちの1つがあります.私服、色は1からNの数字で表します.
各点pについて、pから始まる直線矢印を用いて別の点qに接続しようとする.ここで、点qはpのような色の点の中でpに最も近い点であるべきである.最近の点が2つ以上あれば、勝手に1つ選んでください.
各点について、常に同じ色の異なる点が存在します.したがって、上記の条件を満たすqまで、各点pから常に矢印を描くことができる.
例えば、点を順次対(位置、色)と表記する場合、a=(0,1)、b=(1,2)、c=(3,1)、d=(4,2)、e=(5,1)と呼ぶ.
以下の<図2>にこれらの点を表示します.ここで、白は1に相当し、黒は2に相当する.
-入力:標準入力で次の情報を取得します.最初の行は、点の個数を表す整数Nを与える.次のN行では、点座標と色を表す2つの整数xとyがそれぞれ与えられる.
各点が有する色cについて、色cを有する点は正確に2つ存在し、点の個数は2≦N≦10を満たす.
-サブタスク:
1)点の色はすべて同じで、点の個数は2≦N≦300を満たす.
2)点の色は正確に2種類に分けられ,点の個数は2≦N≦1000を満たす.
1)点の個数は2≦N≦5000を満たす.
💡 最も簡単な方法を考える
Aの配列が灰色を基準とする場合、A[i]およびA[j]が考慮される.
引き続きtemp変数でmin値を置き換え、最短距離を探します.
可能ですが、O(n^2)がタイムアウトする可能性があります.
📌 ソートによる解決
同じ色の痣だけを集める.
*プロパティを使用してソートする場合、隣接する場所はその両側にあります*
両側の数値の差が小さい値を矢印値に追加します.
1.同じ色の点を集める
ArrayList<Integer>[] a=new ArrayList[N+1];
for(int color=1;color<=N;color++)
a[color]=new ArrayList<Integer>();
ArrayList配列値がN+1の理由は,0をNull値とし,1−Nビットを配置したためである.以下、a[color]に該当する位置をArrayListとして追加する.
2.適切な位置の色を追加
for(int i=0;i<N;i++) {
coor=sc.nextInt();
color=sc.nextInt();
a[color].add(coor);
}
Reference
この問題について([BOJ]15970矢印描画/ベースソートアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@mingsomm/BOJ-15970-화살표-그리기-기초-정렬-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol