锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
2 #Runtime: 911 ms (Beats 96.43%)
3 #Memory: 136.7 MB (Beats 10.71%)
4
5 # Definition for a binary tree node.
6 # class TreeNode(object):
7 # def __init__(self, val=0, left=None, right=None):
8 # self.val = val
9 # self.left = left
10 # self.right = right
11 class Solution(object):
12 def pseudoPalindromicPaths (self, root, cnt = 0):
13 """
14 :type root: TreeNode
15 :rtype: int
16 """
17 if not root:
18 return 0
19 cnt ^= 1 << (root.val - 1)
20 if root.left is None and root.right is None:
21 return 1 if cnt & (cnt - 1) == 0 else 0
22 return self.pseudoPalindromicPaths(root.left, cnt) + self.pseudoPalindromicPaths(root.right, cnt)
23
]]>
2 #Runtime: 36 ms (Beats 100%)
3 #Memory: 17 MB (Beats 79.25%)
4
5 class Solution:
6 def soupServings(self, n: int) -> float:
7 if n >= 4276:
8 return 1.0
9 @lru_cache(None)
10 def dp(x, y):
11 if x <= 0 and y > 0:
12 return 1
13 if x <= 0 and y <= 0:
14 return 0.5
15 if x > 0 and y <= 0:
16 return 0
17 return (dp(x - 100, y) + dp(x - 75, y - 25) + dp(x - 50, y - 50) + dp(x - 25, y - 75)) * 0.25
18
19 return dp(1.0 * n, 1.0 * n)
]]>
2 #Runtime: 41 ms (Beats 96.36%)
3 #Memory: 16.7 MB (Beats 19.78%)
4
5 class Solution:
6 def PredictTheWinner(self, nums: List[int]) -> bool:
7 n = len(nums)
8 @lru_cache(None)
9 def dp(i, j):
10 return 0 if i > j else max(-dp(i + 1, j) + nums[i], -dp(i, j - 1) + nums[j])
11
12 return dp(0, n -1) >= 0
]]>
2 #Runtime: 960 ms (Beats 33.33%)
3 #Memory: 121.3 MB (Beats 11.11%)
4
5 class Solution(object):
6 def tallestBillboard(self, rods):
7 """
8 :type rods: List[int]
9 :rtype: int
10 """
11 ans = {}
12 def DFS(i, dif):
13 if (i, dif) in ans:
14 return ans[(i, dif)]
15 if i >= len(rods):
16 if dif:
17 return float('-inf')
18 return 0
19 l = DFS(i + 1, dif + rods[i])
20 skip = DFS(i + 1, dif)
21 s = DFS(i + 1, abs(rods[i] - dif)) + min(dif, rods[i])
22 ans[(i, dif)] = max(l, s, skip)
23 return ans[(i, dif)]
24
25
26 return DFS(0, 0)
]]>
2 #Runtime: 2024 ms (Beats 68.42%)
3 #Memory: 41.4 MB (Beats 12.3%)
4
5 class Solution:
6 def countRoutes(self, locations: List[int], start: int, finish: int, fuel: int) -> int:
7 MOD = 10 ** 9 + 7
8
9 @lru_cache(None)
10 def DP(p, x):
11 if x < 0:
12 return 0
13 t = 0
14 if p == finish:
15 t += 1
16 for i in range(len(locations)):
17 if i != p:
18 t += DP(i, x - abs(locations[i] - locations[p]))
19 return t
20
21 return DP(start, fuel) % MOD
]]>
2 #Runtime: 2652 ms (Beats 28.65%)
3 #Memory: 78.9 MB (Beats 49.52%)
4
5 class Solution:
6 def countPaths(self, grid: List[List[int]]) -> int:
7 MOD = 10 ** 9 + 7
8 n, m = len(grid), len(grid[0])
9 dp = [[-1 for _ in range(m)] for _ in range(n)]
10
11 def cal(r, c, pre):
12 nonlocal n, m
13 if r < 0 or c < 0 or r >= n or c >= m or grid[r][c] <= pre:
14 return 0
15 if dp[r][c] != -1:
16 return dp[r][c]
17 dir = [[1, 0], [-1, 0], [0, -1], [0, 1]]
18 t = 1
19 for d in dir:
20 tr = r + d[0]
21 tc = c + d[1]
22 t += cal(tr, tc, grid[r][c])
23 dp[r][c] = t
24 return t
25
26 ans = 0
27 for r in range(n):
28 for c in range(m):
29 ans = (ans + cal(r, c, -1)) % MOD
30 return ans
]]>
2 #Runtime: 173 ms (Beats 71.74%)
3 #Memory: 21.8 MB (Beats 51.9%)
4
5 class Solution:
6 def numOfWays(self, nums: List[int]) -> int:
7 MOD = 10 ** 9 + 7
8
9 def cal(seq):
10 if not seq:
11 return 1
12 root = seq[0]
13 l_tree = [num for num in seq if num < root]
14 r_tree = [num for num in seq if num > root]
15 return math.comb(len(l_tree) + len(r_tree), len(l_tree)) * cal(l_tree) * cal(r_tree) % MOD
16 return (cal(nums) - 1) % MOD
]]>
2 #Runtime: 761 ms (Beats 87.80%)
3 #Memory: 20.5 MB (Beats 5.95%)
4
5 class Solution:
6 def minCost(self, n: int, cuts: List[int]) -> int:
7 cuts.append(0)
8 cuts.append(n)
9 cuts.sort()
10
11 @functools.lru_cache(None)
12 def dp(x, y):
13 if x >= y - 1:
14 return 0
15 return cuts[y] - cuts[x] + min((dp(x, k) + dp(k, y) for k in range(x + 1, y)), default = 0)
16 return dp(0, len(cuts) - 1)
]]>
鐢ㄤ簡姣旇緝鏆村姏鐨勫仛娉曪紝絀蜂婦鎵鏈夋搷浣滅殑鍙兘鎬э紝鐢ㄤ簡Discussion涓褰曚笅宸茬粡鏆村姏鏋氫婦榪囩殑緇撴灉錛屽惁鍒欎細TLE
2 #Runtime: 222 ms (Beats 21.95%)
3 #Memory: 20.5 MB (Beats 7.32%)
4
5 class Solution(object):
6 def isScramble(self, s1, s2):
7 """
8 :type s1: str
9 :type s2: str
10 :rtype: bool
11 """
12 if len(s1) != len(s2):
13 return False
14 if s1 == s2:
15 return True
16 if len(s1) == 1:
17 return False
18 t = s1 + " " + s2
19 if t in self.solved:
20 return self.solved[t]
21 for i in range(1, len(s1)):
22 if self.isScramble(s1[0:i], s2[0:i]) and self.isScramble(s1[i:], s2[i:]):
23 self.solved[t] = True
24 return True
25 if self.isScramble(s1[0:i], s2[len(s1)-i:]) and self.isScramble(s1[i:], s2[0:len(s1)-i]):
26 self.solved[t] = True
27 return True
28 self.solved[t] = False
29 return False
30 solved = {}
]]>
2 #Runtime: 100 ms (Beats 98.35%)
3 #Memory: 14.7 MB (Beats 86.50%)
4
5 class Node:
6 def __init__(self, val, isLeaf, topLeft = None, topRight = None, bottomLeft = None, bottomRight = None):
7 self.val = val
8 self.isLeaf = isLeaf
9 self.topLeft = topLeft
10 self.topRight = topRight
11 self.bottomLeft = bottomLeft
12 self.bottomRight = bottomRight
13
14
15 class Solution:
16 def isLeaf(self, grid, x, y, w):
17 for i in range(x, x + w):
18 for j in range(y, y + w):
19 if grid[x][y] != grid[i][j]:
20 return False
21 return True
22
23 def BuildTree(self, grid, x, y, w):
24 if self.isLeaf(grid, x, y, w):
25 return Node(grid[x][y] == 1, True)
26 r = Node(True, False)
27 r.topLeft = self.BuildTree(grid, x, y, w // 2)
28 r.topRight = self.BuildTree(grid, x, y + w // 2, w // 2)
29 r.bottomLeft = self.BuildTree(grid, x + w // 2, y, w // 2)
30 r.bottomRight = self.BuildTree(grid, x + w // 2, y + w // 2, w // 2)
31 return r
32
33 def construct(self, grid: List[List[int]]) -> Node:
34 return self.BuildTree(grid, 0, 0, len(grid))
]]>
鏂規硶涓錛氬厛DFS錛屼笉鏂蛋宸﹀瓙鏍戠殑璺緞錛岀畻鍑轟簩鍙夋爲灞傛暟max_depth錛岄偅涔堟渶鍚庝竴灞傝妭鐐圭殑鏁伴噺涓篬1, 2^(max_depth-1)]錛岀洿鎺ヤ簩鍒嗚繖涓寖鍥達紝鐒跺悗綆楀嚭鏈鍚庝竴涓彾瀛愮粨鐐硅惤鍦ㄥ摢閲岋紝鐞嗚澶嶆潅搴(logn)*O(logn)
2 #Runtime: 156 ms
3 #Memory Usage: 29.2 MB
4
5 # Definition for a binary tree node.
6 # class TreeNode(object):
7 # def __init__(self, val=0, left=None, right=None):
8 # self.val = val
9 # self.left = left
10 # self.right = right
11 class Solution(object):
12 def binarySearch(self, root, depth, mid, l, r):
13 if depth == self.max_depth - 1:
14 if root:
15 return True
16 return False
17 if mid <= (l + r)//2:
18 return self.binarySearch(root.left, depth + 1, mid, l, (l + r)//2)
19 else:
20 return self.binarySearch(root.right, depth + 1, mid, (l + r)//2, r)
21
22 def countNodes(self, root):
23 """
24 :type root: TreeNode
25 :rtype: int
26 """
27 self.max_depth = 0
28 rt = root
29 while rt:
30 rt = rt.left
31 self.max_depth = self.max_depth + 1
32 if not self.max_depth:
33 return 0
34 l = 1
35 r = 2**(self.max_depth - 1)
36 while l < r:
37 mid = (l + r) // 2 + (l + r) % 2
38 if self.binarySearch(root, 0, mid, 1, 2**(self.max_depth - 1)):
39 l = mid
40 else:
41 r = mid - 1
42 return l + 2**(self.max_depth - 1) - 1
鏂規硶浜岋細鐩存帴涓嶆柇浜屽垎鍦伴掑綊鎵懼乏鍙沖瓙鏍戯紝鐩村埌閬囧埌鏌愪釜婊′簩鍙夋爲鑺傜偣錛岀劧鍚巗um(宸﹀瓙鏍戠殑鎼滅儲緇撴灉)+sum(鍙沖瓙鏍戠殑鎼滅儲緇撴灉)+1錛堟牴緇撶偣錛夛紝鐞嗚澶嶆潅搴(logn)*O(logn)
2 #Runtime: 137 ms
3 #Memory Usage: 29.2 MB
4
5 # Definition for a binary tree node.
6 # class TreeNode(object):
7 # def __init__(self, val=0, left=None, right=None):
8 # self.val = val
9 # self.left = left
10 # self.right = right
11 class Solution(object):
12 def DFS(self, root, fg):
13 if not root:
14 return 1
15 if fg == 0:
16 return self.DFS(root.left, 0) + 1
17 return self.DFS(root.right, 1) + 1
18
19 def countNodes(self, root):
20 """
21 :type root: TreeNode
22 :rtype: int
23 """
24 if not root:
25 return 0
26 depth_l = self.DFS(root.left, 0)
27 depth_r = self.DFS(root.right, 1)
28 if depth_l == depth_r:
29 return 2**depth_l - 1
30 return self.countNodes(root.left) + self.countNodes(root.right) + 1
鏂規硶涓夛細鐩存帴DFS鏁存5鏍戞眰鑺傜偣鏁伴噺錛屽鏉傚害O(n)錛屾病鎯沖埌榪欎釜鏂規硶鍙嶈屾渶蹇?..
2 #Runtime: 87 ms
3 #Memory Usage: 29.4 MB
4
5 # Definition for a binary tree node.
6 # class TreeNode(object):
7 # def __init__(self, val=0, left=None, right=None):
8 # self.val = val
9 # self.left = left
10 # self.right = right
11 class Solution(object):
12 def DFS(self, root):
13 if not root:
14 return
15 self.ans += 1
16 self.DFS(root.left)
17 self.DFS(root.right)
18
19 def countNodes(self, root):
20 """
21 :type root: TreeNode
22 :rtype: int
23 """
24 self.ans = 0
25 self.DFS(root)
26 return self.ans
]]>
2 ans = []
3 def DFS(self, str, n, pp):
4 if n == 0:
5 if pp == 0:
6 self.ans.append(str)
7 str = ''
8 return
9 if n > 0:
10 self.DFS(str+'(', n-1, pp+1)
11 if pp > 0:
12 self.DFS(str+')', n, pp-1)
13
14
15 def generateParenthesis(self, n):
16 """
17 :type n: int
18 :rtype: List[str]
19 """
20 self.ans = []
21 self.DFS('', n, 0)
22 return self.ans
]]>
]]>
澶х墰浠笉鍚濇寚鏁欍傘傚姞涓嬫爣閭i噷鎬庝箞鏀逛笅銆傘?br>

