Browse Source

AC 17 1A C small

dengxinyi 6 năm trước cách đây
mục cha
commit
cc7c29514d

+ 7 - 0
2017/1A/C/C-large-answers.out

@@ -0,0 +1,7 @@
+Case #1: 5
+Case #2: 2
+Case #3: IMPOSSIBLE
+Case #4: 5
+Case #5: IMPOSSIBLE
+Case #6: 11
+Case #7: 11459

+ 101 - 0
2017/1A/C/C-large-practice.in

@@ -0,0 +1,101 @@
+100
+11 5 16 5 0 0
+3 1 3 2 2 0
+3 1 3 2 1 0
+2 1 5 1 1 1
+725751908 234770432 757124227 414372118 37176887 11082645
+117770460 3602109 187205833 47485444 14556045 1085579
+526340678 141 99181565 277994519 3 55787217
+914161769 1 906996925 457080883 0 1
+952670340 1 949923053 476335170 0 1
+5212 1 719 3065 2 861
+1509 86 614 722 7 3
+968244257 1 481427177 484122127 0 2
+993857613 1 247476410 496928807 0 4
+981271629 1 488920190 490635816 0 2
+921960185 1 923550914 460980092 0 1
+951913479 1 942899114 475956738 0 1
+936265326 139046400 605096252 444199623 102057842 0
+941439664 1 935833337 470719831 0 1
+99 2 2 8 0 0
+941631211 1 935395954 470815606 0 1
+5131 1 7266 2717 1 229
+907885417 1 900851442 453942708 0 1
+136860431 612772 535185595 43497379 4553408 3582052
+985367103 1 981283051 492683552 0 1
+905048636 1 906459230 452524319 0 1
+967165788 1 323652779 483582894 0 3
+976837389 1 970370845 488418695 0 1
+8500 1 2852 4176 4 941
+916547454 1 307830195 458273729 0 3
+28 5 50 7 0 0
+80 15 55 89 33 87
+984567700 1 985571444 492283850 0 1
+921238736 1 917967276 460619367 0 1
+334008012 312 801067539 164052849 2 17056507
+264985375 209 853676392 114864786 3 1214663
+693932817 143 384718097 27014780 4 4479737
+992418781 1 497966087 496209392 0 2
+624611197 23333405 201510620 282860934 1542699 91339727
+92 1 19 23 0 0
+972326723 1 966236949 486163360 0 1
+906513147 1 901949922 453256574 0 1
+324846294 93197324 739903381 971744139 47903797 614455020
+934294210 1 941009874 467147105 0 1
+978108272 1 328054287 489054138 0 3
+940097167 1 944146887 470048582 0 1
+824673877 344832108 439913803 897833428 64696307 519721170
+978058476 69264805 502785741 176028090 0 0
+918849105 1 917810924 459424551 0 1
+958144883 1 319273219 479072443 0 3
+970680436 1 977621671 485340218 0 1
+499732805 23200526 886607313 718765578 8329855 12625466
+22669632 9858 289125183 10864997 0 0
+937709468 1 929962884 468854734 0 1
+959762410 1 957309533 479881205 0 1
+935308136 1 927095270 467654068 0 1
+939404988 1 311039812 469702495 0 3
+978989882 1 490668513 489494942 0 2
+989547243 1 997481256 494773622 0 1
+88 7 48 60 0 0
+994462077 1 331100403 497231040 0 3
+915847865 1 917026118 457923933 0 1
+977907140 1 981864943 488953571 0 1
+967950941 1 971483298 483975471 0 1
+6933275 469339107 607811212 629431446 0 0
+95 4 23 34 0 0
+986741409 1 987075618 493370705 0 1
+927546292 1 929217086 463773147 0 1
+26 1 60 13 3 2
+192323883 135764477 651963415 39522371 0 0
+277182562 263867849 737241726 226958515 451169806 64867577
+966748507 1 241350226 483374254 0 4
+953700244 1 953844937 476850123 0 1
+945286590 1 237204945 472643295 0 4
+465361920 38550306 957553706 241393712 91690657 32218286
+1000000000 1 1000000000 1 1 0
+970699663 1 969890653 485349831 0 1
+911515622 1 459852670 455757811 0 2
+1673 1689 3174 8237 24 621
+995348124 1 246547534 497674065 0 4
+955298760 1 952844854 477649380 0 1
+902023689 1 902402179 451011844 0 1
+655719062 8975861 300553772 5272628 504954 539016
+934088033 1 234119449 467044020 0 4
+902566214 1 225540804 451283111 0 4
+970946455 1 962254559 485473227 0 1
+953736870 1 954603569 476868436 0 1
+968719221 1 971842106 484359611 0 1
+650146870 35491381 391280961 317457035 13853820 36605651
+909241679 1 303210267 454620839 0 3
+149004763 36923701 507281605 67603054 105238 4902808
+984590366 1 246806267 492295184 0 4
+972703982 1 483491570 486351993 0 2
+946747973 1 947062020 473373987 0 1
+911735104 1 905613671 455867551 0 1
+780961121 4305562 247064148 400190859 56930917 6683679
+944666613 1 475966964 472333305 0 2
+954428054 1 958678391 477214027 0 1
+944780431 1 937019863 472390215 0 1
+908200694 1 913158478 454100348 0 1
+36 41 85 76 28 49

