给出一个长度为n的数组,n>2。
当一个数组的最大公约数为大于1时则为美丽数组。
每次操作可以让相邻的两个数$a_i$与$a_{i+1}$分别重新赋值为$a_i-a_{i+1}$和$a_i+a_{i+1}$。
问最少多少次操作可以使得数组变为美丽数组。
">Mike and gcd problem
Mike and gcd problem
Created by LXC on Sun Jun 25 23:29:49 2023
https://codeforces.com/problemset/problem/798/C
ranting: 1700
tag: dp, greedy, number theory
problem
给出一个长度为n的数组,n>2。
当一个数组的最大公约数为大于1时则为美丽数组。
每次操作可以让相邻的两个数$a_i$与$a_{i+1}$分别重新赋值为$a_i-a_{i+1}$和$a_i+a_{i+1}$。
问最少多少次操作可以使得数组变为美丽数组。
solution
猜测结论,当数组不为美丽数组可以通过操作变为美丽数组。
因为两个相邻的数都是奇数则一次操作后都变偶数;当为一奇一偶则一次操作变成两个奇数。
所以理论上所有数都可以变成偶数。因此最大公约数可以大于1。
我们统计每个连续奇数的子段长度。不妨设共有k段,第i段的长度为$len_i$。
对于$len_i$为偶数则只需要$\frac{len_i}{2}$次操作;对于$len_i$为奇数数则只需要$\frac{len_i-1}{2}$次操作基础上再加两次;
所以答案为$\sum \limits_{i=1}^{k}( \lfloor \frac{len_i}{2} \rfloor + 2 \times len_i \bmod 2)$
code
1 |
|