• Codeforces Round #340 (Div. 2)


    Codeforces Round #340 (Div. 2)

    1月24日

    A. Elephant

    题意:略.

    思路:略.

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int n;
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            int k=n/10;
            k*=2;
            if(n%10 > 5)
                printf("%d
    ",k+2);
            else if(n%10<=5 && n%10 >0)
                printf("%d
    ",k+1);
            else
                printf("%d
    ",k);
        }
        return 0;
    }
    

    B. Chocolate

    题意:0代表没有坚果,1代表有一个坚果。要求分割开之后每一块巧克力上面至少有一块坚果。

    思路:每两个'1'直接有n个'0'的,共有n+1种分法,然后每两个'1'直接的分法直接相乘就是正确答案。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int n;
    int a[105];
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            int flag=0;
            ll k=0;
            ll ans=1;
            for(int i=1; i<=n; i++)
            {
                scanf("%d",&a[i]);
                if(a[i]==0 && flag)
                {
                    k++;
                }
                if(a[i]==1 && !flag)
                {
                    k=0;
                    flag=1;
                }
                else if(a[i]==1 && flag)
                {
                    ans=ans*(k+1);
                    k=0;
                }
                //printf("k=%I64d ans=%I64d flag=%d
    ",k,ans,flag);
            }
            if(!flag)
                printf("0
    ");
            else
                printf("%I64d
    ",ans);
        }
        return 0;
    }
    

    C. Watering Flowers

    题意:有两个喷泉,喷洒的半径分别为r1,r2.r12+r22,最小的情况下覆盖所有的花.

    思路:用一个结构体分别保存每朵花到两个喷泉的距离,然后按照到一个喷泉的距离,从小到大排序。暴力循环一下找到最小值就是答案。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    #define inf 0x3f3f3f3f3f3f3f3f
    int n;
    LL x11,y11;
    LL x22,y22;
    struct node
    {
        LL r1;
        LL r2;
    };
    node a[2100];
    bool cmp(node aa,node bb)
    {
        if(aa.r1==bb.r1) return aa.r2<bb.r2;
        else return aa.r1<bb.r1;
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            LL  x,y;
            scanf("%I64d%I64d%I64d%I64d",&x11,&y11,&x22,&y22);
            a[0].r1=0;
            a[0].r2=0;
            for(int i=1; i<=n; i++)
            {
                scanf("%I64d%I64d",&x,&y);
                a[i].r1=(x-x11)*(x-x11)+(y-y11)*(y-y11);
                a[i].r2=(x-x22)*(x-x22)+(y-y22)*(y-y22);
            }
            a[n+1].r1=0;
            a[n+1].r2=0;
            a[n+2].r1=0;
            a[n+2].r2=0;
            sort(a+1,a+n+1,cmp);
            LL ans=inf;
            LL sum1=0;
            for(int i=0; i<=n; i++)
            {
                sum1=a[i+1].r2;
                for(int j=i+2; j<=n; j++)
                {
                    sum1=max(a[j].r2,sum1);
                }
                ans=min(ans,a[i].r1+sum1);
                //printf("%I64d %I64d
    ",ans,a[i].r1+sum1);
            }
            printf("%I64d
    ",ans);
        }
        return 0;
    }
    

    D. Polyline

    题意:略.

    思路:直接按照情况写就好了.

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    struct node
    {
        LL x;
        LL y;
    };
    node a[5];
    LL x[5],y[5];
    bool cmp(node aa,node bb)
    {
        if(aa.x==bb.x) return aa.y<bb.y;
        else return aa.x<bb.x;
    }
    int main()
    {
        while(scanf("%I64d %I64d %I64d %I64d %I64d %I64d",&a[0].x,&a[0].y,&a[1].x,&a[1].y,&a[2].x,&a[2].y)!=EOF)
        {
           // cout << endl;
            sort(a,a+3,cmp);
            //for(int i=0; i<3; i++)
              //  printf("%I64d %I64d
    ",a[i].x,a[i].y);
    
            if((a[0].x==a[1].x && a[1].x==a[2].x ) || (a[0].y==a[1].y && a[1].y==a[2].y))
                printf("1
    ");
            else if(a[0].x==a[1].x && (a[2].y<=a[0].y || a[2].y>=a[1].y))
                printf("2
    ");
            else if(a[1].x==a[2].x && (a[0].y<=a[1].y || a[0].y>=a[2].y))
                printf("2
    ");
            else if(a[0].y==a[1].y && a[2].x>=a[1].x)
                printf("2
    ");
            else if(a[1].y==a[2].y && a[0].x<=a[1].x)
                printf("2
    ");
            else
                printf("3
    ");
        }
        return 0;
    }
  • 相关阅读:
    SQl语句学习笔记(二)
    Adaboost 算法
    降维PCA技术
    scanf 格式化字符串详解
    大小端模式和位域详解(转载)
    推荐系统开源软件列表汇总和点评(转载)
    遗传算法入门(转载)
    大白话解析模拟退火算法(转载)
    机器学习相关——协同过滤(转载)
    python面向对象之单例模式
  • 原文地址:https://www.cnblogs.com/zzulipomelo/p/5158533.html
Copyright © 2020-2023  润新知