1 条题解

  • 0
    @ 2025-8-24 21:15:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Maxmilite
    **

    搬运于2025-08-24 21:15:51,当前版本为作者最后更新于2023-12-09 01:07:54,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source & Knowledge

    2023 年 12 月语言月赛,由洛谷网校入门计划/基础计划提供。

    题目大意

    给定一个 nnmm 列的矩阵 aa。求每一行中的最大值和这个最大值之前有多少个非 00 值比它小。

    题目分析

    本题考察对二维循环结构的运用。

    对于「这个最大值之前有多少个非 00 值比它小」,略微琢磨便可发现,在最大值唯一的情况下,「比最大值小」是一定成立的。因此,题目的第二个任务可以转化为「求这个最大值之前有多少个非 00 值」。

    对于第一个任务,可以使用「擂台法」轻松解决。擂台记录当前最大值和最大值的位置。读入元素时和最大值比较,如果更大则更新擂台。

    for (int i = 1; i <= n; ++i) {
    	int max_val = -1, max_pos = -1;
    	for (int j = 1; j <= m; ++j) {
    		int x;
    		cin >> x;
    		if (x > max_val) {
    			max_val = x;
    			max_pos = j;
    		}
    	}
    }
    

    对于第二个任务,可以考虑到,我们在读入元素的同时计数非 00 元素个数即可。在擂台中额外记录此时的非 00 元素个数,在「擂台法」的同时更新即可。

    for (int i = 1; i <= n; ++i) {
    	int max_val = -1, max_pos = -1, max_cnt = -1;
    	int cnt = 0; 
    	for (int j = 1; j <= m; ++j) {
    		int x;
    		cin >> x;
    		if (x != 0) ++cnt;
    		if (x > max_val) {
    			max_val = x;
    			max_pos = j;
    			max_cnt = cnt; 
    		}
    	}
    }
    

    最后输出时,需要注意最大值自身是否有被统计到「个数」中。

    视频讲解

    • 1

    信息

    ID
    9487
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者