您的位置:首页 > 其它

Codeforces Round #199 (Div. 2) (ABC)

2013-09-07 19:25 337 查看
A:

#include<stdio.h>
#include<string.h>

#define N 100010
int a
,y
,x
,z
;
int n;
int vis[8];

int main()
{
    while(~scanf("%d",&n))
    {
        int num=0;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]),vis[a[i]]++;
        }
        if(vis[3]!=0)
        {
            if(vis[3]<=vis[1]&&vis[3]<=vis[6])
            {
                vis[1]-=vis[3],vis[6]-=vis[3];
                for(int i=0;i<vis[3];i++)
                {
                    x[num]=1,y[num]=3,z[num++]=6;
                }
                vis[3]=0;
            }
        }
        if(vis[4])
        {
            if(vis[4]<=vis[1]&&vis[4]<=vis[2])
            {
                vis[1]-=vis[4],vis[2]-=vis[4];
                for(int i=0;i<vis[4];i++)
                {
                    x[num]=1,y[num]=2,z[num++]=4;
                }
                vis[4]=0;
            }
        }
        if(vis[6])
        {
            if(vis[6]<=vis[1]&&vis[6]<=vis[2])
            {
                vis[1]-=vis[6],vis[2]-=vis[6];
                for(int i=0;i<vis[6];i++)
                {
                    x[num]=1,y[num]=2,z[num++]=6;
                }
                vis[6]=0;
            }
        }
        int tag=vis[1]+vis[2]+vis[3]+vis[4]+vis[5]+vis[6]+vis[7];
        if(tag||num*3!=n) printf("-1\n");
        else 
        {
            for(int i=0;i<num;i++)
                printf("%d %d %d\n",x[i],y[i],z[i]);
        }
    }
}


B: 不要往反方向走

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

int n,m,s,f;
struct node
{
    int a,b,c;
}q[100001];
string ans;

int main()
{
    char tag;
    ans="";
    scanf("%d%d%d%d",&n,&m,&s,&f);
    tag=(s<f?'R':'L');
    for(int i=0;i<m;i++)
        scanf("%d%d%d",&q[i].a,&q[i].b,&q[i].c);
    int t=1,l=0;
    while(1)
    {
        if(t!=q[l].a)
        {
            t++;
            if(s<f)
            {
 
                {
                    s++;
                    ans+=tag;
                }
            }
            else
            {
                {
                    s--;
                    ans+=tag;
                }
 
            }
        }
        else 
        {
            t++;
            if(s<f)
            {
                if(s+1>=q[l].b&&s<=q[l].c)
                {
                    
                    ans+='X';
                }
                else s++,ans+=tag;
            }
            else
            {
                if(s>=q[l].b&&s<=q[l].c+1)
                {
                    
                    ans+='X';
                }
                else s--,ans+=tag;
            }
            l++;
        }
        if(s==f) break;
    }
    cout<<ans<<endl;
}


C:

首先对于最下面的一个长方体 h/r*2

然后可能剩下一个长方体和半球的空间(1 或者 2或者3)

#include<stdio.h>
#include<math.h>
int r,h;
int main()
{
    while(~scanf("%d%d",&r,&h))
    {
        int ans=h/r*2;

        h=h-h/r*r;
        if(h*2<r) ans++;
        else if((h*2.0)>=(sqrt(3)*r)) ans+=3;
        else ans+=2;

        printf("%d\n",ans);
    }
    return 0;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: