4363: 丢手绢

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

Input

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

Output

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

Sample Input

2
3
5

Sample Output

0
167
200
解:设少一个人距离差为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 long
const 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);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值