A-Vlad and Candies
题目
题意
Vlad收到一包糖果,里面有N种糖果,他决定每次只吃一种糖果,选择目前数量最多的一种糖果(如果有几种相同数量的糖果,可以选择任何一种),Vlad不想连续吃两颗同类型的糖果,帮助他计算是否可以在不连续吃两个相同的糖果的情况下吃掉所有的糖果。
思路
首先判断是否只存在一种糖果:
如果是,若只有一颗,则Vlad可以吃掉所有的糖果;若超过一颗,则Vlad只能一直吃相同的糖果;
若存在多种糖果,则判断最多数量的糖果和第二个最多数量的糖果的差值是否大于1,如果大于1,则Vlad会连续吃上相同的糖果,如果小于等于1,则Vlad可以在不连续吃两个相同的糖果的情况下吃掉所有的糖果
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
int t;
cin >> t;
int a[t];
for (int i = 0; i < t; i++)
cin >> a[i];
if (t == 1) {
if (a[0] == 1)
cout << "YES" << endl;
else cout << "NO" << endl;
} else {
sort(a, a + t);
if (a[t - 1] - a[t - 2] > 1)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
}
}
B-Get an Even String
题目
题意
字符串A满足以下条件:长度n是偶数;对于奇数i,满足a[i]=a[i+1]。
给定一个字符串,需要删除多少个字符才能使其变成字符串A
思路
找出相同的字符,然后将相同字符中间的字符删除,统计有多少个相同的字符,然后用长度减去相同字符的数量就是要删除的字符数量
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
string s;
cin >> s;
int count = 0;
for (int i = 0; i < s.size(); i++) {
map<int, int> mp;
for (int j = i; j < s.size(); j++) {
mp[s[j]]++;
if (mp[s[j]] == 2) {
count += 2;
i = j;//跳过相同字符中间的需删除的字符
break;
}
}
}
cout << s.size() - count << endl;
}
return 0;
}