1 条题解
-
0
解题思路
- 输入处理:
- 使用
while
循环读取输入的m
和n
,当m
为 0 时结束输入。 - 对于每组输入,使用
memset
函数将visit
数组初始化为false
,该数组用于标记某些位置是否被访问。 - 读取
n
个整数t
,将visit[t]
标记为true
,表示这些位置被访问。
- 使用
- 计算初始值:
- 计算
p = n * m
,它是遍历的起始值。 - 初始化
num
为 0,用于记录当前的计数;初始化res
为 0,用于记录num
的最大值。
- 计算
- 遍历并更新计数:
- 从
p
开始递减遍历到 0。 - 如果
visit[p]
为true
,则num
加 1,并更新res
为res
和num
中的较大值。 - 如果
visit[p]
为false
,则num
减 1。
- 从
- 输出结果:
- 对于每组输入,输出对应的结果,格式为
"Case X: Y"
,其中X
是案例编号,Y
是res
的值。案例编号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
- 上传者