File tree Expand file tree Collapse file tree
niuke/daily_problem/25_12-1构造数独 Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ # Definition for a binary tree node.
2+ # class TreeNode:
3+ # def __init__(self, val=0, left=None, right=None):
4+ # self.val = val
5+ # self.left = left
6+ # self.right = right
7+ class Solution :
8+ def maxDepth (self , root : Optional [TreeNode ]) -> int :
9+ if root is None :
10+ return 0
11+ return max (self .maxDepth (root .left ),self .maxDepth (root .right ))+ 1
Original file line number Diff line number Diff line change 1+ # Definition for a binary tree node.
2+ # class TreeNode:
3+ # def __init__(self, val=0, left=None, right=None):
4+ # self.val = val
5+ # self.left = left
6+ # self.right = right
7+ class Solution :
8+ def maxDepth (self , root : Optional [TreeNode ]) -> int :
9+ cnt = 0
10+ def dfs (node ,depth ):
11+ if node is None :
12+ return
13+ depth += 1
14+ nonlocal cnt
15+ cnt = max (cnt ,depth )
16+ dfs (node .left ,depth )
17+ dfs (node .right ,depth )
18+ dfs (root ,0 )
19+ return cnt
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ long long maxRunTime (int n, vector<int >& batteries) {
4+ // 计算所有电池的总容量
5+ long long tot = reduce (batteries.begin (),batteries.end (),0LL );
6+
7+ // 二分查找的左右边界
8+ // 理论上最多能运行 tot/n 分钟(平均分配),所以上界设为 tot/n+1
9+ long long l = 0 , r = tot / n + 1 ;
10+
11+ // 二分查找:找到最大的运行时间 x,使得 n 台电脑可以同时运行 x 分钟
12+ // 使用左闭右开区间 [l, r)
13+ while (l + 1 < r)
14+ {
15+ // 候选的运行时间
16+ long long x = l + (r - l) / 2 ;
17+
18+ // 计算所有电池能提供的总能量
19+ // 对于每个电池,最多只能给一台电脑供电 x 分钟
20+ // 所以每个电池最多贡献 min(b, x) 的能量
21+ long long sum = 0 ;
22+ for (long long b : batteries)
23+ {
24+ sum += min (b, x);
25+ }
26+
27+ // 判断:如果总能量 sum >= n * x,说明可以让 n 台电脑运行 x 分钟
28+ // 此时可以尝试更大的 x(更新左边界)
29+ // 否则需要减小 x(更新右边界)
30+ (n * x <= sum ? l : r) = x;
31+ }
32+
33+ // 返回最大的满足条件的运行时间
34+ return l;
35+ }
36+ };
Original file line number Diff line number Diff line change 1+ impl Solution {
2+ pub fn max_run_time ( n : i32 , batteries : Vec < i32 > ) -> i64 {
3+ // 计算所有电池容量的总和
4+ let sum: i64 = batteries. iter ( ) . map ( |& x| x as i64 ) . sum ( ) ;
5+ // 将 n 转为 i64 方便计算
6+ let n = n as i64 ;
7+ // 二分查找的左边界,表示最短运行时间
8+ let mut left: i64 = 0 ;
9+ // 二分查找的右边界,最大平均运行时间
10+ let mut right: i64 = sum / n;
11+ // 用于记录满足条件的最大运行时间
12+ let mut ans: i64 = 0 ;
13+
14+ // 二分查找,寻找最大的可行运行时间
15+ while left <= right {
16+ let mid = ( left + right) / 2 ; // 尝试的运行时间
17+ let mut total: i64 = 0 ;
18+ // 计算所有电池在最多每台电脑运行 mid 分钟时能提供的电量
19+ for ( & cap) in & batteries {
20+ total += std:: cmp:: min ( cap as i64 , mid) ;
21+ }
22+ // 如果总电量可以支持 n 台电脑运行 mid 分钟
23+ if total >= n * mid {
24+ ans = mid; // 更新答案
25+ left = mid + 1 ; // 尝试更大的运行时间
26+ } else {
27+ right = mid - 1 ; // 尝试更小的运行时间
28+ }
29+ }
30+ ans // 返回最大运行时间
31+ }
32+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ long long maxRunTime (int n, vector<int >& batteries) {
4+ ranges::sort (batteries,greater<int >());
5+ long long sum = reduce (batteries.begin (),batteries.end (),0LL );
6+ for (int i =0 ; ;++i)
7+ {
8+ if (batteries[i] <= sum / n)
9+ {
10+ return sum / n;
11+ }
12+ sum -= batteries[i];
13+ --n;
14+ }
15+ }
16+ };
Original file line number Diff line number Diff line change 1+ // 采用对角矩阵的方法构造
2+ #include < bits/stdc++.h>
3+ #define il inline
4+ using namespace std ;
5+
6+ #define pb push_back
7+ #define fastio \
8+ ios::sync_with_stdio (false ); \
9+ cin.tie(0 );
10+
11+ typedef long long ll;
12+ typedef unsigned long long ull;
13+
14+ const ll N = 5e5 +5 , mod = 1e9 +7 , inf = 2e18 ;
15+ const double eps = 1e-9 ;
16+ const double PI = 3.1415926 ;
17+
18+ il void solve (){
19+ int n,k;
20+ cin >> n >> k;
21+ for (int i = 0 ;i<n;++i)
22+ {
23+ for (int j = 0 ;j<n;++j)
24+ {
25+ if (i == j)
26+ {
27+ cout << k << ' ' ;
28+ }
29+ else
30+ {
31+ cout << 0 << ' ' ;
32+ }
33+ }
34+ cout << ' \n ' ;
35+ }
36+ }
37+
38+ int main ()
39+ {
40+ fastio
41+
42+ int t = 1 ;
43+ // cin >> t;
44+ while (t--)
45+ {
46+ solve ();
47+ }
48+
49+ return 0 ;
50+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "bufio"
5+ "fmt"
6+ "os"
7+ "strconv"
8+ )
9+
10+ var sc = bufio .NewScanner (os .Stdin )
11+ var out = bufio .NewWriter (os .Stdout )
12+
13+ func next () string {
14+ sc .Scan ()
15+ return sc .Text ()
16+ }
17+
18+ func nextInt () int {
19+ v , _ := strconv .Atoi (next ())
20+ return v
21+ }
22+
23+ func main () {
24+ defer out .Flush ()
25+ sc .Split (bufio .ScanWords )
26+ t := 1
27+ // t = nextInt()
28+ for ; t > 0 ; t -- {
29+ solve ()
30+ }
31+ }
32+
33+ func solve () {
34+ n , s := nextInt (), nextInt ()
35+ first_row := make ([]int , n )
36+ q := s / n
37+ r := s % n
38+
39+ // 构造第一行
40+ for i := 0 ; i < n ; i ++ {
41+ if i < r {
42+ first_row [i ] = q + 1
43+ } else {
44+ first_row [i ] = q
45+ }
46+ }
47+
48+ // 构造并打印整个矩阵
49+ for i := 0 ; i < n ; i ++ {
50+ for j := 0 ; j < n ; j ++ {
51+ sep := " "
52+ if j == n - 1 {
53+ sep = ""
54+ }
55+ fmt .Printf ("%d%s" , first_row [(j - i + n )% n ], sep )
56+ }
57+ fmt .Println ()
58+ }
59+
60+ }
You can’t perform that action at this time.
0 commit comments