Logo Universal Online Judge

UOJ

时间限制:1 s 空间限制:512 MB
统计

题目背景

都结束了

茫然间,就是三年

没有想象中的狂欢

只是,见着人来人往

那间教室渐渐搬空

回到,最初的模样

从未停留,又向着新的开始

又都开始了

题目描述

教室可以看作一个 $n\times m$ 的方格图。鸽子记不得每个位置坐了谁,事实上,鸽子在每个位置只记住了 $1$ 比特的信息。为了让这个故事更浪漫些,你可以认为鸽子记得每个位置坐了男生还是女生。

鸽子尝试回忆教室中的朋友。朋友遵循因地制宜、优势互补的原则。具体地说,一对朋友就是坐在相邻的位置(即所在方格有公共边)的一个男生和一个女生。

鸽子知道 $n\times m$ 的方格图拥有 $\frac{n(n+1)m(m+1)}{4}$ 个子矩形。鸽子想知道有多少个子矩形中恰有奇数对朋友。

输入格式

第一行两个整数 $n,m$。

接下来 $n$ 行,每行是长度为 $m$ 的 01 串,代表鸽子在每个位置记住的信息。

输出格式

一个整数,表示答案。

样例一

input

2 3
010
101

output

8

大样例

explanation

对于每个大小为 $2$ 的子矩形,其中有 $1$ 对朋友。这样的子矩形有 $7$ 个。对于大小为 $6$ 的子矩形,其中有 $7$ 对朋友。因此答案是 $8$。

样例二、三

见下发文件。

限制与约定

所有数据满足 $1\le n \le m$,$n\times m\le 3\times 10^6$。

测试点编号 $n=$ $m=$
$1$ $10$ $10$
$2$ $31$ $32$
$3$ $99$ $101$
$4$ $500$ $500$
$5$ $1$ $3\times10^6$
$6$ $30$ $10^5$
$7$ $1000$ $3000$
$8$ $1250$ $2400$
$9$ $1600$ $1875$
$10$ $1732$ $1732$

提示:如果你需要快速计算一个 unsigned long long 变量二进制表示下有几个 $1$,建议使用 GCC 内建函数

int __builtin_popcountll(unsigned long long);

同时在源代码第一行写上

#pragma GCC target("popcnt")