Codeforces Round #760 (Div. 3) 1618C - Paint the Array

***********************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;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值