测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A27695. 分数线 (score.cpp)

填空题 中等

题目描述

分数线 (score.cpp)

题目描述

一次比赛中,所有参加比赛的选手都获得了一个分  。已知有 C1 个同学得 1 分, C2个同学得 2分,...., cm 个同学得 m 分,请你划定一个分线  k,使得不低于分线 k 的人数 n1和低于分数线 k 的人数n2 均在给定的 个范围[ t,y] 之内,即x=<n1 <=y,x= <n2 <=y。保证s和k一定是整数,且1 =< s < =m,1=<k <= m。

输入格式

第一行仅有一个正整数 m;第二行包含 m 个整数 C1,C2,...,Cm,两两之间以空格分隔,数据保证至少有一个 ci大于 0 :第三行包含两个用空格分隔的整数 x 和 y。

输出格式

如果不存在满足条件的分数线,输出 0 。否则,输出一个分符合题目要求的分数线。如果有多个答案,输出符合条件的答案中最小的那一个。

参考答案

#include<bits/stdc++.h> using namespace std; #define ll long long ll a[200010], sum[200010]; int main() { ll m, x, y; cin >> m; for(ll i = 1;i <= m;i++) { cin >> a[i]; sum[i] = sum[i - 1] + a[i]; } cin >> x >> y; for(ll i = 1;i <= m;i++) { ll cnt1 = 0, cnt2 = 0; cnt1 = sum[i - 1]; cnt2 = sum[m] - sum[i - 1]; if(cnt1 >= x && cnt1 <= y && cnt2 >= x && cnt2 <= y) { cout << i; return 0; } } cout << 0; return 0; }
上一题 下一题