Grading
题目描述:
Grading hundreds of thousands of Graduate Entrance Exams is a hard work. It is even harder to design a process to make the results as fair as possible. One way is to assign each exam problem to 3 independent experts. If they do not agree to each other, a judge is invited to make the final decision. Now you are asked to write a program to help this process.
For each problem, there is a full-mark P and a tolerance T(<P) given. The grading rules are:
•
A problem will first be assigned to 2 experts, to obtain G1 and G2. If
the difference is within the tolerance, that is, if |G1 - G2| ≤ T, this
problem's grade will be the average of G1 and G2.
• If the difference exceeds T, the 3rd expert will give G3.
•
If G3 is within the tolerance with either G1 or G2, but NOT both, then
this problem's grade will be the average of G3 and the closest grade.
• If G3 is within the tolerance with both G1 and G2, then this problem's grade will be the maximum of the three grades.
• If G3 is within the tolerance with neither G1 nor G2, a judge will give the final grade GJ.
- 输入:
-
Each input file may contain more than one test case.
Each case occupies a line containing six positive integers: P, T, G1, G2, G3, and GJ, as described in the problem. It is guaranteed that all the grades are valid, that is, in the interval [0, P].
- 输出:
-
For each test case you should output the final grade of the problem in a line. The answer must be accurate to 1 decimal place.
- 样例输入:
-
20 2 15 13 10 18
- 样例输出:
-
14.0
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cmath> 5 #include <cstring> 6 #include <cctype> 7 8 #include <vector> 9 #include <list> 10 #include <deque> 11 #include <string> 12 #include <algorithm> 13 #include <stack> 14 #include <queue> 15 #include <map> 16 #include <set> 17 18 using namespace std; 19 20 21 22 23 24 25 int main() 26 { 27 28 29 int p,t,g1,g2,g3,gj; 30 31 while(scanf("%d%d%d%d%d%d",&p,&t,&g1,&g2,&g3,&gj)!=EOF) 32 { 33 int i,j,k; 34 35 36 int der=abs(g1-g2); 37 38 39 if(der<=t) 40 { 41 double ans=(g1+g2)*1.0/2; 42 43 printf("%.1lf\n",ans); 44 } 45 else 46 { 47 48 int der1=abs(g1-g3); 49 int der2=abs(g2-g3); 50 51 if((der1<=t)&&(der2<=t)) 52 { 53 int maxg=-1; 54 if(g1>maxg) 55 {maxg=g1;} 56 if(g2>maxg) 57 maxg=g2; 58 if(g3>maxg) 59 maxg=g3; 60 61 double ans=maxg; 62 63 printf("%.1lf\n",ans); 64 65 } 66 else if(der1<=t) 67 { 68 double ans=(g1+g3)*1.0/2; 69 70 printf("%.1lf\n",ans); 71 72 } 73 else if(der2<=t) 74 { 75 double ans=(g2+g3)*1.0/2; 76 77 printf("%.1lf\n",ans); 78 79 } 80 else 81 { 82 double ans=gj; 83 84 printf("%.1lf\n",ans); 85 } 86 } 87 } 88 89 90 91 return 0; 92 }