+ 100 - 0
2017/1A/C/C-small-answers.out

@@ -0,0 +1,100 @@
+Case #1: 5
+Case #2: 2
+Case #3: IMPOSSIBLE
+Case #4: 5
+Case #5: 162
+Case #6: 164
+Case #7: 28
+Case #8: 27
+Case #9: 158
+Case #10: 158
+Case #11: IMPOSSIBLE
+Case #12: IMPOSSIBLE
+Case #13: 14
+Case #14: 84
+Case #15: 166
+Case #16: 4
+Case #17: 162
+Case #18: 157
+Case #19: 21
+Case #20: 159
+Case #21: 38
+Case #22: 39
+Case #23: 16
+Case #24: 53
+Case #25: IMPOSSIBLE
+Case #26: 160
+Case #27: 20
+Case #28: 171
+Case #29: 157
+Case #30: 20
+Case #31: 162
+Case #32: IMPOSSIBLE
+Case #33: 9
+Case #34: 78
+Case #35: 19
+Case #36: 78
+Case #37: 14
+Case #38: 170
+Case #39: 169
+Case #40: 5
+Case #41: 158
+Case #42: 169
+Case #43: 12
+Case #44: 172
+Case #45: 14
+Case #46: 53
+Case #47: 156
+Case #48: 83
+Case #49: 5
+Case #50: 41
+Case #51: 54
+Case #52: 81
+Case #53: 163
+Case #54: 22
+Case #55: 2
+Case #56: 166
+Case #57: 11
+Case #58: 167
+Case #59: 54
+Case #60: 170
+Case #61: 1
+Case #62: 160
+Case #63: 11
+Case #64: 171
+Case #65: 171
+Case #66: 159
+Case #67: 79
+Case #68: 4
+Case #69: 168
+Case #70: 82
+Case #71: 53
+Case #72: 159
+Case #73: 174
+Case #74: 37
+Case #75: IMPOSSIBLE
+Case #76: 20
+Case #77: 168
+Case #78: 41
+Case #79: 162
+Case #80: 15
+Case #81: 3
+Case #82: 16
+Case #83: 3
+Case #84: 161
+Case #85: 13
+Case #86: 13
+Case #87: 170
+Case #88: 53
+Case #89: 12
+Case #90: 39
+Case #91: IMPOSSIBLE
+Case #92: 15
+Case #93: 173
+Case #94: 166
+Case #95: 163
+Case #96: 162
+Case #97: 155
+Case #98: 164
+Case #99: 54
+Case #100: 41

+ 101 - 0
2017/1A/C/C-small-practice.in

@@ -0,0 +1,101 @@
+100
+11 5 16 5 0 0
+3 1 3 2 2 0
+3 1 3 2 1 0
+2 1 5 1 1 1
+96 1 94 47 0 1
+93 1 95 47 0 1
+93 1 92 48 1 7
+92 1 19 23 0 0
+95 1 90 47 0 1
+91 1 95 44 0 1
+19 1 43 43 4 3
+16 1 34 92 7 10
+14 1 28 8 1 2
+97 1 50 48 0 2
+92 1 97 47 0 1
+65 7 19 41 1 27
+97 1 92 48 0 1
+90 1 91 45 0 1
+77 1 97 34 3 4
+93 1 94 45 0 1
+97 1 22 48 0 4
+93 1 22 50 0 4
+65 1 81 22 3 4
+92 1 30 49 0 3
+88 7 48 60 0 0
+92 1 93 46 0 1
+99 1 85 44 1 25
+99 1 97 50 0 1
+91 1 94 44 0 1
+58 1 86 15 1 7
+98 1 92 48 0 1
+48 29 87 88 25 19
+95 4 23 34 0 0
+90 1 46 45 0 2
+33 1 76 52 1 39
+91 1 46 45 0 2
+23 1 83 13 2 13
+99 1 98 49 0 1
+99 1 95 50 0 1
+36 41 85 76 28 49
+92 1 93 45 0 1
+98 1 97 49 0 1
+17 1 77 4 3 1
+97 1 100 49 0 1
+23 1 86 6 2 5
+96 1 31 47 0 3
+90 1 90 45 0 1
+96 1 48 49 0 2
+86 12 75 85 28 38
+99 1 22 53 0 4
+90 1 32 47 0 3
+98 1 46 49 0 2
+90 1 95 46 0 1
+36 1 88 21 2 3
+18 36 63 7 14 7
+99 1 94 49 0 1
+20 4 27 9 1 2
+100 1 92 51 0 1
+99 1 30 51 0 3
+98 1 100 48 0 1
+99 2 2 8 0 0
+96 1 90 48 0 1
+21 7 85 11 8 1
+100 1 100 49 0 1
+98 1 99 49 0 1
+91 1 92 46 0 1
+92 1 47 45 0 2
+80 15 55 89 33 87
+99 1 94 50 0 1
+98 1 48 48 0 2
+91 1 31 47 0 3
+95 1 91 47 0 1
+98 1 100 50 0 1
+90 1 22 45 0 4
+56 2 24 86 4 8
+98 1 86 62 1 35
+100 1 97 49 0 1
+97 1 23 52 0 4
+99 1 92 48 0 1
+94 1 45 33 2 1
+92 1 54 13 34 9
+26 1 60 13 3 2
+79 32 70 15 14 12
+91 1 94 46 0 1
+28 5 50 7 0 0
+35 1 42 17 3 1
+99 1 100 48 0 1
+97 1 31 48 0 3
+64 1 65 32 4 9
+90 1 23 46 0 4
+17 1 8 34 2 1
+86 1 42 48 2 10
+100 1 100 50 0 1
+96 1 96 48 0 1
+99 1 90 50 0 1
+100 1 91 49 0 1
+92 1 90 45 0 1
+98 1 90 50 0 1
+99 1 32 48 0 3
+100 1 23 52 0 4

