https://codeforces.com/contest/1237/problem/C2
点は、面内の位相キャンセル近く、最初のような同じノードをy座標、三次元除去Xに変換されるように、x軸、残りのX軸のそれぞれ一つだけのノード、ポイント周辺の除去を座標に等しくすることができます。
#include <ビット/ STDC ++ H> の#define担当者(I、N)がため(INT i = 0;!I = N; ++ I) のために(I、N)ごとに#define(INT I = N-1; I> = 0; - I) (I = STAをint型のために議員(I、駅、n)を#defineし; I = N; ++ I)! の#define REP1(I、N)(iは1 = int型のため、 iが<= N; ++ I) のための#define PER1(I、N)(INT I = N; I> = 1; - I) の#define REP1(I、STA、N)のための(INT I = STA。 I <= N; ++ I) の#define LのK << 1つ の#defineのR K << 1 | 1つ の#define INF(0x3f3f3f3f) の#define llinf(1E18) の#define中間(ツリー[K] .L +ツリー[ K] .R)>> 1つ の#define ALL(A)A.begin()、A.end() の#define SIZE(A)((INT)A.size()) のtypedef長い長いI64。 名前空間stdを使用。 CONST int型MAXN = 5E4 + 32。 typedefは構造体ノード{ 、整数X、Y、Z、インデックス ブール演算子<(constの構造体ノード&N)のconst (I ++; iが<= n iは2 = INT)のために { .X(CUR && Vなら[I] .X == V [CUR]& { (!X = NX)であれば 、X <NX返します。 もし(!Y = NY) リターンY <NY; NZ <Z返します。 } }ノード。 BOOL VIS [MAXN]。 int型のmain(){ IOS :: sync_with_stdio(偽); cin.tie(0)。cout.tie(0)。 int型のn; cinを>> N; ベクター<ノード> V(N + 1)。 REP1(I、N) { CIN >> V [i]は.X >> V [i]は.Y >> V [i]は.Z。 V [i]は.INDEX = I。 } ソート(v.begin()+ 1、v.end())。 int型CUR = 1; { VIS [I] = VIS [CUR]は真=。 coutの<< V [i]を.INDEX << "" << V [CUR] .INDEX << '\ nの'; }他 CUR = I; } CUR = 1。(VIS [CUR])++ CUR一方、 以下のために(INT I = CUR + 1; I <= N; ++ I) { IF(VIS [i])と 続けます。 (CUR && V [i]は.X == V [CUR] .X)場合 { VIS [I] = VIS [CUR]は真=。 coutの<< V [i]を.INDEX << "" << V [CUR] .INDEX << '\ nの'; CUR = 0; }他 CUR = I; } CUR = 1。(VIS [CUR])++ CUR一方、 以下のために(INT I = CUR + 1; I <= N; ++ I) { IF(VIS [i])と続けます。 IF(CUR)COUT << V [CUR] .INDEX << "" << V [i]は.INDEX << '\ n'は、CUR = 0。 他CUR = I; } 0を返します。 }