ccf/csp 买菜Java实现

对于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);
		
		
	
}
	
	
}

猜你喜欢

转载自blog.csdn.net/qq_40741513/article/details/84313058