+ 114 - 0
2017/1A/C/main.go

@@ -0,0 +1,114 @@
+package main
+
+import (
+	"fmt"
+	"math"
+)
+
+var hd, ad, hk, ak, b, d int
+var hp int
+
+type state struct {
+	hd int
+	ad int
+	hk int
+	ak int
+	t  int
+	c  bool
+}
+
+func getBuffCnt() int {
+	if b == 0 {
+		return 0
+	}
+	bAddA := int(math.Ceil(float64(hk) / float64(ad)))
+	for cnt := 1; ; cnt++ {
+		nextBAA := cnt + int(math.Ceil(float64(hk)/float64(ad+cnt*b)))
+		if bAddA < nextBAA {
+			return cnt - 1
+		}
+		bAddA = nextBAA
+	}
+}
+
+func nextDebuffCnt() int {
+	if d == 0 || ak == 0 {
+		return 0
+	} else if ak <= d {
+		return 1
+	}
+	killed := int(math.Ceil(float64(hd) / float64(ak)))
+	minAk := int(math.Ceil(float64(hd)/float64(killed))) - 1
+	return int(math.Ceil(float64(ak-minAk) / float64(d)))
+}
+
+func simD(debuffCnt, t int, c bool) int {
+	if debuffCnt == 0 {
+		return t
+	}
+	if hp <= ak-d { // Need cure
+		if c { // Cured?
+			return 0 // Die
+		}
+		hp = hd - ak
+		return simD(debuffCnt, t+1, true) // Cure
+	}
+	ak = maxInt(0, ak-d)
+	hp -= ak
+	return simD(debuffCnt-1, t+1, false) // Debuff
+}
+
+func simBA(buffCnt int, st state) int { // Simulate buff and attack
+	if st.hk <= 0 { // Kill
+		return st.t
+	}
+	if st.hd <= st.ak && st.ad < st.hk { // Need cure
+		if st.c { // Cured?
+			return 0 // Die
+		}
+		return simBA(buffCnt, state{hd - st.ak, st.ad, st.hk, st.ak, st.t + 1, true}) // Cure
+	}
+	if buffCnt != 0 {
+		return simBA(buffCnt-1, state{st.hd - st.ak, st.ad + b, st.hk, st.ak, st.t + 1, false}) // Buff
+	}
+	return simBA(0, state{st.hd - st.ak, st.ad, st.hk - st.ad, st.ak, st.t + 1, false}) // Attack
+}
+
+func main() {
+	var T int
+	fmt.Scan(&T)
+	for tc := 1; tc <= T; tc++ {
+		fmt.Scan(&hd, &ad, &hk, &ak, &b, &d)
+		hp = hd
+
+		println("Case", tc)
+
+		buff := getBuffCnt()
+		turn := simBA(buff, state{hp, ad, hk, ak, 0, false})
+		debuff, dt := nextDebuffCnt(), 0
+		for debuff != 0 {
+			dt = simD(debuff, dt, false)
+			if dt == 0 {
+				break
+			}
+			dbat := simBA(buff, state{hp, ad, hk, ak, dt, false})
+			if turn == 0 || dbat < turn {
+				turn = dbat
+			}
+			debuff = nextDebuffCnt()
+		}
+		fmt.Printf("Case #%d: ", tc)
+		if turn == 0 {
+			fmt.Println("IMPOSSIBLE")
+		} else {
+			fmt.Println(turn)
+		}
+	}
+}
+
+func maxInt(x, y int) int {
+	if x < y {
+		return y
+	}
+	return x
+}

+ 6 - 0
2017/1A/C/test.in

@@ -0,0 +1,6 @@
+5
+11 5 16 5 0 0
+3 1 3 2 2 0
+3 1 3 2 1 0
+2 1 5 1 1 1
+90 1 91 45 0 1

+ 5 - 0
2017/1A/C/test.out

@@ -0,0 +1,5 @@
+Case #1: 5
+Case #2: 2
+Case #3: IMPOSSIBLE
+Case #4: 5
+Case #5: 157