前言
蒟蒻又来发题解了,今天感觉没有水题 又是哭哭唧唧写题的一天啊QAQ
A.Mocha and Math
题目的大致意思:利用&(与运算符)对给定数字序列中的任意两个数进行操作,求指定任意区间所得结果的最大值的最小值。(实质上是求所有元素按照二进制来看的相同位置上都是1的位数进行统计后取得最小值)
题解:
#include<iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int x;
cin >> x;//序列中的第一个数
for(int i = 0; i < n - 1; i++)
{
int y;
cin >> y;
x &=y;//并不是每一次都是将后一个的位数直接覆盖到前面,而是将两者位数进行比较之后取得相等位数取最小值(x=x&y)
}
cout << x << endl;
}
return 0;
}
B. Mocha and Red and Blue
题目的大致意思:将给定的一串字符进行红蓝涂色,相邻位置尽量不涂相同颜色,所有字符都要涂色,已经涂过颜色的字符颜色不能更改。最后要求输出涂色相邻位置颜色不同的组数最大的一种涂色方法。
解题思路:先将字符串从前往后遍历,根据已经给出的有颜色的字符依次填充与之相邻的空处,然后从后向前遍历,填充未能填充的部分(比如从前往后遍历的时候未能涂色的开头一个字母,或者从开头往后都是没有颜色的连续字符串),最后不要忘掉如果给定的字符串都未进行涂色的情况要单独涂色,看自己想怎么涂交替进行就可以啦!
***也不用担心相邻两个涂色部分中间直接进行循环涂色会达不到题目想要的答案,题目中间需要涂色的情况无非一以下几种:***
第一种:两头是相同颜色,中间是奇数个数需要涂色
R???R
根据解题思路进行涂色:
RBRBR