dengxinyi il y a 6 ans
Parent
commit
a447343a22

+ 4 - 4
2008/1C/A/main.go

@@ -17,15 +17,15 @@ func (a IntSlice) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
 func leastPress(scanner *bufio.Scanner) []int {
 	caseCnt := ReadInt(scanner)
 	answer := make([]int, caseCnt)
-	for i := 0; i < caseCnt; i++ {
+	for cid := 0; cid < caseCnt; cid++ {
 		params := ReadInts(scanner)
 		// P: maximum cnt to place; K: key cnt; L: alphabet letter cnt.
 		P, K, L := params[0], params[1], params[2]
 		var freq IntSlice = ReadInts(scanner)
 		sort.Sort(freq)
-		for p, j := 0, 0; p < P && j < L; p++ {
-			for k := 0; k < K && j < L; j, k = j+1, k+1 {
-				answer[i] += (p + 1) * freq[j]
+		for p, i := 0, 0; p < P && i < L; p++ {
+			for j := 0; j < K && i < L; i, j = i+1, j+1 {
+				answer[cid] += (p + 1) * freq[i]
 			}
 		}
 	}

+ 101 - 0
2008/1C/B/B-large-practice.in

@@ -0,0 +1,101 @@
+100
+0
+1
+9
+13
+011
+0497
+9039
+12345
+86639
+7959914
+573017384
+68540544826
+32145655433361
+52081002052138
+5134180346254499
+018821973635726964
+060171285896245046145
+820252813840330980505392644
+866360884235124011799252076
+051012271841077685553686598767
+740299098518162954992321300666
+3113347538451239486060121426942
+89361459635304458328229241256140
+347628665695181180104520713482412
+0250980004336284646260149880570080
+8960178993112460870326222665194015
+33352356467248165372552257793851982
+051414959680398158557090771649406229
+0669654027314253678988660820470361479
+27758187256719083538423239953031873648
+258465557653802423579222566321933927195
+481133191312948198529988117914251491209
+0000000000740299098518162954992321300666
+0000000003113347538451239486060121426942
+0000000089361459635304458328229241256140
+0000000347628665695181180104520713482412
+0000008960178993112460870326222665194015
+0000033352356467248165372552257793851982
+0000051414959680398158557090771649406229
+0000669654027314253678988660820470361479
+0014390365181911727450596647446259821763
+0027758187256719083538423239953031873648
+0036633366660303000663666036333066636363
+0050500505505050050005000000555505050550
+0222862604202046260200044066682648626880
+0226264200640408088280246686240406448060
+0258465557653802423579222566321933927195
+0300003333633360360603003336663630360603
+0500505000050000005050005000555505500555
+0505000500050505505055005555500550050055
+0550550050550505055050555555505005000000
+0640046480204826426426684622640426424664
+0663300630630336060663303330063636333306
+0668264288844400848806862466446486240826
+0887193955655984559355692301072646912093
+0995417846325849841675320805970869070076
+1111111111111111111111111111111111111111
+1261568685698377380952394007726060642763
+1460152764571610968333269830068158468049
+1512276224600141189140143552974886158908
+1988056760136214461560531793525433524024
+2484288464886042866606080840840208448840
+2919869519678715917518421886292390522520
+3281075062173113331900004297232437530455
+3300333666030006000336066600336366360063
+3300600006306333063363033006036060330663
+3333033303630030060636663606066603666600
+3336603600006000000663000003663003063633
+3633066300063330003066360060060336330606
+3779504478876684873405076839734610843913
+3858494112259084396724726116800621610739
+4204204668268620802042844282804404088882
+4422624440624066060284048260642806600228
+4660080220424042268840804266446660064222
+4802669943891147207095443765752168400917
+5000055500505050050550005550005500050000
+5005550550500555505555505055055505050505
+5050005050005550050055550500505500055555
+5155754114778946059209127019163077214514
+5500055050555500500005005550005005005000
+5500550050505555050050550000055050000000
+5528484389330827090906104414972916035585
+5555000505000505555050500500000005005505
+5657213392236874883717016561743102878232
+5962566515073989612504330993934876505944
+6200826424466668686640208446624422022640
+6303006366060336636036300333036663333036
+6366060033306630633660666360366003006363
+6691159185150195447377326989822350798278
+6878047953485590762315052659270678080103
+7060816673934792250905005647124135865884
+7207096016132330983711602415562093145641
+7548235986286437544652444712498921788504
+7777777777777777777777777777777777777777
+8095982586096512943538537763490519894208
+8180501223736237798737496712817590576404
+8254149609355466798549497577647821826665
+8420880844646080022244444226686424468602
+9262253545461893640951174744682172318229
+9872154887939966590114260615533840602941

+ 101 - 0
2008/1C/B/B-small-practice.in

@@ -0,0 +1,101 @@
+100
+0
+1
+9
+13
+011
+277
+413
+0876
+7192
+7329
+8126
+9893
+12345
+17214
+20204
+160176
+1566843
+9716463
+54275347
+84091195
+91920744
+216589640
+845048810
+3747766429
+4802642960
+8224853717
+9712606483
+19982103842
+830497247155
+900059026267
+926804404288
+0000000000277
+0000000007329
+0000000017214
+0000000160176
+0000009716463
+0000091920744
+0000555005000
+0000845048810
+0004288666440
+0008224853717
+0019982103842
+0066006333660
+0266408208048
+0500550055050
+0550050000505
+0555000555550
+0555550500505
+0603063033330
+0800428008208
+0801564185288
+0926804404288
+1087830939945
+1111111111111
+1583319926819
+1854109578624
+2208684408826
+2282622822428
+3006306630360
+3076293173315
+3139233861342
+3363600606666
+3719669768636
+3824130392011
+4746598597199
+4787157013058
+4804248428846
+4859618176134
+4938069459189
+5005000000050
+5050500005000
+5149017057386
+5547883568237
+5550055055005
+5550055550005
+5555000555050
+6066446228844
+6204689097259
+6336663000030
+6360660306000
+6363633000033
+6600066606363
+6603063333033
+6603330660006
+6899770633780
+7384787452228
+7777777777777
+8006422004864
+8085122681688
+8148388648124
+8497502656195
+8604680006424
+8617183596076
+8668828424088
+8855851047012
+8968834961434
+9321829612918
+9433879877471
+9655492462320
+9929263750831

+ 70 - 0
2008/1C/B/main.go

@@ -0,0 +1,70 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+)
+
+// MOD ...
+const MOD = 2 * 3 * 5 * 7
+
+func countUgly(scanner *bufio.Scanner) []int {
+	caseCnt := ReadInt(scanner)
+	answer := make([]int, caseCnt)
+	for cid := 0; cid < caseCnt; cid++ {
+		s := ReadLine(scanner)
+		dp := make([][]int, len(s)+1)
+		for i := range dp {
+			dp[i] = make([]int, MOD)
+		} // dp[i][j] means the count of numbers which mod MOD equals j
+		dp[0][0] = 1
+		for i := 0; i < len(s); i++ {
+			sgn := -1
+			if i == 0 {
+				sgn = 1
+			}
+			for ; sgn <= 1; sgn += 2 {
+				num := 0
+				for j := i; j < len(s); j++ {
+					num = (num*10 + int(s[j]-'0')) % MOD
+					for x := 0; x < MOD; x++ {
+						dp[j+1][(x+sgn*num+MOD)%MOD] += dp[i][x]
+					}
+				}
+			}
+		}
+		for i := 0; i < MOD; i++ {
+			if i%2 == 0 || i%3 == 0 || i%5 == 0 || i%7 == 0 {
+				answer[cid] += dp[len(s)][i]
+			}
+		}
+	}
+	return answer
+}
+
+func main() {
+	inputFiles := []string{"B-small-practice.in", "B-large-practice.in", "test.in"}
+	outputFiles := []string{"result-small.out", "result-large.out", "test.out"}
+	const (
+		small = iota
+		large
+		test
+	)
+
+	fileType := test
+
+	fin, _ := os.Open(inputFiles[fileType])
+	defer fin.Close()
+
+	scanner := bufio.NewScanner(fin)
+	answer := countUgly(scanner)
+
+	fout, _ := os.Create(outputFiles[fileType])
+	defer fout.Close()
+
+	for i, v := range answer {
+		s := fmt.Sprintf("Case #%d: %d\n", i+1, v)
+		fout.WriteString(s)
+	}
+}

+ 100 - 0
2008/1C/B/result-large.out

@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 1
+Case #4: 2
+Case #5: 6
+Case #6: 24
+Case #7: 27
+Case #8: 64
+Case #9: 63
+Case #10: 554
+Case #11: 5052
+Case #12: 47185
+Case #13: 1235847
+Case #14: 1227497
+Case #15: 11083689
+Case #16: 99758520
+Case #17: 2690349525
+Case #18: 1960855758345
+Case #19: 1960909072918
+Case #20: 52943320456260
+Case #21: 52946841469553
+Case #22: 158833271667060
+Case #23: 476490122694949
+Case #24: 1429471945580392
+Case #25: 4288606533783222
+Case #26: 4288447898181282
+Case #27: 12865254002119726
+Case #28: 38595785181347613
+Case #29: 115787174691871269
+Case #30: 347362238039287370
+Case #31: 1042085722818015233
+Case #32: 1042085619844922679
+Case #33: 3126458041935635097
+Case #34: 3126315286222741980
+Case #35: 3126251695001560389
+Case #36: 3126255144984317304
+Case #37: 3126278517774154578
+Case #38: 3126256722515093418
+Case #39: 3126258599689156653
+Case #40: 3126253716680524263
+Case #41: 3126256932945543651
+Case #42: 3126260142353586330
+Case #43: 4052555153018976267
+Case #44: 4052555153018976267
+Case #45: 4052555153018976267
+Case #46: 4052555153018976267
+Case #47: 3126257168454045699
+Case #48: 4052555153018976267
+Case #49: 4052555153018976267
+Case #50: 4052555153018976267
+Case #51: 4052555153018976267
+Case #52: 4052555153018976267
+Case #53: 4052555153018976267
+Case #54: 4052555153018976267
+Case #55: 3126255888150504852
+Case #56: 3126257113629559461
+Case #57: 3123315974552731863
+Case #58: 3126256034469921040
+Case #59: 3126256849485697629
+Case #60: 3126256908729866798
+Case #61: 3126256843542223000
+Case #62: 4052555153018976267
+Case #63: 3126256827753902882
+Case #64: 3126244177042699035
+Case #65: 4052555153018976267
+Case #66: 4052555153018976267
+Case #67: 4052555153018976267
+Case #68: 4052555153018976267
+Case #69: 4052555153018976267
+Case #70: 3126257249676362560
+Case #71: 3126256477387445168
+Case #72: 4052555153018976267
+Case #73: 4052555153018976267
+Case #74: 4052555153018976267
+Case #75: 3126256891431102367
+Case #76: 4052555153018976267
+Case #77: 4052555153018976267
+Case #78: 4052555153018976267
+Case #79: 3126256805997177673
+Case #80: 4052555153018976267
+Case #81: 4052555153018976267
+Case #82: 3126262206857073532
+Case #83: 4052555153018976267
+Case #84: 3126256831612350998
+Case #85: 3126261422741512380
+Case #86: 4052555153018976267
+Case #87: 4052555153018976267
+Case #88: 4052555153018976267
+Case #89: 3126257282301440399
+Case #90: 3126255258238421448
+Case #91: 3126256713219041948
+Case #92: 3126256504756195448
+Case #93: 3126256904062108234
+Case #94: 4052555153018976267
+Case #95: 3126254585561920475
+Case #96: 3126256591400460705
+Case #97: 3126256845829422841
+Case #98: 4052555153018976267
+Case #99: 3126257406778969053
+Case #100: 3126252869898418789

+ 100 - 0
2008/1C/B/result-small.out

@@ -0,0 +1,100 @@
+Case #1: 1
+Case #2: 0
+Case #3: 1
+Case #4: 2
+Case #5: 6
+Case #6: 7
+Case #7: 8
+Case #8: 27
+Case #9: 20
+Case #10: 23
+Case #11: 17
+Case #12: 18
+Case #13: 64
+Case #14: 61
+Case #15: 81
+Case #16: 202
+Case #17: 582
+Case #18: 586
+Case #19: 1677
+Case #20: 1663
+Case #21: 1739
+Case #22: 4960
+Case #23: 5097
+Case #24: 14913
+Case #25: 12902
+Case #26: 15121
+Case #27: 15021
+Case #28: 45134
+Case #29: 136503
+Case #30: 140458
+Case #31: 123300
+Case #32: 413343
+Case #33: 452709
+Case #34: 400221
+Case #35: 441774
+Case #36: 427194
+Case #37: 422577
+Case #38: 531441
+Case #39: 412857
+Case #40: 531441
+Case #41: 408267
+Case #42: 406206
+Case #43: 531441
+Case #44: 531441
+Case #45: 531441
+Case #46: 531441
+Case #47: 531441
+Case #48: 531441
+Case #49: 531441
+Case #50: 531441
+Case #51: 410283
+Case #52: 369900
+Case #53: 421959
+Case #54: 398640
+Case #55: 407153
+Case #56: 412014
+Case #57: 531441
+Case #58: 531441
+Case #59: 531441
+Case #60: 410000
+Case #61: 414539
+Case #62: 531441
+Case #63: 409758
+Case #64: 408643
+Case #65: 409398
+Case #66: 409887
+Case #67: 531441
+Case #68: 410163
+Case #69: 418663
+Case #70: 531441
+Case #71: 531441
+Case #72: 409984
+Case #73: 409867
+Case #74: 531441
+Case #75: 531441
+Case #76: 531441
+Case #77: 531441
+Case #78: 412959
+Case #79: 531441
+Case #80: 531441
+Case #81: 531441
+Case #82: 531441
+Case #83: 531441
+Case #84: 531441
+Case #85: 408769
+Case #86: 409215
+Case #87: 531441
+Case #88: 531441
+Case #89: 405220
+Case #90: 405254
+Case #91: 411322
+Case #92: 531441
+Case #93: 409588
+Case #94: 531441
+Case #95: 410373
+Case #96: 409685
+Case #97: 412002
+Case #98: 411344
+Case #99: 407139
+Case #100: 413168

+ 5 - 0
2008/1C/B/test.in

@@ -0,0 +1,5 @@
+4
+1
+9
+011
+12345

+ 4 - 0
2008/1C/B/test.out

@@ -0,0 +1,4 @@
+Case #1: 0
+Case #2: 1
+Case #3: 6
+Case #4: 64

+ 63 - 0
2008/1C/B/utils.go

@@ -0,0 +1,63 @@
+package main
+
+import (
+	"bufio"
+	"strconv"
+	"strings"
+)
+
+// Pair ...
+type Pair struct {
+	_1 int
+	_2 int
+}
+
+// Pair64 ...
+type Pair64 struct {
+	_1 int64
+	_2 int64
+}
+
+// ReadLine ...
+func ReadLine(s *bufio.Scanner) string {
+	s.Scan()
+	return s.Text()
+}
+
+// ReadInt ...
+func ReadInt(s *bufio.Scanner) int {
+	s.Scan()
+	i, _ := strconv.ParseInt(s.Text(), 10, 32)
+	return int(i)
+}
+
+// ReadInt64 ...
+func ReadInt64(s *bufio.Scanner) int64 {
+	s.Scan()
+	i, _ := strconv.ParseInt(s.Text(), 10, 64)
+	return i
+}
+
+// ReadInts ...
+func ReadInts(s *bufio.Scanner) []int {
+	s.Scan()
+	strs := strings.Split(s.Text(), " ")
+	nums := make([]int, len(strs))
+	for i, str := range strs {
+		num, _ := strconv.ParseInt(str, 10, 32)
+		nums[i] = int(num)
+	}
+	return nums
+}
+
+// ReadInt64s ...
+func ReadInt64s(s *bufio.Scanner) []int64 {
+	s.Scan()
+	strs := strings.Split(s.Text(), " ")
+	nums := make([]int64, len(strs))
+	for i, str := range strs {
+		num, _ := strconv.ParseInt(str, 10, 64)
+		nums[i] = num
+	}
+	return nums
+}