首页 > 代码库 > HDU 4968 Improving the GPA【数学】【暴力】

HDU 4968 Improving the GPA【数学】【暴力】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4968

题目大意:已知gpa的计算方法和一个同学的平均分以及其科目数量,求gpa的最大值及其最小值。


比如给出的样例:

4minmax

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);