Codeforces Beta Round #76 (Div. 1 Only)

无聊和欧阳一起比赛。。。 

才发现差距是巨大的, 欧阳的思维+编程的速度比我快了3倍左右。 也就是一般的题 我a了一题, 他就可以a 3题。 

加油吧, 菜鸟。

a. 题意是简单的,但是情况稍微一点多。。。 注意这些情况就可以了

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;


int main()
{
    int x,y;
    int x1,y1,x2,y2;
    int n,m,a,b;
    scanf("%d%d%d%d",&n,&m,&a,&b);
    x=(a-1)/m;
    y=(a-1)%m+1;

    x1=(b-1)/m;
    y1=(b-1)%m+1;
    
    x2=(n-1)/m;
    y2=(n-1)%m+1;
    if(x==x1) printf("1");
    else
    {
        if(b==n) 
        {
            if(y==1) printf("1");
            else printf("2");
            return 0;
        }
        if(y==1)
        {
            if(b==n)
            {
                printf("1");
                return 0;
            }
            if(y1==m) printf("1");
            else printf("2");
            return 0;
        }
        if(y1==m)
        {
            printf("2");
            return 0;
        }
        if(y==y1+1)
        {
            printf("2");
        }
        else 
        {
            if(x==x1-1) printf("2");
            else 
            {
                if(b==n)
                {
                    if(y>y1) printf("3");
                    else printf("2");
                }
                else
                    printf("3");
            }
        }
    }
    return 0;
}

 

b. 一开始就被坑了, 以为是用网络流做的题(用网络比较难做),后面发现基本的贪心就可以解决, 从第一瓶开始倒,每次都尽量倒完,如果有一瓶需要倒到3或3个以上的杯子,则说明无解...

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

struct node
{
    int id;
    double w;
};

node g[55][55];
double h[55];

int main()
{
    double n,w;
    int m;
    scanf("%lf%lf%d",&n,&w,&m);
    for(int i=1;i<=n;i++)
        h[i]=w;
    memset(g,0,sizeof(g));
    double tmp;
    tmp=(n*w)/(double)m;
    int cnt=1;
    int flag=0;
    for(int i=1;i<=m;i++)
    {
        if(flag>=2)
        {
            printf("NO");
            return 0;
        }
        double sum=0;
        int tcnt=0;
        while( h[cnt]+sum < tmp-0.000001)
        {
            sum += h[cnt];
            g[i][tcnt].id=cnt;
            g[i][tcnt].w=h[cnt];
            cnt++;
            flag=0;
            tcnt++;
        }
        if( h[cnt]+sum >= tmp -0.0000001&&h[cnt]+sum<=tmp+0.0000001)
        {
            g[i][tcnt].id=cnt;
            g[i][tcnt].w=h[cnt];
            flag=0;
            cnt++;
        }
        else
        {
            g[i][tcnt].id = cnt;
            g[i][tcnt].w = tmp-sum;
            h[cnt] -= tmp-sum;
            flag++;
        }
    }
    printf("YES\n");
    for(int i=1;i<=m;i++)
    {
        int j=0;
        while(g[i][j].id!=0)
        {
            printf("%d %.6lf ",g[i][j].id,g[i][j].w);
            j++;
        }
        printf("\n");
    }
    return 0;
}

 

posted @ 2013-03-17 17:05  chenhuan001  阅读(213)  评论(0编辑  收藏  举报