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

来源:互联网 发布:淘宝推广运营方案 编辑:程序博客网 时间:2024/05/18 00:11

题目链接: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 longint 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);  


0 0