关注
我事后想了一下,double被卡精度应该是过程中加到了一个比较大的数,double用了很多位去表示整数部分。办法就是利用一个long long去模拟,由于没有负数还可以是unsigned的,等于完整利用上了64位精度。具体操作就是在每次加上去前 *N,N是一个合适的较大值,最后再除掉,这样模拟了一个固定阶数的小数。代码放在下面,没有仔细调输出,并且也不能保证能ac,毕竟我没办法再测试了。另一种思路就是每次都将整数部分提取出来放到一个int里,这样double可以完整保留小数部分的精度。
#include<bits/stdc++.h>
using namespace std;
unsigned long long N=10000000000;
unsigned long long M=N/10000;
int main()
{
int n=10000;
unsigned long long sum=0;
if(n==1){
printf("1.0000\n");
return 0;
}
for(int i=1; i<=n-1; i++){
int j=n-i;
if(abs(i-j)<2){
sum = sum + N*max(i,j);
}else{
sum = sum + N*min(i,j);
int k=abs(i-j);
unsigned long long temp=0;
for(int t=1; t<=k-1; t++){
temp = temp + N*max(t, k-t);
}
sum = sum + temp/(k-1);
}
}
unsigned long long res = sum/(n-1);
double ret = res/N + res%N/M;
if(res%N/M==0) printf("%.4lf\n", ret);
else printf("%d.%d\n", res/N, res%N/M);
}
查看原帖
2 5
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客吐槽大会 #
25821次浏览 324人参与
# 工作前VS工作后,你的心态变化 #
38579次浏览 267人参与
# 秋招想进国企该如何准备 #
125513次浏览 617人参与
# 你的mentor是什么样的人? #
51657次浏览 741人参与
# 从mentor身上学到了__ #
55686次浏览 886人参与
# 我和mentor的爱恨情仇 #
106757次浏览 969人参与
# 我的省钱小妙招 #
37637次浏览 446人参与
# 机械人避雷的岗位/公司 #
44964次浏览 320人参与
# 在大厂上班是一种什么样的体验 #
15459次浏览 225人参与
# 为了减少AI幻觉,你注入过哪些设定? #
7874次浏览 217人参与
# 职场上哪些行为很加分? #
323267次浏览 3619人参与
# 通信/硬件求职避坑tips #
140048次浏览 1087人参与
# 论秋招对个人心气的改变 #
16456次浏览 251人参与
# 你觉得mentor喜欢什么样的实习生 #
48801次浏览 1002人参与
# 你现在会用到哪些AI技能? #
24872次浏览 137人参与
# 牛客AI体验站 #
9579次浏览 230人参与
# 毕业论文进行时 #
27747次浏览 153人参与
# 运营来爆料 #
77497次浏览 467人参与
# 程序员找工作至少要刷多少题? #
24635次浏览 316人参与
# 过年最难忘的一件事 #
23374次浏览 179人参与
查看8道真题和解析