• codeforces 813


    A

    n 道题目  然后n到题目完成所需要的时间

    m

    然后m 个可以交题目的时间  一个时间可以交任意个完成的题目 

    求 最少提交的时间

    求最小时间就可以了

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<stdlib.h>
    #include<set>
    #include<iterator>
    #include<iostream>
    #include<math.h>
    #include<queue>
    #include<vector>
    
    using namespace std;
    
    #define ll long long
    #define inf 1000000007
    #define MAXN 1010
    
    struct node
    {
        int l,r;
    }z[MAXN];
    
    int main()
    {
        int n;
        int sum=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int a;
            scanf("%d",&a);
            sum=sum+a;
        }
        int m;
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&z[i].l,&z[i].r);
            if(z[i].l<=sum&&sum<=z[i].r)
            {
                 printf("%d
    ",sum);
                 return 0;
            }
            else if(z[i].l>sum)
            {
                printf("%d
    ",z[i].l);
                return 0;
            }
        }
        printf("-1
    ");
        return 0;
    }
    View Code

    B

    n =x^a+y^b

    给你  x y  l r

    问 l ~r  里最长连续的段  数都不能被表示出来

    x,y >=2

    log 级别  求出所有可能的数 然后n^2 求出l ~ r 里的数 没有就是都好的 

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<stdlib.h>
    #include<set>
    #include<iterator>
    #include<iostream>
    #include<math.h>
    #include<queue>
    #include<vector>
    
    using namespace std;
    
    #define ll __int64
    #define inf 1000000007
    #define MAXN 110100
    
    ll z[MAXN];
    ll a[100];
    ll b[100];
    
    int main()
    {
        ll x,y,l,r;
        scanf("%I64d%I64d%I64d%I64d",&x,&y,&l,&r);
        ll mx=0;
        a[0]=1;
        b[0]=1;
        int cn1,cn2;
        cn1=cn2=1;
        ll d=r;
    
        for(int i=1;;i++)
        {
            ll c=d/x;
            if(c>0)
            {
                a[cn1]=a[cn1-1]*x;
                d=d/x;
                cn1++;
            }
            else
            {
                break;
            }
        }
        d=r;
        for(int i=1;;i++)
        {
            ll c=d/y;
            if(c>0)
            {
                b[cn2]=b[cn2-1]*y;
                d=d/y;
                cn2++;
            }
            else
            {
                break;
            }
        }
        int cnt=0;
        for(int i=0;i<cn1;i++)
        {
            for(int j=0;j<cn2;j++)
            {
                if((a[i]+b[j])>=l&&(a[i]+b[j])<=r)
                {
                  //  printf("%lld
    ",a[i]+b[j]);
                    z[cnt++]=a[i]+b[j];
                }
            }
        }
        sort(z,z+cnt);
       // for(int i=0;i<cnt;i++)
       //     printf("%lld ",z[i]);
       // printf("
    ");
        if(cnt>0)
        {
             if(z[0]-l>mx)
                mx=z[0]-l;
            if(r-z[cnt-1]>mx)
                mx=r-z[cnt-1];
            for(int i=1;i<cnt;i++)
                mx=max(mx,z[i]-z[i-1]-1);
        }
        else
            mx=r-l+1;
        printf("%I64d
    ",mx);
        return 0;
    }
    View Code

    C

    n 个 点 你在m

    然后n-1 条边

    1 是根  求 1追到你 所需要最少时间 

    dis1[u]>dis2[u]   mx=max(mx,dis1[u]*2)

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<string>
    #include<stdlib.h>
    #include<set>
    #include<iterator>
    #include<iostream>
    #include<math.h>
    #include<queue>
    #include<vector>
    
    using namespace std;
    
    #define ll __int64
    #define inf 1000000007
    #define MAXN 210100
    
    int dis1[MAXN],dis2[MAXN];
    
    struct node
    {
        int u,v,next;
    }edge[MAXN*2];
    int head[MAXN];
    int cnt;
    void add(int u,int v)
    {
        edge[cnt].u=u;
        edge[cnt].v=v;
        edge[cnt].next=head[u];
        head[u]=cnt++;
    }
    void dfs1(int u,int fa)
    {
        for(int i=head[u];i!=-1;i=edge[i].next)
        {
            int v=edge[i].v;
            if(v==fa)
                continue;
            dis1[v]=dis1[u]+1;
            dfs1(v,u);
        }
    }
    
    void dfs2(int u,int fa)
    {
        for(int i=head[u];i!=-1;i=edge[i].next)
        {
            int v=edge[i].v;
            if(v==fa)
                continue;
            dis2[v]=dis2[u]+1;
            dfs2(v,u);
        }
    }
    
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        memset(head,-1,sizeof(head));
        cnt=0;
        for(int i=1;i<n;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            add(a,b);
            add(b,a);
        }
        dfs1(1,-1);
        dfs2(m,-1);
        int mx=0;
        for(int i=1;i<=n;i++)
            if(dis2[i]<dis1[i])
                mx=max(mx,dis1[i]*2);
        printf("%d
    ",mx);
        return 0;
    }
    View Code
  • 相关阅读:
    Linux_C smsh1
    ACM&排序问题,操作符重载
    ACM&找双亲,并查集
    struct dirent/DIR
    关于win8如何查找出当前的密钥
    php之留言板
    php之include&require
    工作中的问题 和 所用到的知识点
    jQuery.extend 和 jQuery.fn.extend
    JavaScript 字符串函数 之查找字符方法(一)
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6953065.html
Copyright © 2020-2023  润新知