개발자 톡

연습문제 톡 성적 평균

c++ 오류?

등록일
2024-05-31 21:54:51
조회수
235
작성자
super3714

숫자 크기가 커서 부분합 방식으로 바꾸고 int에서 long long int 까지 해서

입력 예시에서는 맞는데

제출하면 테스트케이스 10개중에 아예 맞는게 없는상황이..?

1초, 256MB 안넘었는데



#include<iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char** argv)
{

  long long int N, K; // 학생 수, 구간 수
  cin >> N >> K;
   
  vector<long long int> score;
  vector<long long int> sub_sum; 
  vector<vector<long long int>> section(K);
   
  long long int sub_total=0;
   
  for(long long int i=0 ; i<N ; i++){
    long long int number;
    cin >> number;
    score.push_back(number);

    sub_total += number; // 부분합
    sub_sum.push_back(sub_total);
  }
  

  for(long long int i=0 ; i<K ; i++){
    long long int start, end;
    cin >> start >> end;
    section[i].push_back(start - 1); // 인덱스는 0부터 시작
    section[i].push_back(end - 1);
  }

   
  for(long long int i=0 ; i<K ; i++){
    long long int start_pos = section[i][0];
    long long int end_pos = section[i][1];
    long long int length = end_pos - start_pos + 1;
    long long int sum = 0;
   

   
    if(start_pos == 0)
      sum = sub_sum[end_pos];
    else
      sum = sub_sum[end_pos] - sub_sum[start_pos - 1];

     

  // 반올림 하지 않아도 되는 나눠떨어지는 경우
  if(sum%length == 0){
    cout << sum/length << "." << "00" << endl;
  }
  else{
    // 반올림 해야 하는 경우
    if((long long int)(( (float)sum/(float)length - sum/length )* 1000 ) % 10 >= 5)
      cout << sum/length + ( (long long int)( ( (float)sum/(float)length - sum/3 )* 100) + 1) * 0.01 << endl; // 26.67
    else
      cout << sum/length + ( (long long int)( ( (float)sum/(float)length - sum/3 )* 100)) * 0.01 << endl;
  }


     
  }
   
  return 0;
}
#성적_평균

이 카테고리의 톡 더보기