您的位置:首页 > 其它

Codeforces Round #404 (Div. 2) C(数学)(精度)

2017-03-22 13:31 295 查看
题目链接

题目解答:显然,这是一道数学题。先考虑特殊情况,n<=m时,显然为第n天。当n>m时,经过计算可得,答案为ans = ceil((sqrt(8 * (n - m) + 1) - 1) / 2);
但是直接计算会有精度误差。所以我的解决办法是先将计算出来的结果减去100,再用一个whlie循环一个一个的加,并判断当前结果是否满足原始的算式。(微调结果))
PS: long double 好像不能用printf输出,还是用cout吧!
PPS:判断一个double变量是否为nan的方法:if(f != f) 。。。(nan默认的所有等于运算均为不等,所以可以通过与自身比较判断是否为nan)
代码如下;
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
long double n,m;
cin >> n >> m;
if(n <= m) {cout << setprecision(0) << fixed << n << endl;return 0;
long double ans = ceil((sqrt(8 * (n - m) + 1) - 1) / 2);
if(ans > 100) ans-=100;
while(ans * (ans + 1) < 2 * (n - m))  ans++;
ans += m;
cout << setprecision(0) << fixed << ans << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM codeforces 数学