アットウィキロゴ

全体公開 > 合同練習会 > 20130323 > A 温度検査

問題の概要

気温を毎分1回測定した記録がある.
測定は100%信頼出来るものではなく, -273度未満, 又は, \pm 2 分に \pm 2 度以下の差の物が無い測定結果は, 無効とする.
有効な測定結果の平均を求めよ. 1つもない場合は, -300.0 を出力せよ.

実装の方針, 注意点

+ ...
最初の2つ, 最後の2つのデータは, \pm 2 分のデータが他に比べて少ない.
処理を煩雑にしないため, 最初に2つ, 最後に2つの番兵を入れておく.
入力は整数であるが, 出力は実数である事に注意.

ソースコード

+ ...
  1. bool solve(){
  2. cout.setf(ios::fixed); cout.precision(10);
  3. int n;
  4. cin >> n;
  5. if(!n) return false;
  6.  
  7. // 入力の左右に-INFな番兵を2つずつ置いておく.
  8. vector<int> in(n+4, -INF);
  9. rep(i, n) cin >> in[i+2];
  10.  
  11. int sum = 0, cnt = 0;
  12. REP(i, 2, n+2){
  13. bool ok = false;
  14. REP(d, -2, 3) if(d && abs(in[i+d] - in[i]) <= 2) ok = true;
  15. if(in[i] < -273) ok = false;
  16. if(ok){
  17. sum += in[i];
  18. ++cnt;
  19. }
  20. }
  21. if(cnt) cout << (double)sum / cnt << endl;
  22. else cout << "-300.0" << endl;
  23.  
  24. return true;
  25. }
  26.  



最終更新:2013年03月27日 00:19