P8809 [蓝桥杯 2022 国 C] 近似 GCD - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思想:
从头到尾开始遍历,一个i指针,一个j指针,一个last指针
通过比较i和last查看是否可以对last进行移动,并且关乎者j的移动
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#define int long long
using namespace std;
const int N = 1e5+10;
int n,g;
int a[N];
int cnt;
signed main()
{
cin >> n >> g;
for(int i=1;i<=n;i++){
cin >> a[i];
}
int j=1;
int last=-1;
for(int i=1;i<=n;i++){
while(j<=n&&(a[j]%g==0||last<i)){
if(a[j]%g!=0){
last=j;
}
j++;
}
if(j>i+1){
cnt+=j-i-1;
}
}
cout << cnt;
}