• Codeforces Round #352 (Div. 2)


    A题有点水,但是花了10分钟才a掉,把%10的先加一,处理成字符串再减一

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=5000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s="";
        for(int i=1;i<1000;i++)
        {
            string t="";
            int p=i;
            if(p%10==0)p+=1;
            while(p)
            {
                t+=(char)(p%10+'0');
                p/=10;
            }
            reverse(t.begin(),t.end());
            if(i%10==0)t[t.size()-1]='0';
            s+=t;
        }
    
        int n;
        cin>>n;
        cout<<s[n-1]<<endl;
        return 0;
    }
    /********************
    
    ********************/
    A

    B题长度大于26就不行,其他的就全处理成不同字符就行了

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=5000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    bool vis[30];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s;
        int n;
        cin>>n>>s;
        if(s.size()>26)cout<<-1<<endl;
        else
        {
            memset(vis,0,sizeof vis);
            int ans=0;
            for(int i=0;i<s.size();i++)
                if(!vis[s[i]-'a'])
                {
                    ans++;
                    vis[s[i]-'a']=1;
                }
            cout<<s.size()-ans<<endl;
        }
        return 0;
    }
    /********************
    
    ********************/
    B

    C题,一开始的思路是对的,但是没有考虑到只有一个人捡垃圾的情况,就是找最大的能节省的路程(垃圾桶到垃圾的距离-人到垃圾桶的距离)(分别枚举一下a,b)

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    double x[N],y[N];
    double dis(double x1,double y1,double x2,double y2)
    {
        return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout<<setiosflags(ios::fixed)<<setprecision(12);
        double ax,ay,bx,by,tx,ty;
        cin>>ax>>ay>>bx>>by>>tx>>ty;
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
        if(n==1)
        {
            double ans=min(dis(x[1],y[1],ax,ay),dis(x[1],y[1],bx,by));
            cout<<ans+dis(x[1],y[1],tx,ty)<<endl;
            return 0;
        }
        double max1=-2e9,max2=-2e9;
        int id1=0,id2=0;
        for(int i=1;i<=n;i++)
        {
            double te=dis(x[i],y[i],tx,ty)-dis(x[i],y[i],ax,ay);
            if(te>max1)
            {
                max1=te;
                id1=i;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(i==id1)continue;
            double te=dis(x[i],y[i],tx,ty)-dis(x[i],y[i],bx,by);
            if(te>max2)
            {
                max2=te;
                id2=i;
            }
        }
        double p=max(max1+max2,max(max1,max2));
        max1=max2=-2e9;
        id1=id2=0;
        for(int i=1;i<=n;i++)
        {
            double te=dis(x[i],y[i],tx,ty)-dis(x[i],y[i],bx,by);
            if(te>max1)
            {
                max1=te;
                id1=i;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(i==id1)continue;
            double te=dis(x[i],y[i],tx,ty)-dis(x[i],y[i],ax,ay);
            if(te>max2)
            {
                max2=te;
                id2=i;
            }
        }
        p=max(p,max(max1+max2,max(max1,max2)));
        double ans=0;
        for(int i=1;i<=n;i++)ans+=2*dis(x[i],y[i],tx,ty);
        cout<<ans-p<<endl;
        return 0;
    }
    /********************
    1
    ********************/
    C

    D题,思路完全不对啊,想去二分差值,但是处理太麻烦了,正解是二分完成后的最大值,最小值

    注意处理上下界的问题,先求平均数,如果平均数是整数,那么上下界都是它,否则,下界应该是平均数+1

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=500000+10,maxn=500+100,inf=0x3f3f3f;
    
    ll c[N],n,k,te[N];
    bool ok1(ll x)
    {
        ll ans=0;
        for(int i=1;i<=n;i++)
            if(c[i]<x)
               ans+=x-c[i];
        return ans<=k;
    }
    bool ok2(ll x)
    {
        ll ans=0;
        for(int i=1;i<=n;i++)
            if(c[i]>x)
               ans+=c[i]-x;
        return ans<=k;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>k;
        ll sum=0;
        for(int i=1;i<=n;i++)
        {
            cin>>c[i];
            sum+=c[i];
        }
        ll R,L;
        if(sum%n==0)L=R=sum/n;
        else L=sum/n,R=sum/n+1;
        sort(c+1,c+1+n);
        ll l=0,r=L+1;
        while(l<r-1)
        {
            ll m=(l+r)/2;
            if(ok1(m))l=m;
            else r=m;
        }
        ll ans1=l;
        l=R-1,r=1e9;
        while(l<r-1)
        {
            ll m=(l+r)/2;
            if(ok2(m))r=m;
            else l=m;
        }
        cout<<r-ans1<<endl;
        return 0;
    }
    /*********************
    
    *********************/
    D
  • 相关阅读:
    开始学习编写用于 Windows SideShow 设备的小工具【转】
    Windows Mobile 6.5 Developer Tool Kit 下载
    Microsoft Security Essentials 微软免费杀毒软件下载
    SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (2)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (4)
    负载测试、压力测试和性能测试的异同
    Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例
    Silverlight Tools 安装失败 解决办法
    SQL Server 2008 空间数据库 空间索引概念及创建(取自帮助)
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7381231.html
Copyright © 2020-2023  润新知