题目背景
都结束了
茫然间,就是三年
没有想象中的狂欢
只是,见着人来人往
那间教室渐渐搬空
回到,最初的模样
从未停留,又向着新的开始
又都开始了
题目描述
教室可以看作一个 $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")