zoukankan      html  css  js  c++  java
  • 2017CCPC Final (哈尔滨)

    Time:

    Link


    A

    分析

     ym:czh推了个公式,答案是n-1,没加Case wa了一发,我来背锅了


    B

    题意

    分析


    C

    分析

    ym:简单的博弈游戏,大家一起玩一玩就清楚套路了


    D

    题意

    分析


    E

    分析

    签到,简单的模拟


    F

    题意

    分析


    G

    题意

     给出一些区间,让你选k个区间,使其覆盖的点最多

    分析

     czh:定义dp[i][j] :前i个点,选择j个区间的最大值。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    #define ll long long
    
    const int maxn = 2005;
    
    int t[maxn],dp[maxn][maxn];
    int main()
    {
        int T;
        cin>>T;
        for(int cn=1;cn<=T;cn++)
        {
            int ans=0;
            int n,m,k;
            scanf("%d %d %d",&n,&m,&k);
            for(int i=0;i<=n;i++)
            {
                for(int j=0;j<=k;j++)dp[i][j]=0;
                t[i]=0;
            }
            for(int i=1;i<=m;i++)
            {
                int x,y;
                scanf("%d %d",&x,&y);
                for(int j=x;j<=y;j++)
                {
                    t[j]=max(t[j],y);
                }
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=k;j++)
                {
                    if(t[i])
                        dp[t[i]][j]=max(dp[t[i]][j],dp[i-1][j-1]+t[i]-i+1);
                    dp[i][j]=max(dp[i][j],dp[i-1][j]);
                }
            }
            for(int i=1;i<=n;i++)
                for(int j=1;j<=k;j++)
                    ans=max(ans,dp[i][j]);
             cout<<"Case #"<<cn<<": ";
            cout<<ans<<endl;
        }
        return 0;
    }
    

      


    H

    题意

    分析


    I

    题意

    分析


    J

    题意

    分析

    czh: 一道简单的差分约束题

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    using namespace std;
    const int maxn=2005;
    int f[maxn],w[maxn*3],to[maxn*3],nex[maxn*3];
    bool vis[maxn];
    int out[maxn],cnt=0,dis[maxn],n,m,k;
    void add(int a,int b,int c)
    {
        cnt++;
        w[cnt]=c;
        to[cnt]=b;
        nex[cnt]=f[a];
        f[a]=cnt;
    }
    bool spfa()
    {
        for(int i=1; i<maxn; i++)dis[i]=-1,vis[i]=0,out[i]=0;
        queue<int>que;
        que.push(1);
        vis[1]=1;
        dis[1]=0;
        while(que.size())
        {
          //  for(int i=1;i<=n;i++)printf(" %d",dis[i]);cout<<endl;
            int x=que.front();
          //  cout<<x<<"out"<<endl;
            vis[x]=0;
            que.pop();
            out[x]++;
            if(out[x]>n)
                return false;
            for(int i=f[x]; i; i=nex[i])
            {
              //  cout<<to[i]<<"to"<<endl;
                if(dis[x]+w[i]>dis[to[i]])
                {
                    dis[to[i]]=dis[x]+w[i];
                    if(vis[to[i]]==0)
                    {
                        que.push(to[i]);
                        vis[to[i]]=1;
                    }
                }
            }
        }
        return true;
    }
    int main()
    {
        int T;
        cin>>T;
        for(int cn=1; cn<=T; cn++)
        {
            cnt=0;
            scanf("%d %d %d",&n,&m,&k);
            for(int i=1; i<maxn; i++)f[i]=0;
            for(int i=2; i<=n; i++)
                add(i-1,i,1);
            for(int i=1; i<=m; i++)
            {
                int a,b,c,d;
                scanf("%d %d %d %d",&a,&b,&c,&d);
                if(a==b&&c==d)
                {
                    add(b,c,k);
                    add(c,b,-k);
                }
                else
                {
                    add(c,b,1-k);
                    add(a,d,k+1);
                }
            }
            if(spfa())
            {
                printf("Case #%d:",cn);
                for(int i=2;i<=n;i++)
                    printf(" %d",dis[i]-dis[i-1]);
                cout<<endl;
            }
            else
                printf("Case #%d: IMPOSSIBLE
    ",cn);
        }
        return 0;
    }
    

      


    K

    分析

    ym:差分打表,会发现差分结果差21,推出一个多项式,但要用高精度, 但Java不熟悉耽误了半天时间


    Summary:

    ym:没加Case 贡献一发罚时,x,y搞反了贡献一发罚时,震惊,ym贡献了全队2/3的罚时

    czh:

    hxx: 

  • 相关阅读:
    with open 向文件的某一固定行,追加内容
    静态语言 与 动态语言 的区别
    ELK
    matplotlib绘图
    django用户认证
    django+uwsgi+nginx 部署生产环境
    图片验证码+session
    ajax
    form
    middleware中间件
  • 原文地址:https://www.cnblogs.com/Deadline/p/9649467.html
Copyright © 2011-2022 走看看