NC24636. 值周
描述
输入描述
第一行有2个整数L和M,L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。 接下来的M行每行包含2个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标
输出描述
1个整数,表示马路上剩余的人的数目。
示例1
输入:
500 3 150 300 100 200 470 471
输出:
298
说明:
对于所有的数据,1≤L≤100000000C 解法, 执行用时: 727ms, 内存消耗: 407068K, 提交时间: 2023-02-21 14:52:32
#include<stdio.h> int main() { int l,t; scanf("%d%d",&l,&t); int a,b,i,x[100000001]={0},num=0,m=0; while(t--) { scanf("%d%d",&a,&b); x[a]++; x[b+1]--; } for(i=0;i<=l;i++) { m=m+x[i]; if(m==0) num++; } printf("%d",num); return 0; }
C++(clang++11) 解法, 执行用时: 696ms, 内存消耗: 39544K, 提交时间: 2020-11-01 14:32:51
#include<bits/stdc++.h> using namespace std; int n,l,i,x,y,s,t,a[100000001]; int main() { cin>>l>>n; for(;n--;) { cin>>x>>y; a[x]++;a[y+1]--; }for(i=0;i<=l;i++) { t+=a[i]; if(t<=0)s++; }cout<<s; }
pypy3 解法, 执行用时: 1851ms, 内存消耗: 130960K, 提交时间: 2023-06-23 17:44:55
L,M=map(int,input().split()) s=[0]*(L+1) for i in range(M): a,b=map(int,input().split()) s[a]=s[a]+1 s[b+1]=s[b+1]-1 cn=0 a=0 for i in s: a+=i if a==0:cn+=1 print(cn)