zoukankan      html  css  js  c++  java
  • Uva 3708 Graveyard

    题意:在周长为10000的圆上等距分布着n个雕塑。现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周上均匀分布。

    这就需要移动其中一些原有的雕塑。要求n个雕塑移动的距离最小。

    (2<=n<=1000,1<=m<=1000)

    题解:这道题,可以发现可以先固定一个位置为不动点,这样所有雕塑的最终位置就已经确定,然后依次循环寻找出原位置以及最终位置,

    然后将原位置的每个雕塑移动到最近的新的位置。

    这是就会有一个歧义,会不会有两个重叠的雕塑移动到同一个位置呢?答案是不会的,因为,是均匀分布,也就是说刚开始的间隔绝对比新的间隔大

    若两个移动到同一个位置,就说明刚开始的间隔比新的间隔小,与已知不符,所以不可能,所以可以放心大胆,模拟即可。

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<iostream>
    #include<cstring>
    #include<string>
    
    using namespace std;
    const int MAXN=2007;
    
    int n,m;
    
    double min(double a,double b)
    {
        return a>b?b:a;
    }
    int main()
    {
        while (~scanf("%d%d",&n,&m))
        {
            double ans=0;
            double a[MAXN],b[MAXN];
            
            a[1]=0;
            for (int i=1;i<n;i++)
                a[i]=(double)10000*1.0/n*i;
            
            b[1]=0;
            for (int i=1;i<m+n;i++)
                b[i]=(double)10000*1.0/(n+m)*i;
            
            int i=1,j=1;
            while (i<n&&j<m+n)
            {
                if (b[j+1]<a[i]) j++;
                else 
                {
                    ans+=min(abs(a[i]-b[j]),abs(b[j+1]-a[i]));
                    i++,j++;
                }
            }        
            printf("%.4f
    ",ans);
        }
    }
  • 相关阅读:
    【Codeforces 933A】A Twisty Movement
    【Codeforces 996B】World Cup
    【Codeforces 469B】Chat Online
    鼠标点击后的CSS3跑马灯效果
    CSS的相对定位和绝对定位
    CSS3制作的一款按钮特效
    单元测试小结
    JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法
    jquery的load方法
    MVC视图特性
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/6985231.html
Copyright © 2011-2022 走看看