/**//*Problem: 1747 User: Uriel
Memory: 1184K Time: 141MS
Language: C++ Result: Accepted*/ 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char str[105][10000];
char temp[102][4]=
{"0","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","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89",
"90","91","92","93","94","95","96","97","98","99","100"};
int n,st;
int min(int a,int b)

{
return a < b ? a: b;
}
void Sov(int a)

{
if(a==1)return ;
Sov(a-1);
strcpy(str[a],"((A");
strcat(str[a],temp[a-1]);
strcat(str[a],"|B");
strcat(str[a],temp[a-1]);
strcat(str[a],")|(");
strcat(str[a],str[a-1]);
strcat(str[a],"|((A");
strcat(str[a],temp[a-1]);
strcat(str[a],"|A");
strcat(str[a],temp[a-1]);
strcat(str[a],")|(B");
strcat(str[a],temp[a-1]);
strcat(str[a],"|B");
strcat(str[a],temp[a-1]);
strcat(str[a],"))))");
}
int main()

{
scanf("%d",&n);
memset(str,0x00,sizeof(str));
strcpy(str[1],"((A0|B0)|(A0|B0))");
st=1;
Sov(n);
for(int i=0;i<min(strlen(str[n]),50*n);i++)
{
printf("%c",str[n][i]);
}
printf("\n");
return 0;
}

]]>
/**//*Problem: 3233 User: Uriel
Memory: 208K Time: 172MS
Language: C++ Result: Accepted*/
#include<stdio.h>
#include<stdlib.h>
const int MAX=65;
typedef int M[MAX][MAX];
int n,m;
M in;
void copy(M x,M y)

