60th, 734.91pts, +0/0 challenge
Volatility: 420->414
ååãã¤ãã¹ã®ç¹ãåã£ã¦ä¹
ãã¶ãã®Div2ã250ã¨500ãæ©è§£ããã¦1000ã¯è§£ããã
9åç®ã®Room Winã
250: CostOfDancing
ä¸ãããããªã¹ãããå°ããé ã«\(K\)åé¸ãã§ç·åãåºåããã ã
class CostOfDancing: def minimum(self, K, danceCost): danceCost = list(danceCost) danceCost.sort() return sum(danceCost[:K])
å¾ããèããã¨ãã£ã¡ã®æ¹ãã³ã¼ãæ°ãå°ãªãã¦ããã£ããããª
class CostOfDancing: def minimum(self, K, danceCost): return sum(sorted(danceCost)[:K])
500: BuildingHeightsEasy
ä¸ãããããªã¹ããã\(M\)åè¦ç´ ãé¸ãã§ããã®ä¸ã®æå¤§ã®è¦ç´ ã¨ãã®ä»ã®è¦ç´ ã®å·®ã®ç·åãæå°ã®ãã®ãçãã
ã½ã¼ããã¦ãã\(M\)ãã¤è¦ã¦ããã ã
class BuildingHeightsEasy: def minimum(self, M, heights): heights = list(heights) heights.sort(reverse=True) ret = 100000000000000000 for i in xrange(len(heights) - M + 1): cost = heights[i] * M - sum(heights[i:i + M]) ret = min(ret, cost) return ret
1000: GameOfSegments
\(N\)è§å½¢ãä¸ããããã
äºäººã®ãã¬ã¤ã¤ã¼ã交äºã«ä»¥ä¸ã®2ã¤ã®ç·ãå¼ãæä½ã®ãã¡æåã®ãã®ãããã¨ãã交差ããã«æå¾ã¾ã§æ¸ããã®ã¯ã©ã¡ãããçãã
- ããããã®è¾ºã®ä¸ã«ç·ãå¼ã
- ããããã®å¯¾è§ç·ã«ç·ãå¼ã
çµãã£ãå¾ã«Practiceã§ææ¦ãããã©çµå±è§£ããªãã£ãã
以ä¸ã®2ã¤ã使ã£ã¦ã¦ãã¨ã¼ãªåçè¨ç»æ³ã¨ãgrundyæ°ã¨ã試ãããã©ãã¾ãããã(ï¼)
- 辺ã®ä¸ã«ç·ãå¼ãæã¯\(N\)è§å½¢ã\(N-2\)è§å½¢ã«ãã¦ããã¨èãã¦ãã
- ã¾ã対è§ç·ãå¼ãã¨ãã«ã¯ã\(N\)è§å½¢ã\(i\)è§å½¢ã¨\(N - i - 2 \)è§å½¢ã«åãã¦ããã¨èãã¦ãã
èãæ¹ãééã£ã¦ããã®ãã³ã¼ããééã£ã¦ããã®ãå顿ã誤èªãã¦ããã®ãâ¦â¦
追è¨ãã³ã¼ããééã£ã¦ãã¾ããorz
grundyæ°ããã®ã¾ã¾å®è£
ããã ãã§è§£ãã¾ããã
grundyæ°ã¯ã0以ä¸ã®æ´æ°ã®ãã¡æ¬¡ã«å°éã§ããç¶æ
ã®grundyæ°ã«å«ã¾ããªãæå°ã®ãã®ã«ãªãã¾ã
ä»åã¿ããã«éä¸ã§2ã¤ã«å¥ããã¨ãã«ã¯ãããã®XORãåãã°ããã¿ããã§ãã
è² ãã®æã¯0ã«ãªãã¾ã
ãã®ç³»çµ±ã®åé¡ã¯è»æ¬ã®ã4-2 ã²ã¼ã ã®å¿ åæ³ãç·¨ã¿åºãï¼ãã®é ç®ãããããããã§ã
![ããã°ã©ãã³ã°ã³ã³ãã¹ããã£ã¬ã³ã¸ãã㯠[第2ç]ã?åé¡è§£æ±ºã®ã¢ã«ã´ãªãºã æ´»ç¨åã¨ã³ã¼ãã£ã³ã°ãã¯ããã¯ãéãã? ããã°ã©ãã³ã°ã³ã³ãã¹ããã£ã¬ã³ã¸ãã㯠[第2ç]ã?åé¡è§£æ±ºã®ã¢ã«ã´ãªãºã æ´»ç¨åã¨ã³ã¼ãã£ã³ã°ãã¯ããã¯ãéãã?](http://ecx.images-amazon.com/images/I/41bHxtpurqL._SL160_.jpg)
- ä½è : ç§èæå,岩ç°é½ä¸,åå·å®ç¨
- åºç社/ã¡ã¼ã«ã¼: ãã¤ãã
- çºå£²æ¥: 2012/01/28
- ã¡ãã£ã¢: åè¡æ¬ï¼ã½ããã«ãã¼ï¼
- è³¼å ¥: 25人 ã¯ãªãã¯: 473å
- ãã®ååãå«ãããã° (32ä»¶) ãè¦ã
class GameOfSegments: def winner(self, N): if N <= 4: return 1 grundy = [0] * (N + 1) grundy[2] = 1 grundy[3] = 1 for i in xrange(4, N + 1): temp = [] temp.append(grundy[i - 2]) for j in xrange(3, i): a = j b = i - a + 2 temp.append(grundy[a - 2] ^ grundy[b - 2]) check = set(temp) for j in xrange(N + 2): if j not in check: grundy[i] = j break return 2 if grundy[N] == 0 else 1