小y的考试

小y的考试

https://ac.nowcoder.com/acm/contest/7780/A

题目描述

众所周知,小y是一个 “1+1” 都能回答错误的小可爱。因为这个,她没
少吃Z老师的头槌。
今天,Z老师来了场测验。小y看着卷子,一头雾水,什么都不会啊。
怎么办呢?幸好都是选择题。小y心想:“坊间传说,三长一短选最短,
三短一长选最长,参差不齐就选 C。我不如就这么试一试,兴许能少吃 9 下头
槌呢。”
可是,题目好多啊,题目好长啊,小y数都数不过来了 (“1 道,2 道,9道,9 道,9 道... 诶?刚刚数到几了?”),于是就请聪明的你来帮她选出答案啦。
注意,由于 “三长一短” 排在 “三短一长” 之前,所以优先判断是否满足 “三
长一短”,再判断是否满足 “三短一长”。当且仅当最短选项唯一时满足 “三长一
短”;同理,当且仅当最长选项唯一时满足 “三短一长”。其余情况都算作 “参差
不齐”。

方法一:

题目分析:首先我们要注意一下优先级的判断,先判断是否满足三长一短,然后是三短一长,其余都是参差不齐,我们可以先用两个变量去记录一下四个字符串中最长的和最短的长度是多少,然后再去遍历一下字符串,找出有多少个字符串的长度大于最短,有多少个字符串的长度小于最长,然后需要记录一下最短的长度的字符串的编号,然后还有最长的字符串的编号,最后再根据优先级判断一下属于哪一类就行。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int inf = 0x3f3f3f3f;

struct node
{
    string s;
    int len;
} w[maxn];
int a[maxn];
int main()
{
    int n;
    scanf("%d", &n);
    getchar();
    while (n--)
    {
        int minn = inf, maxx = 0;
        for (int i = 1; i <= 4; ++i)
        {
            cin >> w[i].s;
            w[i].len = w[i].s.size();
            maxx = max(maxx, w[i].len);
            minn = min(minn, w[i].len);
        }
        int cnt = 0, cnt1 = 0, flag = 0, flag1 = 0;
        for (int i = 1; i <= 4; ++i)
        {
            if (w[i].len > minn)
                ++cnt;
            if (w[i].len < maxx)
                ++cnt1;
            if (w[i].len == minn)
                flag = i;
            if (w[i].len == maxx)
                flag1 = i;
        }
        if (cnt == 3)
            printf("%c\n", 'A' + flag - 1);
        else if (cnt1 == 3)
            printf("%c\n", 'A' + flag1 - 1);
        else
           printf("C\n");
    }
}

方法二:

附上大佬的题解,虽然思路差不多,但还是有参考价值的~

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10, INF = 0x3f3f3f3f;
char a[N];
int s[4];
int ss[4];
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        for (int i = 0; i < 4; i++)
        {
            scanf("%s", a);
            ss[i] = s[i] = strlen(a);
        }
        sort(s, s + 4);
        if (s[0] != s[1])
        {
            for (int i = 0; i < 4; i++)
            {
                if (ss[i] == s[0])
                {
                    printf("%c\n", 'A' + i);
                    break;
                }
            }
            continue;
        }
        else if (s[3] != s[2])
        {
            for (int i = 0; i < 4; i++)
            {
                if (ss[i] == s[3])
                {
                    printf("%c\n", 'A' + i);
                    break;
                }
            }
            continue;
        }
        else
            printf("C\n");
    }
    return 0;
}
牛客比赛系列题解 文章被收录于专栏

加油加油

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:58
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:31
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务