{
int i,j;
for(i=0;i<2*n;++i)
for(j=0;j<2*n;++j)
{
x[i][j]=y[i][j];
}
}
void mu(M x,M y)

{
M C;
int i,j,k;
int t;
for(i=0;i<2*n;++i)
{
for(j=0;j<2*n;++j)
{
t=0;
for(k=0;k<2*n;++k)
{
if(x[i][k] && y[k][j])
{
t=(t+x[i][k]*y[k][j])%m;
}
}
C[i][j]=t;
}
}
copy(x,C);
}
void BS(M x,int k)

{
if(k==1)
{
copy(x,in);
return;
}
BS(x,k/2);
mu(x,x);
if(k & 1) 
{
mu(x,in);
}
}
int main()

{
int k;
scanf("%d %d %d",&n,&k,&m) ;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&in[i][j]);
in[i][j+n]=in[i][j];
in[i+n][j]=0;
in[i+n][j+n]=0;
}
in[i+n][i+n]=1;
}
M x;
BS(x,k);
for(i=0;i<n;++i)
{
for(j=n;j<2*n;++j)
{
printf("%d ",x[i][j]) ;
}
printf("\n") ;
}
system("PAUSE");
return 0 ;
}
榪欓鎼炰簡寰堜箙銆傘傜涓嬈″啓浜屽垎錛岀涓嬈$敤鍋氱煩闃典箻娉曘傘?br>杞Щ鐭╅樀濂藉己澶?br>| A A |
| 0 I |
]]>