1104. Sum of Number Segments (20)

2520 단어
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

코드 커밋
http://www.patest.cn/contests/pat-a-practise/1104
수학 문제인데 시간 초과가 쉬워요. 입력할 때 바로 처리해야 돼요. 이중for는 안 돼요.
15분 코드:
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std ;

#define N 100001

int main()
{
  //freopen("in.txt" , "r" , stdin) ;
  int n , i , j ;
  double a[N] ;
  scanf("%d" , &n) ;

  for(i = 0 ; i < n ; i++)
  {
    scanf("%lf" , &a[i]) ; 
  }
  double sum = 0 ;
  for(i = 0 ; i < n ; i++)
  {  
    double sumTmp = 0 ;
    for(j = n - i  ; j >= 1 ; j --)
    {
      sumTmp += a[n - j] * j ;
    }
    sum += sumTmp ;
  }
  printf("%.2lf
" , sum) ; return 0 ; }

ac 코드:
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std ;

#define N 100001

int main()
{
  //freopen("in.txt" , "r" , stdin) ;
  int n , i , j ;
  double a[N] ;
  scanf("%d" , &n) ;
  double sum  = 0 ;
  for(i = 0 ; i < n ; i++)
  {
    scanf("%lf" , &a[i]) ; 
    double sumTmp = a[i] * (n - i) *(i + 1) ;
    sum += sumTmp ;
  }
  printf("%.2lf
" , sum) ; return 0 ; }

좋은 웹페이지 즐겨찾기