1 条题解

  • 0
    @ 2025-5-6 20:26:07

    解题思路

    1. 输入处理
      • 使用 while 循环读取输入的 mn,当 m 为 0 时结束输入。
      • 对于每组输入,使用 memset 函数将 visit 数组初始化为 false,该数组用于标记某些位置是否被访问。
      • 读取 n 个整数 t,将 visit[t] 标记为 true,表示这些位置被访问。
    2. 计算初始值
      • 计算 p = n * m,它是遍历的起始值。
      • 初始化 num 为 0,用于记录当前的计数;初始化 res 为 0,用于记录 num 的最大值。
    3. 遍历并更新计数
      • p 开始递减遍历到 0。
      • 如果 visit[p]true,则 num 加 1,并更新 resresnum 中的较大值。
      • 如果 visit[p]false,则 num 减 1。
    4. 输出结果
      • 对于每组输入,输出对应的结果,格式为 "Case X: Y",其中 X 是案例编号,Yres 的值。案例编号 nc 会在每次输出后加 1。
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int n,m;
    bool visit[10000];
    
    int main(){
    	int nc = 1;
    	while(cin>>m>>n&&m){
    		memset(visit,0,sizeof(visit));
    		for(int i = 0; i < n; i++){
    			int t;
    			cin >> t;
    			visit[t] = 1;
    		}
    		int p = n*m, num = 0, res = 0;
    		while(p>=0){
    			if(visit[p])
    				num++, res = max(res,num);
    			else
    				num--;
    			p--;
    		}
    		cout << "Case " << nc++ << ": " << res << endl;
    	}
    }
    
    • 1

    信息

    ID
    324
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者