NC215158. 撸起袖子搬电脑!
描述
输入描述
第一行有2个整数L和M,L代表机房的长度,M代表区域的数目,L和M之间用一个空格隔开。 接下来的M行每行包含2个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标
输出描述
1个整数,代表机房还剩多少台电脑
示例1
输入:
500 3 150 300 100 200 470 471
输出:
298
说明:
对于所有的数据,1≤L≤100000000Java(javac 1.8) 解法, 执行用时: 581ms, 内存消耗: 426324K, 提交时间: 2020-12-20 14:44:03
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int L = input.nextInt(); int M = input.nextInt(); int sum[] = new int[L+2]; for(int i=0;i<M;i++) { int l = input.nextInt(); int r = input.nextInt(); sum[l]++; sum[r+1]--; } long ans=0,anss=0; for(int i=0;i<=L;i++) { ans+=sum[i]; if(ans==0) anss++; } System.out.println(anss); } }
Python3(3.9) 解法, 执行用时: 32ms, 内存消耗: 2844K, 提交时间: 2020-12-20 16:11:07
answer=[] a,n=map(int,input().split()) b1=0 b2=-1 c1=0 c2=-1 a1,a2=map(int,input().split()) for i in range (n-1): a3, a4 = map(int, input().split()) if(a3<=a1 and a4>=a2): a1=a3 a2=a4 if(a3<a1 and a4<a2 and a4>a1): a1=a3 if(a3>a1 and a3<a2 and a4>a2): a2=a4 if(a3>a2): b1=a3 b2=a4 if(a4<a1): c1=a3 c2=a4 print(a-(a2-a1+1)-(b2-b1+1)-(c2-c1+1)+1)
C++(clang++11) 解法, 执行用时: 102ms, 内存消耗: 1144K, 提交时间: 2020-12-22 21:27:15
#include <bits/stdc++.h> using namespace std; int pc[100000000+5]; int main() { int L,M; cin>>L>>M; for(int i=0;i<M;i++) { int l,r; scanf("%d %d",&l,&r); pc[l]++; pc[r+1]--; } int ans = 0; int flag = 0; for(int i=0;i<=L;i++) { flag += pc[i]; if(!flag) ans++; } cout<<ans<<endl; return 0; }