将k分成两个数相乘的形式(假设为k = a * b)
在row[]中找出有多少个a个连续的1;
在col[]中找出有多少个b个连续的1;
将两者相乘再累加;
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 40010;
int n, m, k;
bool row[N], col[N];
LL count(int x, bool arr[], int len)
{
int res = 0, cnt = 0;
for(int i = 1;i <= len;i ++)
if(arr[i]) cnt ++;
else
{
if(cnt >= x) res += cnt - x + 1;
cnt = 0;
}
if(cnt >= x) res += cnt - x + 1;
return res;
}
int main()
{
cin >> n >> m >> k;
for(int i = 1;i <= n;i ++) cin >> row[i];
for(int i = 1;i <= m;i ++) cin >> col[i];
LL res = 0;
for(int i = 1;i <= k && i <= 40010;i ++)
if(k % i == 0)
{
int a = i, b = k / i;
LL cnta = count(a, row, n), cntb = count(b, col, m);
res += cnta * cntb;
}
cout << res << endl;
return 0;
}
都是什么神仙任务啊orz
人物
同学加油,我感觉自己算法水平也才刚入门没多久
皮特佬牛逼%%%
哈哈蓬蒿人😹😻
皮特佬牛逼~