标签:数学
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4968
题目大意:已知gpa的计算方法和一个同学的平均分以及其科目数量,求gpa的最大值及其最小值。

比如给出的样例:
4min max
75 175(3.0) 75(3.0)
75 269,81(2.75) 75,75(3.0)
75 369,69,87(2.667) 60,80,85(3.1667)
按照上面给出的规律我们可以得出这样的规律:
最低的gpa组合是100+69(分数低于69,最低gpa直接是2.0) 最高的gpa组合是60+85(分数高于85,最高gpa直接是4.0)
别的分数区域,我们要把分数按照一定的比例分一下,乘于相应的比例,可以得出最后的gpa,方法挺好的。
#include <cstdio>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int MAXN = 400000;
const int MAX = (25);
const int INF = ((1<<31)-1);
#define LL long long
int n,f,k,x,y;
double minjd,maxjd;
double fun(int x)
{
if(x<=60)return 0;
if(x<=69)return 2.0;
if(x<=74)return 2.5;
if(x<=79)return 3.0;
if(x<=84)return 3.5;
return 4.0;
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&f,&k);
if(f>69){
x=(f-69)*k/31;
y=(100-f)*k/31;
minjd=(x*4+y*2+fun(k*f-x*100-y*69))*1.0/k;
}else minjd=2.0;
if(f<85){
x=(f-60)*k/25;
y=(85-f)*k/25;
maxjd=(x*4+y*2+fun(k*f-x*85-y*60))*1.0/k;
}else maxjd=4.0;
printf("%.4lf %.4lf\n",minjd,maxjd);
}
return 0;
}
这样的暴力都能过........
for(int i=0;i<=n;i++)
{
for(int ii=0;ii<=n;ii++)
{
for(int iii=0;iii<=n;iii++)
{
for(int iiii=0;iiii<=n;iiii++)
{
for(int j=0;j<=n;j++)
{
if(i+ii+iii+iiii+j==n)
{
mins=60*i+70*ii+75*iii+80*iiii+85*j;
maxs=69*i+74*ii+79*iii+84*iiii+100*j;
sum=2.0*i+2.5*ii+3.0*iii+3.5*iiii+4.0*j;
sum/=(double)n;
if(mins<=avg*n&&avg*n<=maxs)
{
minv=min(minv,sum);
maxv=max(maxv,sum);
}
}
}
}
}
}
}
printf("%.4f %.4f\n",minv,maxv); HDU 4968 Improving the GPA【数学】【暴力】,布布扣,bubuko.com
HDU 4968 Improving the GPA【数学】【暴力】
标签:数学
原文地址:http://blog.csdn.net/u010468553/article/details/38688107