2013ACM/ICPC亚洲区南京站现场赛——题目重现

GPA http://acm.hdu.edu.cn/showproblem.php?pid=4802

签到题,输入两个表,注意细心点就行了。

 1 #include<cstdio>
 2 #include<cstring>
 3 const int M=16;
 4 char s[M],cp[M][M]={"A","A-","B+","B","B-","C+","C","C-","D","D-","F"};
 5 double si[]={4,3.7,3.3,3,2.7,2.3,2,1.7,1.3,1.0,0};
 6 int main(){
 7     int n;
 8     while(~scanf("%d",&n)){
 9         double ss=0;
10         int sc=0,c;
11         while(n--){
12             scanf("%d%s",&c,s);
13             for(int i=0;i<11;i++){
14                 if(!strcmp(cp[i],s)){
15                     ss+=si[i]*c;
16                     sc+=c;
17                     break;
18                 }
19             }
20         }
21         if(!sc){
22             puts("0.00");
23             continue;
24         }
25         printf("%.2f
",ss/sc);
26     }
27     return 0;
28 }
View Code

Poor Warehouse Keeper http://acm.hdu.edu.cn/showproblem.php?pid=4803

输入x,y表示最终的数量和总价,初始是1,1.  

有两种操作可以选择 一种是 y+1,那么此时x不变,但是单价变大了一些。

另一种选择是 x+1,此时单价不变,但是y =  y/x*(x+1) 其中x指的是变化之前的x,也就是说, 总价要变成之前的单价*现在的数量。

综上所诉,单价不变或增大。如果x增大,y增大的是上一次的单价,如果使y增大,则单价变大,那么之后按x时y增大的也快。

为了尽快使1,1达到输入的x,y,贪心的选择先增大y,使得单价变大,因为要达到x,早晚都要按x-1次,那么我们在之前使单价变大,就会使这x-1次带来的y的增加更多。

但是单价有个上限,不能过大,否则x-1次必须按,y有可能超过目标。

最后的做法,对每一次增加x之前,都尽可能的把y增大,也就是把单价增大,增大到不超过最终结果的最大单价以后,增加一次x,然后继续之前的选择。

 1 #include<cstdio>
 2 const double eps=1e-8;
 3 int main() {
 4     int x,y;
 5     while(~scanf("%d%d",&x,&y)) {///x是数量,y是总价
 6         if(x>y){                ///数量必须要按x-1次,初始单价1,所以x>y是无法按出的
 7             puts("-1");
 8             continue;
 9         }
10         double k=(y+1-eps)/x;   ///最大的单价
11         int ans=x-1;            ///按x-1次数量
12         double tmp=1;           ///初始y的值
13         for(int i=1;i<=x;i++) {
14             double t=i*k;       ///当前可达到的最大总价
15             int u=(int)(t-tmp); ///最多按总价的次数
16             tmp+=u;             ///总价加上这么多次数
17             tmp=tmp*(i+1)/i;    ///这是按了一下数量
18             ans+=u;             ///这是加上按总价的次数,按数量的x-1次之前已经加了
19         }
20         printf("%d
",ans);
21     }
22     return 0;
23 }
View Code

end

原文地址:https://www.cnblogs.com/gaolzzxin/p/3989240.html