Time Limit: 1000 MS Memory Limit: 32768 KB
Total Submission(s): 360 Accepted Submission(s): 168
Description
LL、CC和TT是同班同学,大家都知道LL是班上最高的同学,CC是班上最矮的同学,TT是班上最聪明的同学,现在他们三个人在一个坐满人的教室里,我们把教室简化为一个n*m的矩阵,并且知道每一个座位上的人的身高,现在老师给TT出了一道难题,让TT求出以LL和CC所在位置为顶点围成的子矩阵中所有人的身高和,同学们你可以帮助下TT么?
Input
第一行两个数n,m表示教室的大小,接下来是n*m的矩阵,表示每一个位置人的身高(最大值和最小值都是唯一的,0<n,m<=100)
Output
LL和CC围成的子矩阵中所有人的身高之和
Sample Input
5 5 161 162 163 164 165 176 177 178 179 166 175 184 185 180 167 174 181 182 181 168 171 172 171 170 169
Sample Output
1561
Source
思路:
1)分别找出矩阵中的最大值,最小值的坐标
2)子矩阵求和
不过,sum还有另一个求取方法,卡住我了(抓狂ing)
附上AC代码:
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <utility>
#include <iostream>
#include <algorithm>
using namespace std;
int m=0,n=0,sum=0;
int a[1000][1000];
int main()
{
cin>>m>>n;
int i=0,j=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
int x1,yy1,x2,y2;
int max=a[1][1];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if (max < a[i][j])
{
max = a[i][j];
x1=i;
yy1=j;
}
int min=a[m][n];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if (min > a[i][j])
{
min = a[i][j];
x2=i;
y2=j;
}
sum=0;
if(x1>x2)swap(x1,x2);
if(yy1>y2)swap(yy1,y2);
for(i=x1;i<=x2;i++)
for(j=yy1;j<=y2;j++)
sum+=a[i][j];
cout<<sum<<'\n';
return 0;
}