PAT(A) 1104. Sum of Number Segments (20)

本文由 Ocrosoft 于 2017-07-03 11:40:15 发表

1104. Sum of Number Segments (20)

时间限制
200 ms

内存限制
65536 kB

代码长度限制
16000 B

判题程序
Standard

作者
CAO, Peng

Given a sequence of positive numbers, a segment is defined to be a consecutive subsequence. For example, given the sequence {0.1, 0.2, 0.3, 0.4}, we have 10 segments: (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4).

Now given a sequence, you are supposed to find the sum of all the numbers in all the segments. For the previous example, the sum of all the 10 segments is 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N, the size of the sequence which is no more than 105. The next line contains N positive numbers in the sequence, each no more than 1.0, separated by a space.

Output Specification:

For each test case, print in one line the sum of all the numbers in all the segments, accurate up to 2 decimal places.

Sample Input:

4
0.1 0.2 0.3 0.4 

Sample Output:

5.00
找规律。
循环里用n最后两个样例过不了,必须用v.size();

#include <set>
#include <map>
#include <list>
#include <cmath>
#include <stack>
#include <queue>
#include <ctime>
#include <string>
#include <cstdio>
#include <vector>
#include <cctype>
#include <climits>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
template <typename T>
T GCD(T a, T b)
{
	if (!b)return a;
	return GCD(b, a%b);
}
template <typename T>
T LCM(T a, T b)
{
	return a*b / GCD(a, b);
}

int main()
{
	int n;cin>>n;
	vector<double> v(n);
	for(int i=0;i<n;i++)cin>>v[i];
	double res=0.0;
	for(int i=0;i<v.size();i++)
		res+=(i+1)*(v.size()-i)*v[i]; // [(i-1)*(n-i+1)+1+(n-i)]*v[i]
	printf("%.2lf\n",res);
	return 0;
}

欢迎转载,请保留出处与链接。Ocrosoft » PAT(A) 1104. Sum of Number Segments (20)

点赞 (0)or拍砖 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址