Codeforces Round #444 (Div. 2)

icpc后的第一场cf,6000+人,似乎是个涨粉的好机会,然而时间段确实比较坑,昨晚凌晨3点,有点尴尬


这场其实完全就是手速场了,三道签到题,还是交题之前一定要谨慎啊,细节决定成败


1.5h做完后,实在太困了,剩余1h直接睡觉了,要不然开启hack模式,似乎会比较有趣


看看这三题吧


A. Div. 64

思路:这题真心纯签到啊,统计非前导0的个数,不小于6则yes,小于则no


#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 110;

char num[maxn];

int main()
{
    while(scanf("%s",num)!=EOF)
    {
        int len = strlen(num);
        bool st = false;
        int sum = 0;
        for(int i=0;i<len;i++)
        {
            if(num[i]=='1')
            {
                st = true;
            }
            else
            {
                if(st)
                {
                    sum++;
                }
            }
        }
        if(sum >= 6)
        {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }
    return 0;
}


B. Cubes for Masha

思路:这题,统计所有可能的数组合,思路一定要清晰啊,位数问题与前导0,这场考了很多前导0问题,而纯暴力似乎有的时候也挺奏效

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 1e5+10;

bool cube[3][10];
bool num[1000];

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(cube,false,sizeof(cube));
        memset(num,false,sizeof(num));
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<6;j++)
            {
                int temp;
                scanf("%d",&temp);
                cube[i][temp] = true;
            }
        }
        if(n==1)
        {
            for(int i=0;i<10;i++)
            {
                if(cube[0][i])
                {
                    num[i] = true;
                }
            }
        }
        else if(n==2)
        {
            for(int j=0;j<2;j++)
            {
                for(int i=0;i<10;i++)
                {
                    if(cube[j][i])
                    {
                        num[i] = true;
                    }
                }
            }
            for(int j=0;j<10;j++)
            {
                for(int k=0;k<10;k++)
                {
                    if(cube[0][j]&&cube[1][k])
                    {
                        num[j+k*10] = true;
                        num[k+j*10] = true;
                    }
                }
            }
        }
        else
        {
            for(int i=0;i<3;i++)
            {
                for(int j=0;j<10;j++)
                {
                    if(cube[i][j])
                    {
                        num[j] = true;
                    }
                }
                for(int j=0;j<10;j++)
                {
                    for(int k=0;k<10;k++)
                    {
                        if(cube[(i+1)%3][j]&&cube[(i+2)%3][k])
                        {
                            num[j+k*10] = true;
                            num[k+j*10] = true;
                        }
                    }
                }
            }
            for(int i=0;i<10;i++)
            {
                for(int j=0;j<10;j++)
                {
                    for(int k=0;k<10;k++)
                    {
                        if(cube[0][i]&&cube[1][j]&&cube[2][k])
                        {
                            num[i+j*10+k*100] = true;
                            num[i+k*10+j*100] = true;
                            num[j+i*10+k*100] = true;
                            num[j+k*10+i*100] = true;
                            num[k+i*10+j*100] = true;
                            num[k+j*10+i*100] = true;
                        }
                    }
                }
            }
        }
        int re;
        for(re=1;re<1000;re++)
        {
            if(!num[re])
            {
                break;
            }
        }
        printf("%d\n",re-1);
    }
    return 0;
}


C. Solution for Cube

思路:转二元魔方问题,由于这题情况很清晰,直接强行开暴力,至于交题之前一定要检查一发,由于太紧张,代码还没写完就慌忙交题,一发wa送给自己

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 1e5+10;

int cube[30];
int col[6];

int main()
{
    while(scanf("%d",&cube[1])!=EOF)
    {
        bool make = false;
        col[0] = cube[1];
        for(int i=2;i<=24;i++)
        {
            scanf("%d",&cube[i]);
            if(i%4==1)
            {
                col[(i-1)/4] = cube[i];
            }
            else
            {
                if(cube[i] != col[(i-1)/4])
                {
                    col[(i-1)/4] = -1;
                }
            }
        }
        if(col[0]>0&&col[2]>0)
        {
            if(  cube[15]==cube[16]
               &&cube[16]==cube[ 5]
               &&cube[ 5]==cube[ 6]
               &&cube[ 7]==cube[ 8]
               &&cube[ 8]==cube[17]
               &&cube[17]==cube[18]
               &&cube[19]==cube[20]
               &&cube[20]==cube[21]
               &&cube[21]==cube[22]
               &&cube[23]==cube[24]
               &&cube[24]==cube[13]
               &&cube[13]==cube[14])
            {
                make = true;
            }
            if(  cube[15]==cube[16]
               &&cube[16]==cube[21]
               &&cube[ 5]==cube[ 6]
               &&cube[ 7]==cube[ 8]
               &&cube[ 8]==cube[13]
               &&cube[17]==cube[18]
               &&cube[19]==cube[20]
               &&cube[20]==cube[ 5]
               &&cube[21]==cube[22]
               &&cube[23]==cube[24]
               &&cube[24]==cube[17]
               &&cube[13]==cube[14])
            {
                make = true;
            }
        }
        else if(col[1]>0&&col[5]>0)
        {
            if(  cube[ 3]==cube[ 4]
               &&cube[ 4]==cube[18]
               &&cube[18]==cube[20]
               &&cube[17]==cube[19]
               &&cube[19]==cube[11]
               &&cube[11]==cube[12]
               &&cube[ 9]==cube[10]
               &&cube[10]==cube[13]
               &&cube[13]==cube[15]
               &&cube[14]==cube[16]
               &&cube[16]==cube[ 1]
               &&cube[ 1]==cube[ 2])
            {
                make = true;
            }
            if(  cube[ 3]==cube[ 4]
               &&cube[ 4]==cube[15]
               &&cube[18]==cube[20]
               &&cube[17]==cube[19]
               &&cube[19]==cube[ 1]
               &&cube[11]==cube[12]
               &&cube[ 9]==cube[10]
               &&cube[10]==cube[18]
               &&cube[13]==cube[15]
               &&cube[14]==cube[16]
               &&cube[16]==cube[11]
               &&cube[ 1]==cube[ 2])
            {
                make = true;
            }
        }
        else if(col[3]>0&&col[4]>0)
        {
            if(  cube[ 1]==cube[ 3]
               &&cube[ 3]==cube[21]
               &&cube[ 6]==cube[ 8]
               &&cube[ 5]==cube[ 7]
               &&cube[ 7]==cube[ 2]
               &&cube[10]==cube[12]
               &&cube[ 9]==cube[11]
               &&cube[11]==cube[ 6]
               &&cube[21]==cube[23]
               &&cube[22]==cube[24]
               &&cube[24]==cube[10]
               &&cube[ 2]==cube[ 4])
            {
                make = true;
            }
            if(  cube[ 1]==cube[ 3]
               &&cube[ 3]==cube[ 6]
               &&cube[ 6]==cube[ 8]
               &&cube[ 5]==cube[ 7]
               &&cube[ 7]==cube[10]
               &&cube[10]==cube[12]
               &&cube[ 9]==cube[11]
               &&cube[11]==cube[21]
               &&cube[21]==cube[23]
               &&cube[22]==cube[24]
               &&cube[24]==cube[ 2]
               &&cube[ 2]==cube[ 4])
            {
                make = true;
            }
        }
        if(make)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}

暴力场,排名还算挺可观的,等等看排名的变化吧

第二天——unranted


文章地址:http://blog.csdn.net/owen_q/article/details/78443433


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值