杭电OJ_2022 海选女主角

哔哔赖赖

不知道未知大小的二维数组怎么定义,然后百度了一下,发现就是我之前学过的new,动态内存分配。果然,学了没去用也是一场空啊咧~~~~然后检查了一些数据输出都没问题,不知道问题出在哪里了,就是Accepted不了。 2020/1/31 18:58

哇咔咔,Accepted咯,问题中 输入的是多组数据啊,我理解成一次数据输入、处理。。。我这理解能力,得多审几遍题目啊,嗯讲真。还有一件事,我老是考虑好多,比如输出数据会不会有0、0,会不会有负数,要不要有效判断一下。。。以辩证的思想看待这个问题,嗯,我比较细心哈哈哈哈哈哈哈哈哈哈 2020/1/31 19:26

Input
输入数据有多组,每组的第一行是两个整数m和n。。。。。。。。

这题的代码敲起来就很舒服,虽然动态内存分配是模仿来的(我没抄哈别瞎说啊hhhhhh),舒服原因估计是因为里面用了指针、引用、动态分配内存吧,但是还是if/else走天下。中午看到一篇推文:答应我,别再if/else走天下了可以吗?然后点开看了其他的取代方法,有:枚举、工厂类、策略模式,嗯确认过眼神,看不懂。但是我同意里面提到的的“开闭原则”:如果想拓展条件,只需要增加新代码,而不需要动以前的业务代码。而if/else就与这个原则背道而驰了,思想很重要,但是目前得打好基础,否则光有思想而对于如何实现无从下手,那不是很尴尬!!!

另外,看到一句话,共勉—— 我: 吾欲晚起赶追,迟乎? 曰:废话太多,先追再说!”

题目

海选女主角
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 103361 Accepted Submission(s): 44732

Problem Description
potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。
“做什么比较挣钱呢?筛沙子没力气,看大门又不够帅…”potato老师很是无奈。
“张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。
嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。
说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out!
由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪…
面试那天,刚好来了mn个MM,站成一个mn的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。
一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。
分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。
特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。

Input
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。

Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。

Sample Input
2 3
1 4 -3
-7 3 0

Sample Output
2 1 -7

代码

#include <iostream>
#include <cmath>

using namespace std;

//采用动态内存分配,来定义二维数组 
void malloc_2D(int **&array, int row, int col) {
	array = new int *[row];	 
	for (int i = 0; i < row; i++) {
		array[i] = new int [col];
	}
}
//用完后,记得释放这个空间 
void delete_2D(int **&array, int row) {
	for (int i = 0; i < row; i++) {
		delete [] array[i];	//释放这组空间 
	}
}

int main() {
	int **arr = NULL;	//定义二级指针 
	int m,n;
	while ( scanf("%d%d", &m,&n) != EOF) {
		
		malloc_2D(arr, m, n);//分配空间来给二维数组 
	
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				cin >> arr[i][j]; 
			}
		}//输入数据
	 
		int max = arr[0][0];
		int max_x = 0, max_y = 0;	//输出时记得加上一,对应行列	 
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if ( abs(arr[i][j])  >  abs(max)  ) {
					max = arr[i][j];
					max_x = i;
					max_y = j;
				} 
				if (abs(arr[i][j])  ==  abs(max)) {
					if (i < max_x) {
						max = arr[i][j];
						max_x = i;
						max_y = j;
					}
					if (i == max_x && j < max_y) {
						max = arr[i][j];
						max_x = i;
						max_y = j;
			 		}
				}
			}
		} 
	
		printf("%d %d %d\n", max_x+1, max_y+1, max);
	
		delete_2D(arr,m);//释放动态分配的空间 
	}
	return 0;
}
发布了24 篇原创文章 · 获赞 0 · 访问量 719

猜你喜欢

转载自blog.csdn.net/qq_44296342/article/details/104126819
今日推荐