UVa413 - Up and Down Sequences
来源:互联网 发布:中国象棋分析软件 编辑:程序博客网 时间:2024/05/16 01:35
#include <cstdio>#include <iostream>#include <fstream>#include <sstream>#include <string>#include <cstring>#include <vector>#include <algorithm>using namespace std;void print(int a){ cout << a << " ";}int main(){ string s; int num; int n; int cur; int cnt; int equal; int up, down;#ifndef ONLINE_JUDGE //freopen("uva_in.txt", "r", stdin); ifstream cin("uva_in.txt");#endif while (getline(cin, s)) { if (s == "0") break; istringstream line(s); vector<int> v; vector<int> ans[2]; n = 0; while (line >> num, num) { v.push_back(num); n++; } cur = -1; cnt = 0; equal = 0; up = down = 0; //for_each(v.begin(), v.end(), print); for (size_t i = 1; i < v.size(); i++) { if (cur == -1) { if (v[i] > v[i - 1]) { cur = 0; up++; } else if (v[i] == v[i - 1]) { equal++; } else if (v[i] < v[i - 1]) { cur = 1; down++; } } else { if (v[i] == v[i - 1]) equal++; else { if (!cur && v[i] < v[i - 1]) { ans[cur].push_back(up + equal); cur = 1 - cur; equal = 0; up = 0; down = 1; } else if (!cur && v[i] > v[i - 1]) { up++; } else if (cur && v[i] > v[i - 1]) { ans[cur].push_back(down + equal); cur = 1 - cur; equal = 0; down = 0; up = 1; } else { down++; } } } } if (cur == -1) { ans[0].push_back(0); ans[1].push_back(0); } else if (cur == 0) { ans[0].push_back(equal + up); if (ans[1].size() == 0) ans[1].push_back(down); } else { if (ans[0].size() == 0) ans[0].push_back(up); ans[1].push_back(equal + down); } cout.precision(6); //cout << "ans[0].size():" << ans[0].size() << endl; //cout << "ans[1].size():" << ans[1].size() << endl; cout << "Nr values = " << n << ": "; if (cur == -1) { cout << fixed << 0.0 << " " << fixed << 0.0 << endl; } else { double ans1 = 0, ans2 = 0; //for_each(ans[0].begin(), ans[0].end(), print); //cout << endl; //for_each(ans[1].begin(), ans[1].end(), print); //cout << endl; for (size_t i = 0; i < ans[0].size(); i++) { ans1 += ans[0][i]; } for (size_t i = 0; i < ans[1].size(); i++) { ans2 += ans[1][i]; } ans1 /= ans[0].size(); ans2 /= ans[1].size(); cout << fixed << ans1 << " " << fixed << ans2 << endl; } } return 0;}