개발자 톡
연습문제 톡
성적 평균
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; }
#성적_평균