CF #738(div2)A. Mocha and Math(贪心)
Posted 小哈里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF #738(div2)A. Mocha and Math(贪心)相关的知识,希望对你有一定的参考价值。
problem
A. Mocha and Math
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Mocha is a young girl from high school. She has learned so much interesting knowledge from her teachers, especially her math teacher. Recently, Mocha is learning about binary system and very interested in bitwise operation.
This day, Mocha got a sequence a of length n. In each operation, she can select an arbitrary interval [l,r] and for all values i (0≤i≤r−l), replace al+i with al+i&ar−i at the same time, where & denotes the bitwise AND operation. This operation can be performed any number of times.
For example, if n=5, the array is [a1,a2,a3,a4,a5], and Mocha selects the interval [2,5], then the new array is [a1,a2&a5,a3&a4,a4&a3,a5&a2].
Now Mocha wants to minimize the maximum value in the sequence. As her best friend, can you help her to get the answer?
Input
Each test contains multiple test cases.
The first line contains a single integer t (1≤t≤100) — the number of test cases. Each test case consists of two lines.
The first line of each test case contains a single integer n (1≤n≤100) — the length of the sequence.
The second line of each test case contains n integers a1,a2,…,an (0≤ai≤109).
Output
For each test case, print one integer — the minimal value of the maximum value in the sequence.
Example
inputCopy
4
2
1 2
3
1 1 3
4
3 11 3 7
5
11 7 15 3 7
outputCopy
0
1
3
3
Note
In the first test case, Mocha can choose the interval [1,2], then the sequence becomes [0,0], where the first element is 1&2, and the second element is 2&1.
In the second test case, Mocha can choose the interval [1,3], then the sequence becomes [1,1,1], where the first element is 1&3, the second element is 1&1, and the third element is 3&1.
A. 摩卡和数学
每次测试的时间限制1秒
每个测试的内存限制 256 兆字节
输入标准输入
输出标准输出
摩卡是个高中女生。她从她的老师那里学到了很多有趣的知识,尤其是她的数学老师。最近,Mocha正在学习二进制系统,对按位运算很感兴趣。
这一天,Mocha 得到了一个长度为 n 的序列 a。在每次操作中,她可以选择一个任意的区间[l,r],对于所有值i(0≤i≤r−l),同时用al+i&ar−i替换al+i,其中&表示按位AND 运算。此操作可以执行任意次。
比如n=5,数组为[a1,a2,a3,a4,a5],mocha选择区间[2,5],则新数组为[a1,a2&a5,a3&a4,a4&a3,a5&a2] .
现在摩卡想要最小化序列中的最大值。作为她最好的朋友,你能帮她找到答案吗?
输入
每个测试包含多个测试用例。
第一行包含一个整数 t (1≤t≤100)——测试用例的数量。每个测试用例由两行组成。
每个测试用例的第一行包含一个整数 n (1≤n≤100)——序列的长度。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an (0≤ai≤109)。
输出
对于每个测试用例,打印一个整数——序列中最大值的最小值。
例子
输入副本
4
2
1 2
3
1 1 3
4
3 11 3 7
5
11 7 15 3 7
输出副本
0
1
3
3
笔记
在第一个测试用例中,Mocha可以选择区间[1,2],那么序列就变成了[0,0],其中第一个元素是1&2,第二个元素是2&1。
在第二个测试用例中,Mocha可以选择区间[1,3],那么序列就变成了[1,1,1],其中第一个元素是1&3,第二个元素是1&1,第三个元素是3&1。
solution
我们假设答案是 X. 在其二进制表示中,一位将是1 只有在所有的 ai的二进制表示,这一位是 1. 否则,我们可以使用一个操作来使这一位X 变成 0,这是一个较小的答案。
所以我们可以设置 x =一种1最初。然后我们遍历序列并使x = x &ai, 这 X 是最后的答案。
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
int main(){
int T; cin>>T;
while(T--){
int n; cin>>n;
int x; cin>>x;
for(int i = 2; i <= n; i++){
int t; cin>>t; x=x&t;
}
cout<<x<<"\\n";
}
return 0;
}
以上是关于CF #738(div2)A. Mocha and Math(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
CF #738(div2)B. Mocha and Red and Blue(构造)
CF #738(div2)D2. Mocha and Diana (Hard Version)(贪心,并查集)
CF #738(div2)D1. Mocha and Diana (Easy Version)(暴力,并查集)
CF #737(div2)A. Ezzat and Two Subsequences,贪心