| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Rounded to one decimal place竟然不是让四舍五入。。!!!!!!!!附代码首先,这个题实在恶心。。。。
time不用double过不去(想要我们考虑精度干嘛不直接搞高精度却来搞expression中subexpression的implict conversion的边界的边界的边界的边界的边界的边界的边界的..)
另外,rounded to one decimal place之round居然不是指的四舍五入。。(holy shit..)
WA了3次找了半天BUG最后绝望的把代码中临近输出前的四舍五入部分注释掉居然AC了。。。。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<double> queries;
class cSubstance
{
public:
cSubstance( int type, double time, double n )
: _type( type ), _time( time ), _n( n )
{}
~cSubstance()
{}
double getEffect( double t )
{
if( t < _time )
return 0;
double ret = 0;
if( _type == 1 )
ret = 8.0*_n-(t-_time)/12.0;
else
ret = 2.0*_n-(t-_time)*(t-_time)/79.0;
if( ret < 0 )
ret = 0;
return ret;
}
double _time;
double _n;
int _type;
};
cSubstance *subs[100];
int nsubs;
int main()
{
char buff[255];
while( cin.getline( buff, 255 ) )
{
if( buff[0] == 'Q' )
{
double time;
sscanf( buff+5, "%lf", &time );
queries.push_back( time );
continue;
}
char stype[25];
double time;
double n;
sscanf( buff, "%s %lf %lf", stype, &time, &n );
subs[ nsubs++ ] = new cSubstance( (string( "Coffee" ) == stype ? 0 : 1 ),
time, n );
}
sort( queries.begin(), queries.end() );
for( int i=0; i<queries.size(); i++ )
{
double total = 0;
for( int j=0; j<nsubs; j++ )
total += subs[j]->getEffect( queries[i] );
if( total < 1 )
total = 1;
/*
total *= 10;
if( int(total + 0.5) != int( total ) )
total += 1;
total /= 10;
*/
printf( "%d %.1f\n", int(queries[i]), total );
}
for( int i=0; i<nsubs; i++ )
delete subs[i];
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator