• codeforces --- Round #250 (Div. 2) A. The Child and Homework


    <传送门>

    这题就是一个坑,尼玛wa了一大片啊。

    自己被hack了,比赛结束后改了又wa两次才过。

    【题目大意】

    其实就是一个猜题小技巧(联系自己初中考试的时候怎么猜题的,这题就好理解多了)。
    这位同学是这样来选答案的:
    1.如果有一些选项长度至少比其他所有的描述短两倍,或至少超过所有其他的描述的两倍,那么孩子认为这个选择很可能是正确的。
    2.如果正好满足以上其中一种条件(重点),这个同学就会选择它,否则就选C.
    给你一个选择题,让你选择出这个同学将会选择的答案。

    【题目分析】

    首先,这个题目就是一个模拟,模拟本身不难,想一下就有思路了,但是只怪很多人都没看清题目,只怪审题不仔细啊。

    题目里面有句话是很关键的:If there is exactly one great choice then the child chooses it.

    也就是说,如果两个条件都满足的话,这位同学就不知道哪个的正确概率大,所以他又转过来选C。

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    //    freopen("cin.txt","r",stdin);
        int i,j;
        int len[5];
        char str[4][200];
        for(i=0;i<4;i++)
        {
            scanf("%s",str[i]);
            len[i]=strlen(str[i])-2;
        }
        int Find1=0,mark1;
        for(i=0;i<4;i++)
        {
            if(len[i]*6<=(len[(i+1)%4]+len[(i+2)%4]+len[(i+3)%4]))   //找到了有可能符合条件的选项
            {
                Find1=1;
                mark1=i;
    //            cout<<"if-1"<<endl;
                for(j=0;j<4;j++)    //继续判断
                {
                    if(j!=i)
                    {
                        if(len[i]*2>len[j])
                        {
                            Find1=2;  //不符合
                            break;
                        }
                    }
                }
                if(Find1==1)  //判断一遍后任然成立,那就说明这个选项符合
                    break;
            }
        }
        int Find2=0,mark2;
        for(i=0;i<4;i++)
        {
           if(len[i]*6>=(len[(i+1)%4]+len[(i+2)%4]+len[(i+3)%4]))   //找到了有可能符合条件的选项
            {
                Find2=1;
                mark2=i;
    //            cout<<"if-2"<<endl;
                for(j=0;j<4;j++)    //继续判断
                {
                    if(j!=i)
                    {
                        if(len[i]<len[j]*2)
                        {
                            Find2=2;  //不符合
                            break;
                        }
                    }
                }
                if(Find2==1)  //判断一遍后任然成立,那就说明这个选项符合
                    break;
            }
        }
    //    cout<<"mark="<<mark<<endl;
        if(Find1==1&&Find2==1)
        {
            printf("C
    ");
            return 0;
        }
        if(Find1==1)
            printf("%c
    ",mark1+'A');
        else if(Find2==1)
            printf("%c
    ",mark2+'A');
        else
            printf("C
    ");
        return 0;
    }
    View Code
  • 相关阅读:
    B树、B树、B+树、B*树
    CSS黑客技术的实现
    ORM映射框架总结SQL 语句生成组件
    突然发现 ViewState,Linq 水火不容
    ALinq 入门学习(一)ALinq简介
    Google 地图基本接口(一)
    ORM映射框架总结映射桥梁
    ALinq 入门学习(二)DataContext
    ORM映射框架总结数据库操作库(精修版)
    C# 使用线程你可能不知道的问题
  • 原文地址:https://www.cnblogs.com/crazyacking/p/3764863.html
Copyright © 2020-2023  润新知