アリスとボブはいくつかの数字の平均を見つける方法を学習しています。彼らは本当に興奮して
平均値を見つけることについてのゲームを思い付くことにしました。
ゲームは、ゲーム開始時に一連の番号が書き込まれ、このように動作します。
そして、ゲーム内のいくつかのラウンドがあるでしょう。最初のラウンドでアリスは、数xを言うだろうとボブは
2つのインデックスiとjを選択する必要があります。のは、i番目の数との間のユニークな数の平均としましょう
j番目の数をyです。次いで、アリスは、そのラウンドでABS(X-Y)点を取得します。次のラウンドでは、アリスとボブは、スイッチ
の役割を。ゲームは、この方法を続けています。
アリスとボブは、このゲームを楽しむが、それらは独特の数字の平均値を算出嫌い。そう、
彼らはのために平均値を計算するプログラム書くために、彼らの唯一のプログラマの友人、あなたを求めている
それらを。
入力
入力の最初の行は、数T(T≤100)です。Tのテストケースは以下の通り。
各テストケースの最初の行は、数列の長さを表す整数N(0 <N <1E4)です。
次の行は、シーケンスを表すn個の空間分離整数からなります。これらの整数のそれぞれは持ってい
1E9未満の絶対値を。次の行は、整数q(Q <1E5)を有しています。Q線が表す各従う
クエリを。各クエリは、二つの空間は、私は、J(1≤iはj個の≤nを以下)の整数を分離しました。
出力
対応する範囲のユニークな要素の平均を表し、それぞれの場合、出力Q線については、小数点の後に6桁を四捨五入。いいえの場合は、その丸め変更10E-9に追加された場合、出力がないであろう
、または回答から減算します。
注:
最初のサンプル中の2番目のクエリの説明
範囲である(1,10)、10個の数字(1、2、3、4、4、3、2、1、-1、0)を含みます。このように固有の番号
範囲である(1、2、3、4、-1、0)、平均1.5である
最初のサンプル中の第三のクエリの説明
3つの数字含む範囲である(3,5)(3、4、4) 。この範囲内で一意の番号は3とされ
、平均3.5であり、4
サンプル入力
2
10
1 2 3 4 4 3 2 1 -1 0
4
1 4
1 10
3 5
8 10
3
1 1 0
1
1 3
サンプル出力用
ケース1:
2.500000
1.500000
3.500000
0.000000
ケース2:
0.500000
問題の意味:
配列が知られている上に、異なる所定のインターバルの数の平均値を求めます
アイデア:
Moの持つブロックのチームは、グループのように、いくつかの異なる数よりも多くを求めています
1つの#include <ビット/ STDC ++ H.> 2 3。 使用した 名前空間STD; 4 5。地図< INT、INT > coun-; // ここでチームメイトが、前記マップとステムの結果として数,,,あまりに1E9、1E4番号う 6 // 爪のC言語として、多くのことを書いて、私たちは本当に認識する必要があり、C ++は便利なポイントである 7。 構造体のノード 8。 { 9。 int型の左、右、NUM; 10 } STR [ 100005 ]; 11 int型 A [ 10005 ]、[属する10005を、番号]; 12は、 13である BOOL CMP(構造体、ノードX構造体ノードy) 14 { 15 であれば(属し[x.left] ==)y.left]属する戻り x.right < y.right。 16 他の リターン x.left < y.left。 17 } 18 19 二重追加(int型 nは、二重和) 20 { 21 であれば(COUN [N] == 0 ) 22 { 23 和+ = N。 24 数++ ; 25 } 26 COUN [N] ++ ; 27 戻り値の合計。 28 } 29 30 二重減算(int型 nは、二重和) 31 { 32 COUN [N] - 。 33 であれば(COUN [N] == 0 ) 34 { 35 number-- 。 36 和- = N。 37 } 38 リターン和。 39 } 40 41 のint main()の 42 { 43 int型N、M、T、I、TEMP、L、R、J。 44 ダブル【再100005 ]、和; // 合計はWAは、intとして定義され、右側に二重に、わからない開始 45 scanfの(" %のD "、&T); 46である ため(Jは= 1 ; J <= T; J ++ ) 47 { 48 coun.clear(); // coun-はクリア 49 scanfの(" %のD "、&; N-) 50 TEMP = SQRT(N) 51である ため(I = 1 ; I <=をN-; Iは++ ) 52は 、{ 53は scanfの(" %D"&[I]); 54が 属する[I] =(I- 1)/ TEMP + 1 ; 55 } 56 のscanf(" %dの」、&M); 57 用(i = 1 ; I <= M。私は++ ) 58 { 59 STR [I] .num = ; I 60 のscanf(" %d個の%のD "、&STR [I] .LEFT、&; STR [i]は.RIGHT) 61 } 62 ソート(STR + 1、STR +をM + 1 、CMP); 63 L = 1 。 64 R = 0 。 65 和= 0 。 66 番号= 0 。 67 のために(i = 1 ; I <= M; iは++ ) 68 { 69 ながら(R < STR [I] .RIGHT) 70 { 71 R ++ 。 72 和= 追加([R]、合計)。 73 } 74 ながら(R> STR [I] .RIGHT) 75 { 76 和= 減算([R]、合計)。 77 r--の。 78 } 79 ながら(L < STR [I] .LEFT) 80 { 81 合計= 減算([L]、合計)。 82 L ++ 。 83 } 84 ながら(L> STR [I] .LEFT) 85 { 86 l-- 。 87 和= 追加([L]、合計)。 88 } 89 のRe [STR [I] .num] = 1.0*合計/ 番号。 90 } 91 のprintf(" ケース%のD:\ n " 、J)。 92 のために(i = 1 ; I <= M; iは++ ) 93 { 94 のprintf(" %.6fを\ n " 、再[I])。 95 } 96 } 97 リターン 0 。 98 }