英文原题 中文题译
大意:给定一个01矩阵,计算其中全为1的方形子块的个数并按方块的边长计数分别输出。
矩阵大小不超过250,The simple the best,直接枚举。
1.首先读入矩阵后将数值取反,这样,在判断矩阵内是否有0变成判断是否有1,只需判断其元素和是否为即可,不需计算矩阵面积。
2.计数sum[i][j]为(1,1)到(i,j)的矩形区域内的元素之和,用递推式计算。注意这里我用了1..n_size作为坐标,而不是通常的0..(nsize-1),这样可以避免计算中判断ir-1,ic-1是否小于0。不过别忘了在初始化也要这样。
3.从每个ir,ic坐标开始往下生成方块,并计数,如果某个方块内元素之和大于0,则比它更大的也一定如此,就不需再计算了。
4.输出。
这恐怕是最简洁的方法了。由于矩阵内容是不变的,可以应用。如果矩阵内容变化,则需考虑用树状数组这样的复杂结构来保证计算的效率了。另外,在第三步中,逐个扫描也可换成二分扫描,不过,复杂度照样是O(n^3)而非O(n^2logn),原因:计数最坏需O(n)复杂度。
/* ID: blackco3 TASK: range LANG: C++ */ #include <iostream> #include <memory.h> using namespace std; const int _max_len_(250) ; int n_size, mtrx[_max_len_+1][_max_len_+1], sum[_max_len_+1][_max_len_+1], squares[_max_len_] ; int main() { freopen("range.in", "r", stdin); freopen("range.out", "w", stdout); cin >> n_size ; char line[_max_len_+1] ; for( int ir=1; ir<=n_size; ir++ ){ cin >> line ; for( int ic=1; ic<=n_size; ic++ ) mtrx[ir][ic] = 1-(line[ic-1] - '0') ; } memset( sum, 0, sizeof(sum) ); memset( squares, 0, sizeof(squares) ); for( int ir=1; ir<=n_size; ir++ ) for( int ic=1; ic<=n_size; ic++ ) sum[ir][ic] = mtrx[ir][ic] + sum[ir-1][ic] + sum[ir][ic-1] - sum[ir-1][ic-1] ; for( int ir=1; ir<=n_size; ir++ ) for( int ic=1; ic<=n_size; ic++ ){ int max_len = ir>ic ? n_size-ir : n_size-ic ; for( int len=1; len<=max_len; len++ ){ if( sum[ir+len][ic+len] + sum[ir-1][ic-1] - sum[ir+len][ic-1] -sum[ir-1][ic+len] ) break ; squares[len]++ ; } } for( int len=1; len<n_size; len++ ) if( squares[len] ) cout << len + 1 << " " << squares[len] << endl ; return 0; }
发表评论
-
USACO Training Section 4.2 Cowcycles
2010-01-31 21:11 882英文原题 中文题译 ... -
USACO Training Section 4.2 Job Processing
2010-01-30 17:31 1130英文原题 中文题译 大意: 有N个工件,每个工件要经 ... -
USACO Training Section 4.2 Drainage Ditches ISAP非递归和多路增广递归
2010-01-29 19:39 1843郁闷。不小心覆盖了重 ... -
USACO Training Section 4.2 The Perfect Stall 匈牙利算法的递归和非递归实现
2010-01-28 21:21 1641英文原题 中文题译 ... -
USACO Training Section 4.1 Cryptcowgraphy 奶牛密码
2010-01-27 20:58 1194英文原题 中文题译 大意: 奶牛们要从农场逃跑 ... -
USACO Training Section 4.1 Beef McNuggets
2010-01-26 21:37 964英文原题 中文题译 大意: 给定N个正整数, ... -
USACO Training Section 4.1 Fence Loops
2010-01-24 20:14 1061英文原题 大意: 农夫布朗的牧场上的篱笆已经失 ... -
USACO Training Section 3.4 Closed Fences
2010-01-23 17:50 1400英文原题 题意 一个 ... -
USACO Training Section 3.4 American Heritage
2010-01-21 23:19 771英文原题 大意:有一个由最多26个大写字母构成的二叉树 ... -
USACO Training Section 3.4 Raucous Rockers
2010-01-21 23:09 794英文原题 大意:有S首歌,要放到D个CD里。每首歌有一个 ... -
USACO Training Section 3.4 Electric Fence
2010-01-21 12:57 967英文原题 大意:给定一个三角形(0,0),(m,n),( ... -
USACO Training Section 3.3 Riding the Fences
2010-01-20 23:38 1203英文原题 中文题译 经典的求欧拉路径:给定最多两个奇 ... -
USACO Training Section 3.3 Shopping Offers
2010-01-19 22:18 912英文原题 中文题译 这是个与日常生活相关的题。商场促销 ... -
USACO Training Section 3.3 A Game
2010-01-19 20:54 1091英文原题 有如下一个双人游戏:N(2 <= N & ... -
USACO Training Section 3.3 Camelot
2010-01-19 03:39 1228英文原题 中文题译 ... -
USACO Training Section 3.2 Sweet Butter
2010-01-19 00:10 1043英文原题 中文题译 大意:农场之间有路构成稀疏无向图,若 ... -
USACO Training Section 3.2 Magic Squares
2010-01-18 23:11 928英文原题 中文题译 大意:有人发明了一种有8个块三种变换 ... -
USACO Training Section 3.2 Feed Ratios
2010-01-18 20:52 1304英文原题 中文题译 大意:给出整数a[i][j]和 ... -
USACO Training Section 3.2 Spinning Wheels
2010-01-18 19:37 865英文原题 中文题译 大意:有五个纺车飞轮,每个都有最多五 ... -
USACO Training Section 3.2 Stringsobits
2010-01-18 01:04 987英文原题 中文题译 大意:求至多有L个1的第i个N位二进 ...
相关推荐
ACM----USACO Training(解题博客网),提供了USACO Training解题的代码,可以参考一下
自己写的usaco_training带代码。供参考,有一道题是cheat的。自己看吧。
usaco测试数据+标程 usaco的section1到section5的所有测试数据 以及标准程序
usaco解题报告,就是usaco.training.gateway上面的题目全解
USACO题解+代码+翻译,好东西,超级齐全,对大家帮助不小,特别是现在nocow挂了
One of the answer of the USACO training exercises.
usaco section2.3--section5.5源程序。。。。。。。。。。。。。。。。
3.3 Section 3.3 3.4 Section 3.4 4 Chapter4 4.1 Section 4.1 4.2 Section 4.2 4.3 Section 4.3 4.4 Section 4.4 5 Chapter5 5.1 Section 5.1 5.2 Section 5.2 5.3 Section 5.3 5.4 Section 5.4 5.5 Section 5.5
[USACO 1.1.4]破碎的项链.cpp
USACO全部译题 USACO Training Program Gateway
第一行 优惠商品的种类数(0 ) 第二行..第 s+1 行 每一行都用几个整数来表示一种优惠方式 第一个整数 n 第一行: 两个用空格隔开的
USACO_培训USACO_培训Ride.java-> Gift1.java->
USACO题目The Clocks解答,包括代码
USACO training 教程翻译合集(清晰明确)
USACO题目Friday the Thirteenth,包含代码解析
usaco 合集,包括英文原题和中文译题,测试数据以及答案,很全啊!usaco 合集usaco 合集usaco 合集usaco 合集
USACO培训页面美国计算机奥林匹克训练页2015年6月17日开始
此c++代码实现了USACO上Bessie Come Home的问题,并运用了弗洛伊德算法
usaco历年测试数据
某些USACO题目的答案,很详细,代码清晰结构良好,算法高效易于调试