ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 E: IQ(iq)
生活随笔
收集整理的這篇文章主要介紹了
ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 E: IQ(iq)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://acm.ocrosoft.com/problem.php?cid=1316&pid=4
?
題目描述
根據世界某權威學會的一項調查,學信息學的學生IQ非常高。舉個最好的例子,如果我們把學信息學的一些學生調去學數學,那么兩個競賽的學生平均IQ都會提升!!
現在給出一群數學競賽全體學生的IQ和信息學競賽全體學生的IQ,問最多能把幾個學信息學的學生調去學數學,而兩個競賽的學生平均IQ都有提升呢?
每次只調一個學生,而且每次調配,兩個競賽的學生平均IQ都要提升。
輸入
第1行一個正整數N(N≤I00),代表數學競賽班學生的數目;
第2行,有N個正整數,代表每個數學學生的IQ(1到200之間);
第3行,一個整數M(M≤100),代表信息學競賽班學生數目;
第4行,有M個正整數,代表每個信息學競賽班學生的IQ(1到200之間)。
輸入數據保證信息學學生平均IQ高于數學學生。
輸出
一個正整數,代表能從信息學調去學數學的學生的個數。
樣例輸入
3 3 2 3 3 3 2 5樣例輸出
1代碼:
#include <bits/stdc++.h> using namespace std;int a[10000]; int b[10000];int main () {int n, m;int sa = 0, sb = 0, t = 0;int num=0;double aver1, aver2, a1, a2;scanf ("%d", &n);for(int i = 1; i <= n; i ++) {scanf ("%d", &a[i]);sa += a[i];}scanf("%d", &m);int z = m;for(int i = 1; i <= m; i ++) {scanf ("%d", &b[i]);sb += b[i];}sort(b, b + m);aver1 = (double)sa / n;aver2 = (double)sb / m;while(1) {num = 0;for(int i = 1; i <= z; i ++) {if ((double)(sa + b[i]) / (n + 1) > aver1 && (double)(sb - b[i]) / (m - 1) > aver2) {t ++;aver1 = (double)(sa + b[i]) / (n + 1);aver2 = (double)(sb - b[i]) / (m - 1);sa += b[i];sb -= b[i];n ++;m --;b[i] = -1;sort(b, b + m);continue;}num ++;}if(num == z)break;}printf ("%d\n", t);return 0; }
轉載于:https://www.cnblogs.com/zlrrrr/p/9728619.html
總結
以上是生活随笔為你收集整理的ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 E: IQ(iq)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Statement
- 下一篇: 并发编程-单元练习题