N8.18
This commit is contained in:
parent
9e1a6289e8
commit
7e74c42a6e
|
@ -46,7 +46,7 @@ int main()
|
|||
{
|
||||
ans+=(1.0/i);
|
||||
}
|
||||
printf("Case %d: %.10llf\n",++t1,ans);
|
||||
printf("Case %d: %.10lf\n",++t1,ans);//WA罪魁祸首 lf->double 不是llf
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
//调和级数近似公式:f(n)=ln(n)+r+1.0/(2*n)
|
||||
//r是欧拉常数
|
||||
//注意:此公式只适用于n很大的情况。
|
||||
#include<cstdio>
|
||||
#include<algorithm>
|
||||
#include <cmath>
|
||||
using namespace std;
|
||||
#define r 0.57721566490153286060651209//欧拉常数
|
||||
const int N=1e8;
|
||||
const int w=1e4;
|
||||
double a[w+5];
|
||||
int t,n;
|
||||
int t1;
|
||||
double ans;
|
||||
inline void cun()
|
||||
{
|
||||
for(int i=1;i<=w;i++)
|
||||
{
|
||||
a[i]=a[i-1]+(1.0/i);
|
||||
}
|
||||
}
|
||||
int main()
|
||||
{
|
||||
cun();
|
||||
scanf("%d",&t);
|
||||
while(t--)
|
||||
{
|
||||
scanf("%d",&n);
|
||||
if(n<=w)
|
||||
{
|
||||
printf("Case %d: %.10lf\n",++t1,a[n]);//lf->double 不是llf
|
||||
}
|
||||
else
|
||||
{
|
||||
ans=log(n)+r+1.0/(2*n);//cmath 中log就是ln
|
||||
printf("Case %d: %.10lf\n",++t1,ans);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
#include<cstdio>
|
||||
#include<cstring>
|
||||
#include<algorithm>
|
||||
using namespace std;
|
||||
|
||||
double a[2500050];
|
||||
|
||||
void init()
|
||||
{
|
||||
double sum=0.0;
|
||||
for(int i=1; i<100000001; i++)
|
||||
{
|
||||
sum+=1.0/i;
|
||||
if(i%50==0) a[i/50]=sum; //每隔49个记录一次。
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
init();
|
||||
int t,flag=1;
|
||||
scanf("%d",&t);
|
||||
while(t--)
|
||||
{
|
||||
int n;
|
||||
scanf("%d",&n);
|
||||
int f=n/50;
|
||||
double ans=a[f];
|
||||
for(int i=50*f+1; i<=n; i++) //很明显循环在50以内
|
||||
ans+=1.0/i;
|
||||
printf("Case %d: %.10lf\n",flag++,ans);
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#include<iostream>
|
||||
#include<cstdio>
|
||||
using namespace std;
|
||||
|
||||
const int N=1e6+5;
|
||||
const int size=100;
|
||||
|
||||
double hn[N];
|
||||
|
||||
void gethn(){
|
||||
int i,j,k;
|
||||
double temp;
|
||||
hn[0]=0;
|
||||
temp=0;
|
||||
k=1;
|
||||
for(i=1;i<=N;i++){
|
||||
for(j=1;j<=size;j++){
|
||||
temp+=(1.0)/k;
|
||||
k++;
|
||||
}
|
||||
hn[i]=temp;
|
||||
}
|
||||
}
|
||||
|
||||
double readhn(int x){
|
||||
double ans;
|
||||
int c=x%size;
|
||||
ans=hn[x/size];
|
||||
for(int i=x-c+1;i<=x;i++) ans+=1.0/i;
|
||||
return ans;
|
||||
}
|
||||
|
||||
int main(){
|
||||
gethn();
|
||||
int i,t,n;
|
||||
scanf("%d",&t);
|
||||
for(i=1;i<=t;i++){
|
||||
scanf("%d",&n);
|
||||
printf("Case %d: %.10lf\n",i,readhn(n));
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<algorithm>
|
||||
#include<math.h>
|
||||
#define r 0.57721566490153286060651209//Å·À³£Êý
|
||||
using namespace std;
|
||||
double a[10010];
|
||||
int main()
|
||||
{
|
||||
a[1]=1.0;
|
||||
for(int i=2; i<10000; i++)
|
||||
a[i]=a[i-1]+1.0/i;
|
||||
int t;
|
||||
scanf("%d",&t);
|
||||
int o=1;
|
||||
while(t--)
|
||||
{
|
||||
int n;
|
||||
double res=0.0;
|
||||
scanf("%d",&n);
|
||||
if(n<10000)
|
||||
{
|
||||
printf("Case %d: ",o++);
|
||||
printf("%.10lf\n",a[n]);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Case %d: ",o++);
|
||||
double t=log(n)+r+1.0/(2*n);
|
||||
printf("%.10lf\n",t);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -1,12 +1,20 @@
|
|||
# 题目
|
||||
* 链接
|
||||
# N - Harmonic Number
|
||||
* https://vjudge.net/contest/509210#problem/N
|
||||
### 题意
|
||||
|
||||
### 做法
|
||||
|
||||
h(n)=1/1+1/2+……+1/n;n<=1e8
|
||||
### 做法(2种)
|
||||
对应两个代码
|
||||
1.分层打表:每50/100个记录一次,查的时候再接着算
|
||||
2.调和级数近似公式:前1e4打表,后面的调和级数近似公式(因为此公式只适用于n很大的情况)
|
||||
### 关键词
|
||||
|
||||
基础数论、调和级数近似公式、分层打表、欧拉常数
|
||||
### 易错点
|
||||
*
|
||||
* //lf->double 不是llf
|
||||
* //cmath 中log就是ln
|
||||
* 直接用int/long long扩大倍数打表
|
||||
### 工具箱
|
||||
*
|
||||
* doubl&%lf https://blog.csdn.net/weixin_46585199/article/details/119044763
|
||||
* 调和级数近似公式:f(n)=ln(n)+r+1.0/(2*n),r是欧拉常数
|
||||
//注意:此公式只适用于n很大的情况。
|
||||
* #define r 0.57721566490153286060651209//欧拉常数
|
||||
|
||||
|
|
Loading…
Reference in New Issue