b944- 好想上廁所(男廁篇)

題目大意

男生要上廁所,通常會相隔一個小便斗,如果沒有,就從數字最小的廁所開始找第一間空間上廁所,沒有辦法上廁所就輸出 “ Not enough”

輸出
題目連結

觀念重點

  • 兩種規則
    • 先嘗試能否在相隔的情況下上廁所
    • 從最小的廁所開始上,找到空格
  • 有可能進去上廁所,但是時間是零秒,但在這次還是要照常輸出

分析

簡單的操作題,根據題目進行分析輸出,在每一個程式碼中放入簡單註解,希望大家可以看懂XD。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.*;

public class b944 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int n , a , b ;
n = input.nextInt() ;
int num[] = new int[n+2]; //使用的編號
int time[] = new int[n+2]; //剩下使用的時間
while(input.hasNext()) {
a = input.nextInt();
b = input.nextInt();
int flag = 1 ; //判斷這次有沒有成功找到廁所
// 1 是還沒找到廁所, 0 是找到了

for(int i = 1 ; i <= n ; i++) { //將上次的狀態進行更新
if(num[i] != 0) { //表示有人正在使用
time[i] -=1 ; //時間減一
if(time[i] < 0 ) time[i] = 0 ;
//如果剛剛上廁所的人是零秒,在剛剛會被 -1 秒,因此現在歸零
}
if(time[i] <= 0 ) num[i] = 0 ; // 0 秒表示上完廁所,使用號碼歸零
}

for(int i = 1 ; i <= n ; i++) { //第一個規則
if(num[i]==0 && num[i-1]==0 && num[i+1]==0) {
//看當前間、左邊、右邊使否為空間
num[i] = a ; //這間廁所被 a 使用
time[i] = b ; // 使用 b 秒
flag = 0 ; //成功找到廁所
break ;
}
}
if(flag==1) { //還沒找到廁所,就用第二種規則
for(int i = 1 ; i <= n ; i++) {
if(num[i] == 0) { //這間廁所沒有被使用,那就讓她使用
num[i] = a ;
time[i] = b ;
flag = 0 ; //成功找到廁所
break;
}
}
}


if(flag == 1 ) //表示還沒找到廁所,所以輸出 not enough
System.out.print(" Not enough\n");

System.out.print("Number:"); //輸出廁所使用的編號
for(int i = 1 ; i <= n ; i++) {
System.out.printf(" %d" , num[i]);
}
System.out.printf("\n");

System.out.print("Time:"); //輸出每個廁所的使用時間
for(int i = 1 ; i <= n ; i++) {
System.out.printf(" %d" , time[i]);
}
System.out.printf("\n");
}
}

}

心得

久違的寫 zerojudge 程式題目,zerojudge 是刷簡單題的好區,可以快速累積新手經驗值,可以讓自己程式變優秀的好地方(◍•ᴗ•◍)❤️。

題外話:UVa 好難喔..,一個啟發式搜尋要讓我使用 range tree,我真的會哭喔 ಥ⌣ಥ。

  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: