NC229576. 传染病统计
描述
输入描述
第一行包含一个整数T,表示数据组数。接下来是T组数据。
•每组数据的第一行包含一个整数N。
•第二行包含N个整数,用空格隔开。
输出描述
对于每组数据,输出一行包含两个整数,用空格隔开,表示最终被感染的人数的最小值和最大值。
示例1
输入:
3 2 3 6 3 1 3 5 5 1 2 5 6 7
输出:
1 1 3 3 2 3
pypy3 解法, 执行用时: 297ms, 内存消耗: 29352K, 提交时间: 2021-10-29 12:24:02
for _ in range(int(input())) : n = int(input()) x = list(map(int, input().split())) x.sort() mx, mi, l = 1, float('inf'), 1 for i in range(1, len(x)) : if x[i] - x[i - 1] <= 2 : l += 1 else : mx = max(l, mx) mi = min(l, mi) l = 1 mx = max(l, mx) mi = min(l, mi) print(mi, mx)
C++ 解法, 执行用时: 9ms, 内存消耗: 564K, 提交时间: 2022-04-05 21:40:40
#include<bits/stdc++.h> using namespace std; int t,n; int p[100005]; void solve() { scanf("%d",&n); int lst=-100,num=0; for(int i=1;i<=n;i++){ int x; scanf("%d",&x); if(x-lst>2) p[++num]=1; else p[num]++; lst=x; } sort(p+1,p+num+1); printf("%d %d\n",p[1],p[num]); } int main() { scanf("%d",&t); while(t--) solve(); return 0; }
Python3 解法, 执行用时: 84ms, 内存消耗: 4732K, 提交时间: 2022-02-22 17:57:32
for _ in range(int(input())): n=int(input()) x=list(map(int,input().split())) vec=[] cnt=1 for i in range(n-1): if x[i]+2>=x[i+1]: cnt+=1 else: vec.append(cnt) cnt=1 vec.append(cnt) print(min(vec),max(vec))