import java.util.*;
public class Main {
public static int solve(int[] pgcd, int[] sgcd, int skip, int[] nums) {
int n = nums.length;
// Prefix GCD
for (int i = 1; i <= n; i++) {
if (i - 1 == skip) {
pgcd[i] = pgcd[i - 1];
continue;
}
pgcd[i] = gcd(pgcd[i - 1], nums[i - 1]);
}
// Suffix GCD
for (int i = n - 1; i >= 0; i--) {
if (i == skip) {
sgcd[i] = sgcd[i + 1];
continue;
}
sgcd[i] = gcd(sgcd[i + 1], nums[i]);
}
int score = 0;
for (int i = 0; i < n - 1; i++) {
if (i == skip) continue;
if (pgcd[i + 1] == sgcd[i + 1]) {
score++;
}
}
return score;
}
public static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
public static int maxValidSplits(int[] nums) {
int n = nums.length;
int ans = 0;
int[] premain = new int[n + 1];
for (int i = 1; i <= n; i++) {
premain[i] = gcd(premain[i - 1], nums[i - 1]);
}
// skip = -1 means no deletion
for (int i = 0; i <= n; i++) {
if (i > 0 && premain[i] == premain[i - 1]) {
continue;
}
int skip = i - 1;
int[] pgcd = new int[n + 1];
int[] sgcd = new int[n + 1];
ans,
solve(pgcd, sgcd, skip, nums)
);
}
return ans;
}
public static void main
(String[] args
) {
// Example 1
int[] nums1 = {10, 30, 15, 10};
System.
out.
println(maxValidSplits
(nums1
)); // 2
// Example 2
int[] nums2 = {2, 10, 14};
System.
out.
println(maxValidSplits
(nums2
)); // 1
// Example 3
int[] nums3 = {2, 4};
System.
out.
println(maxValidSplits
(nums3
)); // 0 }
}
CmltcG9ydCBqYXZhLnV0aWwuKjsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCiAgICBwdWJsaWMgc3RhdGljIGludCBzb2x2ZShpbnRbXSBwZ2NkLCBpbnRbXSBzZ2NkLCBpbnQgc2tpcCwgaW50W10gbnVtcykgewogICAgICAgIGludCBuID0gbnVtcy5sZW5ndGg7CgogICAgICAgIC8vIFByZWZpeCBHQ0QKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgLSAxID09IHNraXApIHsKICAgICAgICAgICAgICAgIHBnY2RbaV0gPSBwZ2NkW2kgLSAxXTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwZ2NkW2ldID0gZ2NkKHBnY2RbaSAtIDFdLCBudW1zW2kgLSAxXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBTdWZmaXggR0NECiAgICAgICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBpZiAoaSA9PSBza2lwKSB7CiAgICAgICAgICAgICAgICBzZ2NkW2ldID0gc2djZFtpICsgMV07CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2djZFtpXSA9IGdjZChzZ2NkW2kgKyAxXSwgbnVtc1tpXSk7CiAgICAgICAgfQoKICAgICAgICBpbnQgc2NvcmUgPSAwOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgPT0gc2tpcCkgY29udGludWU7CgogICAgICAgICAgICBpZiAocGdjZFtpICsgMV0gPT0gc2djZFtpICsgMV0pIHsKICAgICAgICAgICAgICAgIHNjb3JlKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzY29yZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGludCBnY2QoaW50IGEsIGludCBiKSB7CiAgICAgICAgd2hpbGUgKGIgIT0gMCkgewogICAgICAgICAgICBpbnQgdGVtcCA9IGI7CiAgICAgICAgICAgIGIgPSBhICUgYjsKICAgICAgICAgICAgYSA9IHRlbXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgaW50IG1heFZhbGlkU3BsaXRzKGludFtdIG51bXMpIHsKICAgICAgICBpbnQgbiA9IG51bXMubGVuZ3RoOwogICAgICAgIGludCBhbnMgPSAwOwoKICAgICAgICBpbnRbXSBwcmVtYWluID0gbmV3IGludFtuICsgMV07CgogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBwcmVtYWluW2ldID0gZ2NkKHByZW1haW5baSAtIDFdLCBudW1zW2kgLSAxXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBza2lwID0gLTEgbWVhbnMgbm8gZGVsZXRpb24KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKCiAgICAgICAgICAgIGlmIChpID4gMCAmJiBwcmVtYWluW2ldID09IHByZW1haW5baSAtIDFdKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW50IHNraXAgPSBpIC0gMTsKCiAgICAgICAgICAgIGludFtdIHBnY2QgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICAgICAgaW50W10gc2djZCA9IG5ldyBpbnRbbiArIDFdOwoKICAgICAgICAgICAgYW5zID0gTWF0aC5tYXgoCiAgICAgICAgICAgICAgICBhbnMsCiAgICAgICAgICAgICAgICBzb2x2ZShwZ2NkLCBzZ2NkLCBza2lwLCBudW1zKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFuczsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIC8vIEV4YW1wbGUgMQogICAgICAgIGludFtdIG51bXMxID0gezEwLCAzMCwgMTUsIDEwfTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWF4VmFsaWRTcGxpdHMobnVtczEpKTsgLy8gMgoKICAgICAgICAvLyBFeGFtcGxlIDIKICAgICAgICBpbnRbXSBudW1zMiA9IHsyLCAxMCwgMTR9OwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYXhWYWxpZFNwbGl0cyhudW1zMikpOyAvLyAxCgogICAgICAgIC8vIEV4YW1wbGUgMwogICAgICAgIGludFtdIG51bXMzID0gezIsIDR9OwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtYXhWYWxpZFNwbGl0cyhudW1zMykpOyAvLyAwCiAgICB9Cn0K