T1まだ直接のような百億九* 2%、その後、Bの番号を書き留め、法律ああを見つけます
1つの#include <ビット/ STDC ++ H> 2 の#define MO十億七 3 使用して 名前空間STDを、 4 チャー S [ 1000050 ]。 5 長い 長B、O。 6つの 長い 長いANS。 7 のint main()の 8 { 9 CIN >> S。 10 INT長=のSTRLEN(S) 11 のために(int型 I =長さ- 1 ; I> = 0 ; i-- ) 12 { 13 もし(S [I] == ' A ' ) 14 O ++ 。 15 } 16 であれば(O == 長さ) 17 { 18 COUT << " -1 " << ENDL。 19 リターン 0 ; 20 } 21 のために(INT I =長さ- 1 ; I> = 0 ; i-- ) 22 { 23 であれば(S [i]が== ' B ' ) 24 { 25 B ++ ; 26 続け; 27 } 28の ANS + = B。 29 B = B * 2%のMO。 30 } 31 のprintf(" %のLLD "、ANS%のMO)。 32 }
T2より楽しく、私は戦いをハングアップ
オリジナルのアイデアは、常に2進数を覚えておくことは、その後5回、5回の変換、5の配列、11のアライメントまで、理論があったことができますですが、私はハングアップ
正の解は、実際にはDPのですか???
1つの#include <ビット/ STDC ++ H> 2 の#defineは長い長いちゃう 3 の#define MO十億七 4 使って 名前空間STDを、 5 今のLL B、K、合計。 6 int型のp、CNT。 7つの LLのANS [ 2000 ]。 8 のchar [ 2050 ]。 9 LL DP [ 2000 ] [ 2000 ]。 10 ボイド解く(INT X) 11 { 12 のint点= X。 13 のint NUM = 0 。 14 一方、(X) 15 { 16 であれば(X%2 == 1 ) 17 NUM ++ 。 18 X / = 2 。 19 } 20の ANS [ポイント] = ANS [NUM] + 1 。 21 } 22 のint main()の 23 { 24 CIN >> A >> K。 25 INT長=のSTRLEN(A)。 26 もし(K == 1 ) 27 { 28 COUT <<長さ- 1<< てendl; 29 リターン 0 ; 30 } 31 であれば(K == 0 ) 32 { 33 COUT << 1 << ENDL。 34 リターン 0 。 35 } 36 であれば(K> 5 ) 37 { 38 COUT << 0 << ENDL。 39 リターン 0 ; 40 } 41 k-- 。 42 のための(int型 I =2 ;私は= < 1000 ; iが++ ) 43 (i)を解きます。 44 のために(int型 I = 0 ; iが長さを<; Iは++ ) 45 DPを[I] [ 0 ] = 1 。 46 のために(int型 I = 0 ; iが長さを<; Iは++ ) 47 のDPを[I] [I] = 1 。 48 のために(int型 i = 1 ; iが長さを<; I ++ ) 49 のための(INT J = 1 ; J <= I; J ++ ) 50 { 51 DP [I] [J] =(DP [I- 1 ] [J] + DP [I- 1 ] [J- 1 ])%のMO。 52 } 53 のための(int型 i = 0 ; iは長さ<; iは++ ) 54 { 55 であれば([I] == ' 0 ' ) 56 続けます。 57 のために(INT J = 0 ; J <長-I; J ++ ) 58 { 59 であれば(ANS [今jは+] == k)の 60 { 61 和+ = DP [長-I- 1 ] [J]。 62 合計=合計%のMO。 63 } 64 } 65 今++ 。 66 } 67 であれば(ANS [今] == K) 68 合計++ 。 69 coutの<<和%のMO << ENDL。 70 リターン 0 ; 71 }
T3の練習は、サブツリー直径の一部、利用できる50理論ですが、私はハングアップ...
ソリューションは、今も2333コード最初の空の可能性が低いです