ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall(暴力)
2018-09-05 23:33
381 查看
题目链接:传送门
题意:询问你在一个n*m的矩阵中,有一些方块被涂成了黑色,其他的方格为白色,让你统计白方格形成的子矩阵的个数。
思路:比赛的时候没有想去做,赛后补题的时候发现优美的暴力就能过,也有点遗憾。
观看了大佬的博客后~~~
首先我们会求不含黑点的子矩阵的个数,当加入黑点时,我们只要从左上角开始遍历统计子矩阵的个数,然后更新每一列最下方的黑点的位置,每次走到一个点时你就会知道增加的子矩阵的形状(不受下方黑点的影响),这样就能很好的统计矩阵的个数了。
附上代码
[code]#include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<string> #include<iostream> #include<map> #include<vector> #include<set> #include<queue> using namespace std; const int inf = 0x3f3f3f3f; typedef long long ll; int ax[100010][110]; int bn[100010]; int main(void) { int t; scanf("%d", &t); int zzz = 1; while (t--) { int n, m,t; memset(ax, 0, sizeof(ax)); memset(bn, 0, sizeof(bn)); scanf("%d%d%d", &n, &m, &t); for (int i = 0; i < t; i++) { int a, b; scanf("%d%d", &a, &b); ax[a][b] = 1; } long long ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (ax[i][j]) { bn[j] = i; } } for (int j = 1; j <= m; j++) { long long mins = 0x3f3f3f3f; for (int k = j; k > 0; k--) { mins = min(mins, (long long)i - bn[k]); ans += mins; } } } printf("Case #%d: ", zzz++); printf("%lld\n", ans); } return 0; }
阅读更多
相关文章推荐
- ACM-ICPC 2018 南京赛区网络预赛 E题
- 【ACM-ICPC 2018 南京赛区网络预赛 L】Magical Girl Haze
- ACM-ICPC 2018 焦作赛区网络预赛 I题 Save the Room
- ACM-ICPC 2018 南京赛区网络预赛 J题
- ACM-ICPC 2018 南京赛区网络预赛 L题
- 【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
- ACM-ICPC 2018 南京赛区网络预赛 G题
- 【ACM-ICPC 2018 南京赛区网络预赛 I】Skr
- 【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge
- 【ACM-ICPC 2018 南京赛区网络预赛 J】Sum
- ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)
- 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire
- ACM-ICPC 2018 焦作赛区网络预赛 L 题 Poor God Water
- 【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics
- ACM-ICPC 2018 焦作赛区网络预赛 K题 Transport Ship
- ACM-ICPC 2018 徐州赛区网络预赛F. Features Track
- 【 ACM-ICPC 2018 沈阳赛区网络预赛 D】Made In Heaven
- ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies
- ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports
- 【ACM-ICPC 2018 沈阳赛区网络预赛 K】Supreme Number