1. 程式人生 > >ccf/csp 買菜Java實現

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