NOIp2014 Day2T3はホーナー法方程式を解きます

A0 + A1 * X + A2 * X ^ 2 + A3 * X ^ 3 + ... AN * X ^ n個

= A 0 + X *(A + X *(A2 + X *(A2 + ... + X *(+ 0))))

ただ、再帰的な計算をします。

ちょっとしたトリックがある品質の多数の部門の合同を算出する処理、あまりにも多くの正しさを低減しますが、高精度を避けられません。(重要)

1の#include <iostreamの>
 2の#include <cstdioを>
 3  使用して 名前空間STDを、
4のtypedef 長い LL。
5  
6  のconst  int型 MOD = 1E9 + 7 7 [LL 110 ]、S [ 1000010 ]。
8  のLL M、N、トップ。
9  
10が 読み出さ11(){
 11      のLL A = 0チャー C = GETCHAR()、L = C。
12      一方、(C < ' 0 ' || C> ' 9 ')L = C、C = GETCHAR()。
13      一方' 0 ' <= C && C <= ' 9 ' 14          =(* 10 + C- ' 0 ')%MOD、C = GETCHAR()。
15      であれば(L == ' - 'のリターン ; -a 返します16  }
 17  
18  ブールチェック(LL x)から{
 19      のLLのS = 0 20      のためには、int型 I = N; I> = 0; I - )、S =(S * X + [I])%MOD。
21      リターンS;
22  }
 23  
24  INT メイン(){
 25      CIN >> N >> M。
26      のためにint型 I = 0 ; iが<= N; iが++)[I] = (読み取り)
27      のためには、int型 I = 1 ; I <= M; iは++)場合(検査(I))
 28の          S [++トップ] = I。
29      のprintf(" %LLDする\ n " 、上)。
30      のためにINT I = 1;私は=トップ<; Iは++)のprintf(" %のLLDを\ n " 、S [I])を、 
31  リターン 0 ;
32 }

 

おすすめ

転載: www.cnblogs.com/Wangsheng5/p/11783081.html
おすすめ