Codeforces Beta Round #4 (Div. 2 Only)

A题,水题,准1Y,第一次CE了。。CF里,CE没有罚时。。

B题,直接模拟。。

#include <cstdio>

#include <string>

#include <cstring>

#include <cmath>

#include <cstdlib>

#include <ctime>

#include <queue>

#include <vector>

#include <algorithm>

#include <iostream>

using namespace std;

int minz[31],maxz[31],ans[31];

int main()

{

    int d,sum,i,temp;

    scanf("%d%d",&d,&sum);

    temp = 0;

    for(i = 0; i < d; i ++)

    {

        scanf("%d%d",&minz[i],&maxz[i]);

        ans[i] = minz[i];

        temp += minz[i];

    }

    if(temp > sum)

        printf("NO\n");

    else

    {

        for(i = 0; i < d; i ++)

        {

            if(temp == sum) break;

            if(sum - temp > maxz[i]-minz[i])

            {

                ans[i] = maxz[i];

                temp += maxz[i] - minz[i];

            }

            else

            {

                ans[i] += sum - temp;

                temp = sum;

            }

        }

        if(temp < sum)

            printf("NO\n");

        else

        {

            printf("YES\n");

            for(i = 0; i < d; i ++)

                printf("%d ",ans[i]);

        }

    }

    return 0;

}
View Code

C题,1Y.不能再水。。

D题,无聊排序DP。2Y,我不能忍。。

#include <cstdio>

#include <string>

#include <cstring>

#include <cmath>

#include <cstdlib>

#include <ctime>

#include <queue>

#include <vector>

#include <map>

#include <algorithm>

#include <iostream>

using namespace std;

struct node

{

    int w,h,id;

}p[5100];

int flag[5100];

int n;

int cmp(node a,node b)

{

    if(a.w == b.w)

    return a.h > b.h;

    else

    return a.w > b.w;

}

int dp[5100];

void dfs(int x)

{

    int i;

    if(dp[x] == 1) return ;

    for(i = 0;i < x;i ++)

    {

        if(p[i].w > p[x].w&&p[i].h > p[x].h&&dp[i]+1 == dp[x])

        {

            printf("%d ",p[i].id);

            dfs(i);

            break;

        }

    }

}

int main()

{

    int i,maxz,j;

    scanf("%d",&n);

    for(i = 0;i <= n;i ++)

    {

        scanf("%d%d",&p[i].w,&p[i].h);

        p[i].id = i;

    }

    sort(p,p+n+1,cmp);

    for(i = 0;i <= n;i ++)

    {

        maxz = 0;

        for(j = 0;j < i;j ++)

        {

            if(p[j].w > p[i].w&&p[j].h > p[i].h)

            maxz = max(maxz,dp[j]);

        }

        dp[i] = maxz + 1;

    }

    for(i = 0;i <= n;i ++)

    {

        if(p[i].id == 0)

        {

            printf("%d\n",dp[i]-1);

            dfs(i);

            break;

        }

    }

    return 0;

}
View Code

 

你可能感兴趣的:(codeforces)