数字牌替换小游戏
时间限制: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即可
这道题没读懂,求大佬解答。