NC238088. 牛牛的说谎机器
描述
输入描述
第一行两个整数代表接下来 行每行一条指令,指令格式见题面。保证:
输出描述
输出共一行两个整数,分别代表机器最多的错误指令数,以及有多少种 的取值会使得机器的错误指令数最多。
示例1
输入:
9 5 1 3 6 2 7 1 2 3 3 2 1 5 8
输出:
4 3
说明:
Python3 解法, 执行用时: 1091ms, 内存消耗: 52100K, 提交时间: 2023-08-11 14:52:51
import sys input=sys.stdin.readline n,m=map(int,input().split()) diff=[0]*(n+2) for i in range(m): arr = [int(k) for k in input().split()] if len(arr)==3: l,r=arr[1:] elif arr[0]==2: l,r=arr[1],n else: l,r=1,arr[1] diff[l]+=1 diff[r+1]-=1 for i in range(1,n+1): diff[i]+=diff[i-1] maxnum=min(diff[1:n+1]) maxcount=diff[1:n+1].count(maxnum) print(m-maxnum,maxcount)
Java 解法, 执行用时: 1059ms, 内存消耗: 26032K, 提交时间: 2023-08-11 14:51:47
import java.util.Scanner; import static java.lang.System.*; public class Main{ public static void main(String[] args){ Scanner In=new Scanner(in); int n=In.nextInt(),m=In.nextInt(),o,x,y; int[] pre=new int[(int)1e6+7]; for(int i=0;i<m;++i){ o=In.nextInt(); x=In.nextInt(); if(o==1){ y=In.nextInt(); pre[x]+=1; pre[y+1]-=1; } else if(o==2){ pre[x]+=1; } else { pre[1]+=1; pre[x+1]-=1; } } int ma=-0x3f3f3f3f,sum=0; for(int i=1;i<=n;++i){ pre[i]+=pre[i-1]; ma=Math.max(ma,m-pre[i]); } for(int i=1;i<=n;++i){ if(ma==m-pre[i])++sum; } out.print(ma+" "+sum); } }