質問表面:https://nanti.jisuanke.com/t/41408
質問の意味:A、2,3,4,5,6,7,8,9,10、J、Q、K、13枚のカード、ノーカラーポイント、ヴァル1〜13。
ブランド名の出力にN + nは個人名ranklist
比較ルール:
ロイヤル俊最大
純子は、第二、一緒にすべてのヴァルで最大の名前を表示するには
24(3)、そのカードの残りvalのを見て、同じ4枚のカードのValを見て
ひょうたん第四には、二つの同一のカードvalを見て、同じヴァルの3枚のカードを見て
三第五、valは2枚のカードの残りの部分を見て、同じヴァルの3枚のカードを見て、
二対の第六、カードのvalの残りの部分を見て、2のvalの同じブランドの小さなを見て、大きな二つの同一カードのvalを見ます
第七の一組、二つの同一のカードvalのを見て、valが3枚のカードの残りの部分を見て、
第八高いカード、5枚のカードのvalのを見て、
また、(同じ名前を持っていない)、名前を見て、勝利の二枚のカードに近すぎる終え辞書式の小さな勝利と比較します。
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #define INF 0x3f3f3f3f typedefの長い 長いLL。 const int型 MAXN = 1E5 + 500 。 構造体ノード { 文字列名。 int型のランクを。 int型のval; INT [ 50 ]。 } P [MAXN]。 対 < INT、INT > calrank(int型 E、int型 D、int型 C、int型 B、INT A) { //> = B> = C> = D> = Eの 対< INT、INT > PA。 もし(== 13 && Bの== 12 && C == 11 && D == 10 && E == 1){pa.first = 0 ; pa.second = 13 ;} そうでない 場合(AB == 1つの && B-Cの== 1 && C-D == 1 && D-E == 1){pa.first = 1 ; pa.second = A;} そうでない 場合(B == E){pa.first = 2 ; pa.second = B * 100 + A;} それ以外の 場合(== d)は{pa.first = 2 ; pa.second = A * 100 + E;} そうでない 場合(A == C && D == E){pa.first = 3 ; pa.second = A * 100 + D;} そうでない 場合(== bの&& C == E){pa.first = 3 ; pa.second = C * 100 + ;} そうでない 場合(A == C){pa.first = 4 ; pa.second = * 100 + D + E;} そうでない 場合(B == D){pa.first = 4 ; pa.second = B * 100 + A + E;} そうでない 場合(C == E){pa.first = 4 ; pa.second = C *100 + A + B;} そうでない 場合(== bの&& C == D){pa.first = 5 ; pa.second = A * 10000 + C * 100 + E;} そうでない 場合(&& D == E == b)は{pa.first = 5 ; pa.second = A * 10000 + E * 100 + C;} そうでない 場合(B == C && D == E){pa.first = 5 ; pa.second = B * 10000 + D * 100 + ;} そうでない 場合(A == B){pa.first = 6 ; pa.second = A * 100 + C + D + E;} そうでない 場合(B == C){pa.first = 6; pa.second = B * 100 + A + D + E;} そうでない 場合(C == D){pa.first = 6 ; pa.second = C * 100 + A + B + E;} そうでない 場合(D == E){pa.first = 6 ; pa.second = D * 100 + A + B + C;} そうでなければ {pa.first = 7 ; pa.second = A + B + C + D + E;} 戻りPA。 } BOOL CMP(ノードA、ノードB) { 場合(a.ranks == b.ranks) { 場合(a.val == b.val)戻り a.name < b.name。 返す a.val>b.val; } 他に 戻り a.ranks < b.ranks。 } ブール CMP2(INT A、INT B) { 戻り < Bと、 } int型のmain() { IOS :: sync_with_stdio(偽)。 int型のn; 一方、(CIN >> N) { ため(int型 i = 1 ; iが<= N iが++ ) { 文字列PAI。 CIN >> P [i]は.nameの>> PAI。 以下のための(int型K = 0、J = 0 ; PAI [k]は、k個++ ) { 場合(PAI [K] ==が' 0 ')続けます。 もし(PAI [K]> = ' 2 ' && PAI [K] <= ' 9 ')p [i]は.A [J] = PAI [K] - 48 。 そう であれば(PAI [K] == ' A ')P [i]は.A [J] = 1 。 そう であれば(PAI [K] == ' J ')P [i]は.A [J] = 11 。 それ以外の 場合(PAI [K] == ' Q ')p [i]は.A [J] = 12 。 そう であれば(PAI [K] == ' K ')P [i]は.A [J] = 13 。 そう であれば(PAI [K] == ' 1 ')P [i]は.A [J] = 10 。 J ++ ; } ソート(P [i]の.A、P [i]は.A + 5 、CMP2)。 ペア < int型、int型 > PA2。 PA2 = calrank(P [i]が.A [ 0 ]、P [I] .A [ 1]、P [i]は.A [ 2 ]、P [I] .A [ 3 ]、P [I] .A [ 4 ])。 P [i]は.ranks = pa2.first。 P [i]は.val = pa2.second。 } ソート(P + 1、P + N + 1 、CMP)。 用(int型 iは= 1 ; iが<= N iが++ ) COUT << P [I] .nameの<< ENDL。 } 戻り 0 。 }
あまりにもハードI
...