:
問題の意味:彼らは要素を作ることができればN-A員を考えると、B単項、Sは尋ねました。
アイデア: A = S * I + JすなわちA * I <= S <= A * Iは、B + 、すなわち、分(S / N、A) + B> = Sと、
/ * @author nimphy @Create 2019-11-05-10:34 程度:CF1256A * / インポート。java.utilの* ; パブリック クラスCF1256 { 公共 静的 ボイドメイン(文字列[]引数){ スキャナ内 = 新しいスキャナ(System.in)。 INT Q、A、B、N、S。 Q = In.nextInt()。 一方、(Q--> 0 ){ A = In.nextInt()。 B = In.nextInt()。 N = In.nextInt()。 S= In.nextInt()。 INT I = Math.min(S / N、A)* N。 // するSystem.out.println(I); もし(I + B> = S)のSystem.out.println( "YES"は); 他のSystem.out.println( "NO" ); } } }
B:
質問の意味:順列を考えると、今、あなたがそのように最低限の辞書編集、別の操作を行うことができます。
アイデア:貪欲は、それらが交換位置を満たしていれば1、2 ....そして、前述作るしようとする{使用していないが、より小さい放置}
/ * @author nimphy @Create 2019-11-05-11:34 程度:CF1256B * / インポート。java.utilの* ; パブリック クラスCF1256 { 静的 INT [] = 新しい INT [1010 ]。 静的 ブール [] VIS = 新しい ブール [1010 ]; パブリック 静的 ボイドメイン(文字列[]引数){ スキャナ内 = 新しいスキャナ(System.in)。 int型Q、N; Q = In.nextInt()。 一方、(Q--> 0 ){ N = In.nextInt()。 以下のために(int型、N = iは<; I = 1 iは++ ){ [I] = In.nextInt()。 VIS [i]は = 偽; } のために(int型、N = iは<; I = 1 iは++ ){ int型の POS = 0 。 用(INTの J = 1; J <= N; J ++ ){ 場合([J] == I){ POS = J。 破ります; } } ながら(!POS> iは&& VIS [POS] && [POS] <[POS-1 ]){ int型 T = A [POS]。 [POS]は [POS - = 1 ]。 [POS - 1] = Tと、 VIS [POS]は = 真; POS - ; } } のために(int型、N = iは<; I = 1 iは++ ){ System.out.printを([I] +」 " )。 } のSystem.out.println(); } } }