***********************Idea: BledDest, preparation: BledDest***********************************
原链接:Codeforces Round #760 (Div. 3) Editorial - Codeforces
本题思路:
情况一:奇数位都整除d,偶数位都不整除d.
》》》 找到奇数位最大公约数gcd,且偶数位都不可以整除gcd
情况二:奇数位都不整除d,偶数位都整除d.
》》》 找到偶数位最大公约数gcd,且奇数位都不可以整除gcd
技巧:
1)找多个数字的最大公约数gcd.
>>> for(i=0; i<n;i++) x = __gcd(x, a[i])
2)找到奇偶数位的最大公约数
>>>
b[0] = a[0]; b[1] = a[1];
for(i=0; i<n;i++) b[i%2] = __gcd(b[i%2], a[i])
3)!非 和 ^异或的应用
>>>
b[!(i%2)] 非奇(非偶)
b[i%2^1] 非奇(非偶)
题目(谷歌翻译)C. 绘制数组
每个测试的时间限制2秒
每个测试的内存限制 256 兆字节
输入标准输入
输出标准输出
给定一个由 n 个正整数组成的数组 a。您必须选择一个正整数 d 并将所有元素绘制成两种颜色。所有可被 d 整除的元素都将被涂成红色,而所有其他元素将被涂成蓝色。
如果数组中不存在具有相同颜色的相邻元素对,则着色称为漂亮。你的任务是找到任何能产生漂亮颜色的 d 值,或者报告这是不可能的。
输入
第一行包含一个整数 t (1≤t≤1000)——测试用例的数量。
每个测试用例的第一行包含一个整数 n (2≤n≤100)——数组元素的数量。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an (1≤ai≤1018)。
输出
对于每个测试用例打印一个整数。如果没有产生漂亮颜色的 d 值,则打印 0。否则,打印任何合适的 d 值(1≤d≤1018)。
例子
输入副本
5
5
1 2 3 4 5
3
10 5 15
3
100 10 200
10
9 8 2 6 6 2 8 6 5 4
2
1 3
输出副本
2
0
100
0
3
原题目:
C. Paint the Array
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given an array aa consisting of nn positive integers. You have to choose a positive integer dd and paint all elements into two colors. All elements which are divisible by dd will be painted red, and all other elements will be painted blue.
The coloring is called beautiful if there are no pairs of adjacent elements with the same color in the array. Your task is to find any value of dd which yields a beautiful coloring, or report that it is impossible.
Input
The first line contains a single integer tt (1≤t≤10001≤t≤1000) — the number of testcases.
The first line of each testcase contains one integer nn (2≤n≤1002≤n≤100) — the number of elements of the array.
The second line of each testcase contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤10181≤ai≤1018).
Output
For each testcase print a single integer. If there is no such value of dd that yields a beautiful coloring, print 00. Otherwise, print any suitable value of dd (1≤d≤10181≤d≤1018).
Example
input
Copy
5 5 1 2 3 4 5 3 10 5 15 3 100 10 200 10 9 8 2 6 6 2 8 6 5 4 2 1 3
output
Copy
2 0 100 0 3
#include <bits/stdc++.h>
using namespace std;
long long a[110], b[3];
int main()
{
int t, n, i;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for (i=0; i<n; i++) scanf("%lld", &a[i]);
b[0] = a[0];
b[1] = a[1];
for (i=0; i<n; i++)
b[i%2] = __gcd(b[i%2], a[i]);
// for(i=0; i<2; i++) printf("%d ", b[i]);
bool book[3];
memset(book, 1, sizeof(book));
// for(i=0; i<3; i++) printf("%d ", book[i]);
for (i=0; i<n; i++)
{
book[i%2] = book[i%2] && (a[i] % b[!(i%2)] > 0);
// printf("%d#", book[i%2]);
}
// for(i=0; i<2; i++) printf("%d ", book[i]);
long long ans = 0;
for (i=0 ;i<2; i++)
{
if(book[i])
{
if (ans < b[i ^ 1]) ans = b[i ^ 1];
}
}
printf("%lld\n", ans);
}
return 0;
}