首页 > 代码库 > 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);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。