唉,补题补题,太菜了当时看到这个题一点思路没有。。。。看了大佬的思路才懂。。。唉,还是思维没有练起来得多多刷题咯,(为啥一天天的困得要死)
思路:
先求出k的所有因子,然后分别从向量a和向量b找连续k的因子个1的数量,然后求出所有的因子就行了。(想不到想不到!!)(至于为什么找连续个稍微用笔画一画就知道了,或者说是乘法原理)
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e4 + 10;
int a[maxn],b[maxn],p[maxn];
typedef long long int ll;
int main(){
int n,m,k;cin>>n>>m>>k;
for(int i = 1; i <= n; i++)cin>>a[i];
for(int i = 1; i <= m; i++)cin>>b[i];
int c = 0;
for(int i = 1; i * i <= k; i++){
if(k % i == 0){
p[c++] = i;
if(i * i == k)continue;
p[c++] = k / i;
}
}
ll ans = 0;
for(int i = 0 ;i < c; i++){
ll cnt = 0;
ll x = 0 , y = 0;
for(int j = 1; j <= n; j++){
if(a[j] == 1){
cnt ++;
}else cnt = 0;
if(cnt == p[i]){x++;cnt--;}
}
cnt = 0;
for(int j = 1; j <= m; j++){
if(b[j] == 1){
cnt ++;
}else cnt = 0;
if(cnt == k / p[i]){y++;cnt--;}
}
ans += x * y;
}
cout<<ans<<endl;
return 0;
}