我和她的月亮的距离

【题目描述】

“一如既往的熙攘的树影,熟悉的嫩绿的街町。周围仿佛是凝固的纯静的时间,不停地流溢着澹澹的温婉的芬芳。一只午睡的小猫,一缕清凉的微风。如果我向往回家的路,那么,我是个引力浪漫主义者吗?

我把自行车停好。春日的阳光透过枝稍,让我想起她每天恬恬的微笑。但是今天,咦,艾莉欧呢?我知道,她向往遥远的星球,她一定是去了,那可以仰望夜幕的城市的海边。在一片朦胧的夜灯里,我能否辨识出,她,孤独的身影。”

“艾莉欧直盯着我的双眸,就连眼瞳颜色都像经过外星加工般深邃。她的眼睛泛着雪亮的光泽,透明澄澈,宛如与掺杂溶剂的饮料无法相容的水。”

艾莉欧第i秒就会发送信号强度为sin(i)的电波。

现已知连续N个信号的叠加强度P,询问艾利欧从第一次收到信号起,已经离去多长时间。

【输入描述】

第一行输入一个整数N,表示收集到N次信号;

第二行输入一个实数P,精确到小数点后18位,表示正弦信号的累加值。

【输出描述】

输出一个正整数T,表示答案。

【输入样例】

3

0.29361493957762066612412557420803

【输出样例】

2

【数据范围及提示】

样例可由sin(2)+sin(3)+sin(4)满足。

对于10%的数据,n ≤ 160;

对于30%的数据,n ≤ 2010;

对于60%的数据,n ≤ 20110414;

对于100%的数据,1 ≤ n ≤ 2011062220120208,T∈[1,67]。

源代码:

#include<cmath>
#include<iostream>
using namespace std;
int Ans;
long long N;
long double P,T=1e9;
int main()
{
    cin>>N>>P; //cin()的威力!
    for (int a=1;a<=67;a++)
    {
        double S,t;
        S=(cos(a-0.5)-cos(a+N-0.5))/sin(0.5)/2;
        t=abs(S-P);
        if (t<T) //巧妙的精度误差避免法。
        {
            Ans=a;
            T=t;
        }
    }
    cout<<Ans;
    return 0;
}

/*
    超神的学弟!
    2sin(0.5)sin(n)=cos(n-0.5)-cos(n+0.5)
    sin(n)=[cos(n-0.5)-cos(n+0.5)]/[2sin(0.5)]
    sin(1)+sin(2)+...+sin(n)=[cos(0.5)-cos(n+0.5)]/[2sin(0.5)]
    sin(T)+sin(T+1)+...+sin(T+N-1)=[cos(T+0.5)-cos(T+N-0.5)]/[2sin(0.5)]
    暴力枚举即可。
*/
原文地址:https://www.cnblogs.com/Ackermann/p/6055026.html