2018大疆创新B卷

数字牌替换小游戏
时间限制:C / C++语言 1000MS;其他语言 3000MS
内存限制:C / C++语言 65536KB;其他语言 589824KB
题目描述:
Tom最近很闲,所以发明了一个小游戏。给出一个数字m(m < 10521),有三个数字牌,可以用一张牌替换随意一种数字,一张扑克牌只能用一次,现在要求求出替换后的最大值(可以选择不用数字牌)。
输入
有n组数据,先输入n。随后每组数据输入m(m < 10521)和三个数字牌
输出
替换后的最大数字

样例输入
2
9001
0
1
2
9301
0
1
2
样例输出
9221
9321

注意仔细读题,题目是替换的是一种数字,而不是一个数字。!!!

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
        int n;
        cin >> n;
        vector<vector<int> > pend(n, vector<int>(3, 0));
        vector<string> nums(n, string());
        for (int i = 0; i < n; i++)
        {
                cin >> nums[i];
                for (int j = 0; j < 3; j++)
                {
                        cin >> pend[i][j];
                }
                sort(pend[i].begin(), pend[i].end());

                int k = 2;
                for (int j = 0; j < nums[i].length() && k >= 0; j++)
                {
                        if (nums[i][j] < pend[i][k] + '0')
                        {
                                char temp = nums[i][j];
                                nums[i][j] = pend[i][k] + '0';
                                int m = j;
                                while(++m < nums[i].length())
                                {
                                    if(nums[i][m] == temp)
                                        nums[i][m] = pend[i][k]+'0';
                                }
                                                                k--;
                        }
                }
        }

        for (int i = 0; i < n; i++)
        {
                cout << nums[i] << endl;
        }
        return 0;
}

满足要求的连续子序列个数
时间限制:C / C++语言 1000MS;其他语言 3000MS
内存限制:C / C++语言 65536KB;其他语言 589824KB
题目描述:
给出n个数字(n <= 100000,数字范围为[0, 100000]),要求找出序列中有多少个连续子序列满足以下要求:子序列中任意一个数字出现次数小于k
输入
第一行输入n(n < 100000)和k(k < 100000)
然后输入n个数字(范围为[0, 100000])
输出
满足要求的连续子序列个数

样例输入
4 1
1 2 2 3
样例输出
6

Hint
对于1 2 2 3序列,满足要求的子序列区间为[1, 1][2, 2][3, 3][4, 4][1, 2][3, 4]

这道题目又容易读错题目!!!
看来大疆不招人
这个下标是从1开始的,[3,4]就是下标从3~4之间的闭区域的集合,也就是题目中的集合{2,3}。这也就是为什么会有3,4出现的原因。

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

int main()
 {
    int n, k;
    cin >> n >> k;

    if (n < 1 || k < 1) 
    {
        cout << 0 << endl;
        return 0;
    }

    vector<int> nums(n, 0);
    {
        cin >> nums[i];
    }

    int count = 0;
    for (int i = 0; i < nums.size(); i++) 
    {
        unordered_map<int, int> umap;
        umap[nums[i]] += 1;
        for (int j = i + 1; j < nums.size(); j++)
        {
            count++;
            umap[nums[j]] += 1;
            if (umap[nums[j]] > k)
             {
                count--;
                break;
            }
        }
    }

    cout << count + nums.size() << endl;

    return 0;
}

字符串最大
时间限制:C / C++语言 1000MS;其他语言 3000MS
内存限制:C / C++语言 65536KB;其他语言 589824KB
题目描述:
给出一个字符串(len <= 500,字符范围为a ~j),可以用数字0~9替换字符串中的字符,要求一个数字对应一种字符,不能重复使用字符,求出替换后的最大值。
但是Tom觉得这样太简单了,所以他决定给出n个字符串(len <= 500,字符范围为a ~j),对于每个字符串Si,都需要找出一种数字替换方式一次性替换全部字符串,
在这个替换方式下,当前字符串Si代表的数字比其他的都大,如果不存在这种替换方式,输出”no”,否则输出“yes”
输入
第一行输入n(n <= 500)
随后输入n个字符串(len <= 500,字符范围为a ~j),用空行隔开
输出
对每个字符串Si如果存在一种替换方式一次性替换掉所有字符串并且让替换后的Si最大,输出”yes”,否则输出”no”

样例输入
2
a
ba
样例输出
no
yes

Hint
对于a想大于ba,ba最小的情况为b为0,0a = a,不存在满足要求的替换方案
对于ba想大于a,b不为0即可

这道题没读懂,求大佬解答。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值