ä¿®è¡ã®æ ã«åºãã競æããã°ã©ãã³ã°ãããã»ããããã£ã½ã
Easyã®åé¡ã¯è§£èª¬èªãã°ãããã¯ãããã ãã©ãªãâ¦â¦
TopCoder SRM 655 Div1 x-- 1323->1312
writeã®è§£èª¬
250: BichromePainting
'W'ã¨'B'ã®ããããã§æ§æãããæ£æ¹å½¢ã®ç¤é¢ã¨ãæ£æ¹å½¢ã®ãã©ã·ãµã¤ãº\(k\)ãä¸ãããã
ãã¹ã¦'W'ã®ç¤é¢ããã好ããªåæ°ã ãæ£æ¹å½¢ã®ãã©ã·ã§ç¤é¢ã'W'ã¨'B'ã§å¡ã£ã¦ãä¸ããããç¤é¢ãä½ããããçãã
端ããé©å½ã«åãã¦è§£ããã¨æã£ããã©ãæåºãã¦ããåä¾ã«æ°ã¥ããorz
æå¾ã®ç¤é¢ããéã«æ»ãã¦èãã¦ããã®ãå ¸åããã(ï¼)
# -*- coding: utf-8 -*- import math,string,itertools,fractions,heapq,collections,re,array,bisect class BichromePainting: def isThatPossible(self, board, k): n = len(board) board = [list(board[i]) for i in xrange(n)] while True: complete = True for i in xrange(n - k + 1): for j in xrange(n - k + 1): white = False black = False for p in xrange(i, i + k): for q in xrange(j, j + k): white |= board[p][q] == 'W' black |= board[p][q] == 'B' if white != black: complete = False for p in xrange(i, i + k): for q in xrange(j, j + k): board[p][q] = '.' if complete: break for i in xrange(n): for j in xrange(n): if board[i][j] != '.': return 'Impossible' return 'Possible'
TopCoder Open 2015 Round 1A x-- 1312->1237
250: Similars
æå°å¤\(L\)ã¨æ大å¤\(R\)ã®éã®æ°å¤ã§å ±éããæ°åã®æ°ã®æ大æ°ãçãã
æ°åã®ç¶æ ã¯ããã ã1024éããããªãã®ã§ããã®ç¶æ ã«ã¾ã§å§ç¸®ãã¦ããæ°åã®éè¤ã®æç¡ãè¨ç®ããã°ããããã
# -*- coding: utf-8 -*- import math,string,itertools,fractions,heapq,collections,re,array,bisect class Similars: def maxsim(self, L, R): count = collections.Counter() for i in xrange(L, R + 1): used = 0 for b in set(str(i)): used |= 1 << int(b) if used in count: count[used] = 2 else: count[used] = 1 bit = list(count.elements()) L = len(bit) result = 0 for i in xrange(L): for j in xrange(i + 1, L): result = max(result, bin(bit[i] & bit[j]).count('1')) return result
TopCoder SRM 656 Div1 --- 1237->1225
RandomPancakeStack
\(d\)åã®ãã³ã±ã¼ãã®ãããããä¸ãããã(\(1\le d \le 250\))
ãã³ã±ã¼ãã¯ä¸ã¤ç®ããé ã«å¤§ããã\(1, 2, 3,\dots\)ã¨ãªã£ã¦ãã
ã©ã³ãã ã«ãã³ã±ã¼ããé¸ã³ç¶ããæã®ããããã®åè¨ã®æå¾
å¤ãçãã
ãã ããä¸åº¦ä½¿ã£ããã³ã±ã¼ãã¨ãåã«é¸ãã ãã³ã±ã¼ããããå°ããªãã³ã±ã¼ãã¯é¸ã¶ãã¨ãã§ããªã
ããã«å
¸åçãªæå¾
å¤ã®åçè¨ç»æ³ã ã¨æã£ããã©æ¬çªä¸ã«ã¯éãã(ã³ã¼ããééã£ã¦ãã¦ã±ã¼ãã®å¤§ãããéé ã«èãã¦ãã
\(i\)çªç®ã®ã±ã¼ãã\(j\)çªç®ã«é¸ã°ããæå¾
å¤ã\(dp[i][j]\)ã¨ããã¨\(dp[i][j] = \sum_{i < k} \frac{1}{d - j}dp[k][j - 1]\)ãæãç«ã¤ã®ã§ãå
¨é¨ã®æå¾
å¤ãè¨ç®ããå¾ã«ãããããããã¦è¶³ãã°ãã
dpã®åãéã«ãªã£ã¦ãã¦ãããããã®é¨åãå転ãã¦ç¡çç¢çã¤ãã¤ã¾ãåããã¦ããã³ã¼ã
# -*- coding: utf-8 -*- import math,string,itertools,fractions,heapq,collections,re,array,bisect class RandomPancakeStack: def expectedDeliciousness(self, d): L = len(d) p = 1.0 / L dp = [[0] * L for i in xrange(L)] for i in xrange(L): dp[i][0] = p for l in xrange(1, L): prob = 1.0 / (L - l) for s in xrange(L - 1): if dp[s][l - 1] <= 0: continue for t in xrange(s + 1, L): dp[t][l] += dp[s][l - 1] * prob result = 0 for l in xrange(L): for j in xrange(L): result += dp[j][l] * d[L - j - 1] return result