• 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
  • 相关阅读:
    dayfunctools.weps 定义函数装饰器
    python3之concurrent.futures一个多线程多进程的直接对接模块,python3.2有线程池了
    python的类的super()
    django的admin
    python的单例模式
    git指南
    django创建验证码
    Django model对象接口
    Go语言基础
    迭代器&迭代对象&生成器
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7381231.html
Copyright © 2020-2023  润新知