4363: 丢手绢

来源:互联网 发布:大数据 金融行业 编辑:程序博客网 时间:2024/06/10 03:44

丢手绢,又叫丢手帕,我国传统的民间儿童游戏。开始前,准备几块手绢,然后大家推选一个丢手绢的人,其余的人围成一个大圆圈蹲下。
游戏开始,被推选为丢手绢的人沿着圆圈外行走。丢手绢的人要不知不觉地将手绢丢在其中一人的身后。被丢了手绢的人要迅速发现自己
身后的手绢,然后迅速起身追逐丢手绢的人,丢手绢的人沿着圆圈奔跑,跑到被丢手绢人的位置时蹲下,如被抓住,则要表演一个节目,
可表演跳舞、歌谣、讲故事等。
Lyf老师碰到一个难题:现在有n个学生围成一圈丢手绢,他们等间距的分布在圆周上,圆的周长为1000,现在有1个学生出局,剩下的人
要移动位置重新等间距分布,问他们最少需要移动多少距离。Lyf老师脑子有点糊涂,现在这个难题交给你了。

Input

多组测试,每组输入n,1<=n<=1000000000。

Output

对于每组输入,四舍五入输出最少移动距离。

Sample Input

235

Sample Output

0167200
解:设少一个人距离差为x 那么 

3--2  1x

4---3  (1 +1 )x 

5---4 ( 1+2+1 ) x 

6--5  ( 1+2+2+1)x  

7---6   (1+2+3+2+1)x

.........

#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<map>#include<vector>#include<queue>#include<stack>#define eps 1e-8#define ll long longconst int INF = 0x3f3f3f3f;const long long mod=1e9+7;const int N=105;using namespace std;int main(){    ll n,ans;    while(~scanf("%lld",&n))    {        if(n<=2)        {            printf("0\n");            continue;        }        if(n>=2000)        {            printf("250\n");            continue;        }        ll a=(n-2)/2;        ll b=(n-1)/2;        if(b>a)           ans=b*b;        else           ans=b*(b+1);        double k1=1000.0/((n-1)*1.0);        double k2=1000.0/(n*1.0);        double kk=k1-k2;        double mm=kk*(double)ans;        mm+=0.500;        printf("%lld\n",(ll)mm);    }}


原创粉丝点击