質問A:軍事国X
制限時間:1秒 メモリ制限:256メガバイト
フェイス質問
彼は公に質問に直面して減少しました。
問題の解決策
シンプルな貪欲。
生き残った兵士の数に応じて(すなわち、戦闘マイナス戦死兵士の数に関与した兵士の数)一種。
戦闘に関与した兵士の数に応じて、同じ種類の兵士の生存数の場合。
ご注文は、再び統計答えを掃きます。
#include <ビット/ STDC ++ Hは> の#defineは長いlong int型 の#define RINTレジスタINTを #DEFINE(A)A = INIT()読み取る 使用 名前空間STDを、 インラインint型のinit() { int型 = 0、B = 1。チャー CH = GETCHAR()。 一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(== CH ' - ')B = - 1 ; CH = GETCHAR();} 一方(CH> = ' 0 '&& CH <= ' 9 '){=(<< 3)+(<< 1)+ CH- ' 0 ' ; CH = GETCHAR();} 戻り *のBと、 } int型T、N、ANS。 構造体ノード{ int型の DS、NS、CS;}のp [ 1000005 ]。 インラインブールCMP(ノードA、ノードB){ リターン(A.cs == B.cs)A.ns <B.ns:A.cs < B.cs。 } main()の符号付き { // freopenは( "data.in"、 "R"、STDIN)を、 // freopenは( "std.out"、 "W"、STDOUT)。 (T)を読み出します。 ) { (n)を読み出す; ANS = 0 。 ため(RINT i = 1 ; iが<= N;、IND、イン++ I) { (IND)を読み取り、(INN)を読み取ります。 P [i]は.DS = IND、P [i]は.ns = イン。 P [I]の.cs = INN- IND。 } ソート(P + 1、P + N + 1、CMP); ANS = P [ 1 ] .ns。 用(RINT I = 2 ; iが<= N; I ++)ANS = MAX(ANS + P [i]は.DS、P [i]は.ns)。 printf(" %LLDする\ n " 、ANS)。 } }