现在的位置: 首页 > 综合 > 正文

HDOJ1810

2013年10月09日 ⁄ 综合 ⁄ 共 1900字 ⁄ 字号 评论关闭

Rating of Tetris

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 3072/1024 K (Java/Others)
Total Submission(s): 126    Accepted Submission(s): 46

Problem Description
话说Lele发明了 New Tetris 这个游戏后,经过两天的小推广,立刻风靡亚洲。

为了更好的把这个游戏推广到全世界,Lele从Topcoder获得灵感,开发了一套系统量化并记录下每个人在每天的水平(定义为Rating),这样好让选手更好的分析自己并促进自己成长。为了更精确,Lele系统里的Rating并不像Topcoder里只采用整数,而是采用了小数,甚至可能存在负数(比得实在太差了)。

突然有一天,无聊到发慌的Lele看了一下自己的Rating,竟然很神奇的符合下面这个函数:

其中变量x的代表是哪一天,并且可以看作弧度用于sin函数的计算。函数F(x)表示在x天时的Rating。

Lele又定义了一个概念,Rating和。出于某种特殊原因,Lele把从日期A到日期B的Rating和定义为从时间A到时间B(包括)的每一天的Rating中,除掉最高的3个Rating,剩下其他Rating的和。

现在给你两个日期A和B,请你计算这段时间内Lele的Rating和

 

Input
本题目包含多组测试,请处理到文件结束。
每组测试包含两个正整数A,B(0<A,B<1000001),并且题目保证这个时间间隔大于3天
 

Output
对于每组测试,在一行里面输出该范围之内Lele的Rating和。
四舍五入至小数点后一位。
 

Sample Input
1 5
1 1000000
 

Sample Output
-5.4
-4990444779.0

Hint
请注意该题目的内存限制
 

Author
linle
 

Source
2007暑期集训队练习赛(2)
 

Recommend
lcy

 

 

#include<iostream>
#include
<math.h>
using namespace std;
 
double c1=-4990454799.0,c2=-4990454799.0,c3=-4990454799.0;
void swap(double& a,double&b)
{
    
double tem=a;
    a
=b;
    b
=tem;
}


void sort(double &a)//保存最大的三个数
{
    
if(a>c1)
    
{
        c1
=a;
        
//保证c1最小
        if(c3<c1)
            swap(c3,c1);
        
if(c2<c1)
            swap(c2,c1);
    }


}


int main()
{
    cout.setf(ios::
fixed);
    cout.precision(
1);
    
int A,B,temp;
    
while(cin>>A>>B)
    
{
          c1
=-4990454799.0,c2=-4990454799.0,c3=-4990454799.0;
        
if(A>B)
        
{
            temp
=A;
            A
=B;
            B
=temp;
        }

        
double f,sum=0;
        
for(int i=A;i<=B;i++)
        
{
            f
=log(double(i)/10.1)/log(3.0)-sin(double(i))-double(i)/100;
            sort(f);
            sum
+=f;
        }

        sum
=sum-c1-c2-c3;
         
if (fabs(sum)<0.044444445)
                cout
<<0.0<<endl; 
              
else cout<<sum<<endl; 


    }

}


 

PS:这个题使我们重创不小,这么简单的题竟然做了N长时间。改进了3次,WA了N次终于提交成功了!

1、c1,c2,c3要在每次输入时进行初始(这次是加了个函数,没有注意~~)

2、找出最大的三个数,我只想出了这样一种方法(sort( )),找不到好的方法,如有,请留言告诉我,谢谢~

3、注意内存限制

抱歉!评论已关闭.