对于Java来说,首先要实现输入格式的统一,调用Scanner进行输入,然后进行转换
该问题解决的方法是分成四个数组,分别存储甲的开始时刻,乙的开始时刻,甲的结束时刻,乙的结束时刻
然后找出甲乙末时刻的最小值,将时刻由1开始递增到时刻的最小值,每次递增1
在时刻递增的过程中,根据甲的起末时刻来判断该时刻是否在其内,满足条件则标志为1,乙也一样
如果甲乙的标志同时为1,则说明符合条件,时间++
最终输出结果
for(int i=1;i<=min;i++)//以时间轴递增作为判断,记录每一刻
{
if(a1[x]>=i&&a2[x]<i)
{
a++;//如果在时间轴移动的过程中在该时间段内,即符合题意条件,则标志为1
}
else if(a2[x]>=i)
{
x++;//如果该时间轴已经过了一个时刻段,则++,进入下一个时刻段
}
if(b1[y]>=i&&b2[y]<i)//二者的时间段不能相互影响,就是会出现一个包含多个 1,7 2,3 4, 5情况
{
b++;//如果b也满足条件,类似与a
}
else if(b2[y]>=i)
{
y++;
}
if(a==1&&b==1)
{
time++;//二者同时满足条件,则时间增加,由于是以1作为单位,所以++
}
import java.util.*;
public class ex4_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s;
s = sc.nextLine();//字符数据的输入,以回车键作为输入结束的判断
int n = Integer.parseInt(s);//强制类型转换,将字符型强制转换为int型
int[][] s1 = new int[2 * n][2];//建立一个二维数组
for (int i = 0; i < 2*n; i++) {
String[] s_1 = sc.nextLine().split(" ");//数据的输入,每次可以输入形式为字符 空格 字符的数据,且字符数组分开,不会出现 2 3= 23
for(int j=0;j<2;j++) {
s1[i][j]=Integer.parseInt(s_1[j]);//依次存进每一列行数据
}
}
int[] a1=new int[n];
int[] a2=new int[n];
int[] b1=new int[n];
int[] b2=new int[n];
int m=0;
int k=0;
for(int i=0;i<n;i++) {
a1[i]=s1[i][0];
}
for(int i=n;i<2*n;i++) {
b1[m]=s1[i][0];
m++;
}
for(int i=0;i<n;i++) {
a2[i]=s1[i][1];
}
for(int i=n;i<2*n;i++) {
b2[k]=s1[i][1];
k++;
}
int min;
if(a2[n-1]<=b2[n-1]) {
min=a2[n-1];
}
else {
min=b2[n-1];
}
int x=0,y=0;
int time=0;
for(int i=1;i<=min;i++) {
int a=0,b=0;
if(a1[x]<=i&&a2[x]>i) {
a++;
}
else if(i>=a2[x]) {
x++;
}
if(b1[y]<=i&&b2[y]>i) {
b++;
}
else if(i>=b2[y]) {
y++;
}
if(a==1&&b==1) {
time++;
}
}
System.out.println(time);
}
}