codeforces:C. Another Array Problem【分类讨论 + 找规律】

news2025/2/6 17:39:45

目录

  • 题目截图
  • 题目分析
  • ac code
  • 总结

题目截图

在这里插入图片描述

题目分析

  • 做cf题目别老想着套算法模版

  • 找规律才是正道,这就是所谓的「思维」

  • n = 2很简单

  • n >= 4:

      # 肯定有一个最大值,不妨设它的位置在第三个或以后的x
      # 前两个值经过两次操作,都变为0
      # 第0个和第x个经过一次操作,都变成x
      # 现在变成前面都是x,最大值后面跟着一串
      # 现在考虑这一串
      # 如果一个都没有,搞定
      # 如果只有一个,直接跟最大值进行一次操作,搞定
      # 如果大于等于2个,最后两个经过两次操作变成0,再跟最大值进行一次操作,搞定
    
  • n = 3(难点)

      # 假设x, y, z = a
      # 全部变成x的过程:
      # x, abs(y - z), abs(y - z)
      # x, 0, 0
      # x, x, x
      # 全部变成z的过程类似
      # 全部变成abs(x - y)的过程
      # abs(x - y), abs(x - y), z
      # abs(x - y), 0, 0
      # abs(x - y), abs(x - y), abs(x - y)
      # 全部变成abs(z - y)的过程类似
      # 我们只需要考虑四种三个数相等的状态即可
      # 中间的状态不需要考虑(因为中间的状态都是最终状态的某几个的线性组合!)
    

ac code

# -*- coding: utf-8 -*-
# @Time    : 2022/12/19 20:23
# @Author  : bridgekiller
# @FileName: C.py
# @Software: PyCharm
# @Blog    :bridge-killer.blog.csdn.net

import os
import sys
import math
import random
import threading
from copy import deepcopy
from io import BytesIO, IOBase
from types import GeneratorType
from functools import lru_cache, reduce
from bisect import bisect_left, bisect_right
from collections import Counter, defaultdict, deque
from itertools import accumulate, combinations, permutations
from heapq import nsmallest, nlargest, heapify, heappop, heappush
from typing import Generic, Iterable, Iterator, TypeVar, Union, List


def debug(func):
    def wrapper(*args, **kwargs):
        print('----------------')
        res = func(*args, **kwargs)
        print('----------------')
        return res

    return wrapper


def bootstrap(f, stack=[]):
    def wrappedfunc(*args, **kwargs):
        if stack:
            return f(*args, **kwargs)
        else:
            to = f(*args, **kwargs)
            while True:
                if type(to) is GeneratorType:
                    stack.append(to)
                    to = next(to)
                else:
                    stack.pop()
                    if not stack:
                        break
                    to = stack[-1].send(to)
            return to

    return wrappedfunc


class SegTree:
    '''
    支持增量更新,覆盖更新,序列更新,任意RMQ操作
    基于二叉树实现
    初始化:O(1)
    增量更新或覆盖更新的单次操作复杂度:O(log k)
    序列更新的单次复杂度:O(n)
    '''

    def __init__(self, f1, f2, l, r, v=0):
        '''
        初始化线段树[left,right)
        f1,f2示例:
        线段和:
        f1=lambda a,b:a+b
        f2=lambda a,n:a*n
        线段最大值:
        f1=lambda a,b:max(a,b)
        f2=lambda a,n:a
        线段最小值:
        f1=lambda a,b:min(a,b)
        f2=lambda a,n:a
        '''
        self.ans = f2(v, r - l)
        self.f1 = f1
        self.f2 = f2
        self.l = l  # left
        self.r = r  # right
        self.v = v  # init value
        self.lazy_tag = 0  # Lazy tag
        self.left = None  # SubTree(left,bottom)
        self.right = None  # SubTree(right,bottom)

    @property
    def mid_h(self):
        return (self.l + self.r) // 2

    def create_subtrees(self):
        midh = self.mid_h
        if not self.left and midh > self.l:
            self.left = SegTree(self.f1, self.f2, self.l, midh)
        if not self.right:
            self.right = SegTree(self.f1, self.f2, midh, self.r)

    def init_seg(self, M):
        '''
        将线段树的值初始化为矩阵Matrx
        输入保证Matrx与线段大小一致
        '''
        m0 = M[0]
        self.lazy_tag = 0
        for a in M:
            if a != m0:
                break
        else:
            self.v = m0
            self.ans = self.f2(m0, len(M))
            return self.ans
        self.v = '#'
        midh = self.mid_h
        self.create_subtrees()
        self.ans = self.f1(self.left.init_seg(M[:midh - self.l]), self.right.init_seg(M[midh - self.l:]))
        return self.ans

    def cover_seg(self, l, r, v):
        '''
        将线段[left,right)覆盖为val
        '''
        if self.v == v or l >= self.r or r <= self.l:
            return self.ans
        if l <= self.l and r >= self.r:
            self.v = v
            self.lazy_tag = 0
            self.ans = self.f2(v, self.r - self.l)
            return self.ans
        self.create_subtrees()
        if self.v != '#':
            if self.left:
                self.left.v = self.v
                self.left.ans = self.f2(self.v, self.left.r - self.left.l)
            if self.right:
                self.right.v = self.v
                self.right.ans = self.f2(self.v, self.right.r - self.right.l)
            self.v = '#'
        # push up
        self.ans = self.f1(self.left.cover_seg(l, r, v), self.right.cover_seg(l, r, v))
        return self.ans

    def inc_seg(self, l, r, v):
        '''
        将线段[left,right)增加val
        '''
        if v == 0 or l >= self.r or r <= self.l:
            return self.ans
        # self.ans = '?'
        if l <= self.l and r >= self.r:
            if self.v == '#':
                self.lazy_tag += v
            else:
                self.v += v
            self.ans += self.f2(v, self.r - self.l)
            return self.ans
        self.create_subtrees()
        if self.v != '#':
            self.left.v = self.v
            self.left.ans = self.f2(self.v, self.left.r - self.left.l)
            self.right.v = self.v
            self.right.ans = self.f2(self.v, self.right.r - self.right.l)
            self.v = '#'
        self.pushdown()
        self.ans = self.f1(self.left.inc_seg(l, r, v), self.right.inc_seg(l, r, v))
        return self.ans

    def inc_idx(self, idx, v):
        '''
        increase idx by val
        '''
        if v == 0 or idx >= self.r or idx < self.l:
            return self.ans
        if idx == self.l == self.r - 1:
            self.v += v
            self.ans += self.f2(v, 1)
            return self.ans
        self.create_subtrees()
        if self.v != '#':
            self.left.v = self.v
            self.left.ans = self.f2(self.v, self.left.r - self.left.l)
            self.right.v = self.v
            self.right.ans = self.f2(self.v, self.right.r - self.right.l)
            self.v = '#'
        self.pushdown()
        self.ans = self.f1(self.left.inc_idx(idx, v), self.right.inc_idx(idx, v))
        return self.ans

    def pushdown(self):
        if self.lazy_tag != 0:
            if self.left:
                if self.left.v != '#':
                    self.left.v += self.lazy_tag
                    self.left.lazy_tag = 0
                else:
                    self.left.lazy_tag += self.lazy_tag
                self.left.ans += self.f2(self.lazy_tag, self.left.r - self.left.l)
            if self.right:
                if self.right.v != '#':
                    self.right.v += self.lazy_tag
                    self.right.lazy_tag = 0
                else:
                    self.right.lazy_tag += self.lazy_tag
                self.right.ans += self.f2(self.lazy_tag, self.right.r - self.right.l)
            self.lazy_tag = 0

    def query(self, l, r):
        '''
        查询线段[right,bottom)的RMQ
        '''
        if l >= r: return 0
        if l <= self.l and r >= self.r:
            return self.ans
        if self.v != '#':
            return self.f2(self.v, min(self.r, r) - max(self.l, l))
        midh = self.mid_h
        anss = []
        if l < midh:
            anss.append(self.left.query(l, r))
        if r > midh:
            anss.append(self.right.query(l, r))
        return reduce(self.f1, anss)


class SortedList:
    def __init__(self, iterable=[], _load=200):
        """Initialize sorted list instance."""
        values = sorted(iterable)
        self._len = _len = len(values)
        self._load = _load
        self._lists = _lists = [values[i:i + _load] for i in range(0, _len, _load)]
        self._list_lens = [len(_list) for _list in _lists]
        self._mins = [_list[0] for _list in _lists]
        self._fen_tree = []
        self._rebuild = True

    def _fen_build(self):
        """Build a fenwick tree instance."""
        self._fen_tree[:] = self._list_lens
        _fen_tree = self._fen_tree
        for i in range(len(_fen_tree)):
            if i | i + 1 < len(_fen_tree):
                _fen_tree[i | i + 1] += _fen_tree[i]
        self._rebuild = False

    def _fen_update(self, index, value):
        """Update `fen_tree[index] += value`."""
        if not self._rebuild:
            _fen_tree = self._fen_tree
            while index < len(_fen_tree):
                _fen_tree[index] += value
                index |= index + 1

    def _fen_query(self, end):
        """Return `sum(_fen_tree[:end])`."""
        if self._rebuild:
            self._fen_build()

        _fen_tree = self._fen_tree
        x = 0
        while end:
            x += _fen_tree[end - 1]
            end &= end - 1
        return x

    def _fen_findkth(self, k):
        """Return a pair of (the largest `idx` such that `sum(_fen_tree[:idx]) <= k`, `k - sum(_fen_tree[:idx])`)."""
        _list_lens = self._list_lens
        if k < _list_lens[0]:
            return 0, k
        if k >= self._len - _list_lens[-1]:
            return len(_list_lens) - 1, k + _list_lens[-1] - self._len
        if self._rebuild:
            self._fen_build()

        _fen_tree = self._fen_tree
        idx = -1
        for d in reversed(range(len(_fen_tree).bit_length())):
            right_idx = idx + (1 << d)
            if right_idx < len(_fen_tree) and k >= _fen_tree[right_idx]:
                idx = right_idx
                k -= _fen_tree[idx]
        return idx + 1, k

    def _delete(self, pos, idx):
        """Delete value at the given `(pos, idx)`."""
        _lists = self._lists
        _mins = self._mins
        _list_lens = self._list_lens

        self._len -= 1
        self._fen_update(pos, -1)
        del _lists[pos][idx]
        _list_lens[pos] -= 1

        if _list_lens[pos]:
            _mins[pos] = _lists[pos][0]
        else:
            del _lists[pos]
            del _list_lens[pos]
            del _mins[pos]
            self._rebuild = True

    def _loc_left(self, value):
        """Return an index pair that corresponds to the first position of `value` in the sorted list."""
        if not self._len:
            return 0, 0

        _lists = self._lists
        _mins = self._mins

        lo, pos = -1, len(_lists) - 1
        while lo + 1 < pos:
            mi = (lo + pos) >> 1
            if value <= _mins[mi]:
                pos = mi
            else:
                lo = mi

        if pos and value <= _lists[pos - 1][-1]:
            pos -= 1

        _list = _lists[pos]
        lo, idx = -1, len(_list)
        while lo + 1 < idx:
            mi = (lo + idx) >> 1
            if value <= _list[mi]:
                idx = mi
            else:
                lo = mi

        return pos, idx

    def _loc_right(self, value):
        """Return an index pair that corresponds to the last position of `value` in the sorted list."""
        if not self._len:
            return 0, 0

        _lists = self._lists
        _mins = self._mins

        pos, hi = 0, len(_lists)
        while pos + 1 < hi:
            mi = (pos + hi) >> 1
            if value < _mins[mi]:
                hi = mi
            else:
                pos = mi

        _list = _lists[pos]
        lo, idx = -1, len(_list)
        while lo + 1 < idx:
            mi = (lo + idx) >> 1
            if value < _list[mi]:
                idx = mi
            else:
                lo = mi

        return pos, idx

    def add(self, value):
        """Add `value` to sorted list."""
        _load = self._load
        _lists = self._lists
        _mins = self._mins
        _list_lens = self._list_lens

        self._len += 1
        if _lists:
            pos, idx = self._loc_right(value)
            self._fen_update(pos, 1)
            _list = _lists[pos]
            _list.insert(idx, value)
            _list_lens[pos] += 1
            _mins[pos] = _list[0]
            if _load + _load < len(_list):
                _lists.insert(pos + 1, _list[_load:])
                _list_lens.insert(pos + 1, len(_list) - _load)
                _mins.insert(pos + 1, _list[_load])
                _list_lens[pos] = _load
                del _list[_load:]
                self._rebuild = True
        else:
            _lists.append([value])
            _mins.append(value)
            _list_lens.append(1)
            self._rebuild = True

    def discard(self, value):
        """Remove `value` from sorted list if it is a member."""
        _lists = self._lists
        if _lists:
            pos, idx = self._loc_right(value)
            if idx and _lists[pos][idx - 1] == value:
                self._delete(pos, idx - 1)

    def remove(self, value):
        """Remove `value` from sorted list; `value` must be a member."""
        _len = self._len
        self.discard(value)
        if _len == self._len:
            raise ValueError('{0!r} not in list'.format(value))

    def pop(self, index=-1):
        """Remove and return value at `index` in sorted list."""
        pos, idx = self._fen_findkth(self._len + index if index < 0 else index)
        value = self._lists[pos][idx]
        self._delete(pos, idx)
        return value

    def bisect_left(self, value):
        """Return the first index to insert `value` in the sorted list."""
        pos, idx = self._loc_left(value)
        return self._fen_query(pos) + idx

    def bisect_right(self, value):
        """Return the last index to insert `value` in the sorted list."""
        pos, idx = self._loc_right(value)
        return self._fen_query(pos) + idx

    def count(self, value):
        """Return number of occurrences of `value` in the sorted list."""
        return self.bisect_right(value) - self.bisect_left(value)

    def __len__(self):
        """Return the size of the sorted list."""
        return self._len

    def __getitem__(self, index):
        """Lookup value at `index` in sorted list."""
        pos, idx = self._fen_findkth(self._len + index if index < 0 else index)
        return self._lists[pos][idx]

    def __delitem__(self, index):
        """Remove value at `index` from sorted list."""
        pos, idx = self._fen_findkth(self._len + index if index < 0 else index)
        self._delete(pos, idx)

    def __contains__(self, value):
        """Return true if `value` is an element of the sorted list."""
        _lists = self._lists
        if _lists:
            pos, idx = self._loc_left(value)
            return idx < len(_lists[pos]) and _lists[pos][idx] == value
        return False

    def __iter__(self):
        """Return an iterator over the sorted list."""
        return (value for _list in self._lists for value in _list)

    def __reversed__(self):
        """Return a reverse iterator over the sorted list."""
        return (value for _list in reversed(self._lists) for value in reversed(_list))

    def __repr__(self):
        """Return string representation of sorted list."""
        return 'SortedList({0})'.format(list(self))


T = TypeVar('T')


class SortedSet(Generic[T]):
    BUCKET_RATIO = 50
    REBUILD_RATIO = 170

    def _build(self, a=None) -> None:
        "Evenly divide `a` into buckets."
        if a is None: a = list(self)
        size = self.size = len(a)
        bucket_size = int(math.ceil(math.sqrt(size / self.BUCKET_RATIO)))
        self.a = [a[size * i // bucket_size: size * (i + 1) // bucket_size] for i in range(bucket_size)]

    def __init__(self, a: Iterable[T] = []) -> None:
        "Make a new SortedSet from iterable. / O(N) if sorted and unique / O(N log N)"
        a = list(a)
        if not all(a[i] < a[i + 1] for i in range(len(a) - 1)):
            a = sorted(set(a))
        self._build(a)

    def __iter__(self) -> Iterator[T]:
        for i in self.a:
            for j in i: yield j

    def __reversed__(self) -> Iterator[T]:
        for i in reversed(self.a):
            for j in reversed(i): yield j

    def __len__(self) -> int:
        return self.size

    def __repr__(self) -> str:
        return "SortedSet" + str(self.a)

    def __str__(self) -> str:
        s = str(list(self))
        return "{" + s[1: len(s) - 1] + "}"

    def _find_bucket(self, x: T) -> List[T]:
        "Find the bucket which should contain x. self must not be empty."
        for a in self.a:
            if x <= a[-1]: return a
        return a

    def __contains__(self, x: T) -> bool:
        if self.size == 0: return False
        a = self._find_bucket(x)
        i = bisect_left(a, x)
        return i != len(a) and a[i] == x

    def add(self, x: T) -> bool:
        "Add an element and return True if added. / O(√N)"
        if self.size == 0:
            self.a = [[x]]
            self.size = 1
            return True
        a = self._find_bucket(x)
        i = bisect_left(a, x)
        if i != len(a) and a[i] == x: return False
        a.insert(i, x)
        self.size += 1
        if len(a) > len(self.a) * self.REBUILD_RATIO:
            self._build()
        return True

    def discard(self, x: T) -> bool:
        "Remove an element and return True if removed. / O(√N)"
        if self.size == 0: return False
        a = self._find_bucket(x)
        i = bisect_left(a, x)
        if i == len(a) or a[i] != x: return False
        a.pop(i)
        self.size -= 1
        if len(a) == 0: self._build()
        return True

    def lt(self, x: T) -> Union[T, None]:
        "Find the largest element < x, or None if it doesn't exist."
        for a in reversed(self.a):
            if a[0] < x:
                return a[bisect_left(a, x) - 1]

    def le(self, x: T) -> Union[T, None]:
        "Find the largest element <= x, or None if it doesn't exist."
        for a in reversed(self.a):
            if a[0] <= x:
                return a[bisect_right(a, x) - 1]

    def gt(self, x: T) -> Union[T, None]:
        "Find the smallest element > x, or None if it doesn't exist."
        for a in self.a:
            if a[-1] > x:
                return a[bisect_right(a, x)]

    def ge(self, x: T) -> Union[T, None]:
        "Find the smallest element >= x, or None if it doesn't exist."
        for a in self.a:
            if a[-1] >= x:
                return a[bisect_left(a, x)]

    def __getitem__(self, x: int) -> T:
        "Return the x-th element, or IndexError if it doesn't exist."
        if x < 0: x += self.size
        if x < 0: raise IndexError
        for a in self.a:
            if x < len(a): return a[x]
            x -= len(a)
        raise IndexError

    def index(self, x: T) -> int:
        "Count the number of elements < x."
        ans = 0
        for a in self.a:
            if a[-1] >= x:
                return ans + bisect_left(a, x)
            ans += len(a)
        return ans

    def index_right(self, x: T) -> int:
        "Count the number of elements <= x."
        ans = 0
        for a in self.a:
            if a[-1] > x:
                return ans + bisect_right(a, x)
            ans += len(a)
        return ans


BUFSIZE = 4096


class FastIO(IOBase):
    newlines = 0

    def __init__(self, file):
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None

    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()

    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()

    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)


class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")


sys.stdin = IOWrapper(sys.stdin)
sys.stdout = IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")


def I():
    return input()


def II():
    return int(input())


def MI():
    return map(int, input().split())


def LI():
    return list(input().split())


def LII():
    return list(map(int, input().split()))


def GMI():
    return map(lambda x: int(x) - 1, input().split())


def LGMI():
    return list(map(lambda x: int(x) - 1, input().split()))


def solve():
    n = II()
    a = LII()
    if n >= 4:
        # 肯定有一个最大值,不妨设它的位置在第三个或以后的x
        # 前两个值经过两次操作,都变为0
        # 第0个和第x个经过一次操作,都变成x
        # 现在变成前面都是x,最大值后面跟着一串
        # 现在考虑这一串
        # 如果一个都没有,搞定
        # 如果只有一个,直接跟最大值进行一次操作,搞定
        # 如果大于等于2个,最后两个经过两次操作变成0,再跟最大值进行一次操作,搞定
        return print(n * max(a))
    elif n == 2:
        ans1 = sum(a)
        ans2 = abs(a[0] - a[1]) * 2
        return print(max(ans1, ans2))
    elif n == 3: # 最复杂的情况!
        # 可以证明,经过4次操作,a总会变成3个一样的数;如果后面再操作就没有意义了
        x, y, z = a
        # 假设x, y, z = a
        # 全部变成x的过程:
        # x, abs(y - z), abs(y - z)
        # x, 0, 0
        # x, x, x
        # 全部变成z的过程类似
        # 全部变成abs(x - y)的过程
        # abs(x - y), abs(x - y), z
        # abs(x - y), 0, 0
        # abs(x - y), abs(x - y), abs(x - y)
        # 全部变成abs(z - y)的过程类似
        # 我们只需要考虑四种三个数相等的状态即可
        # 中间的状态不需要考虑(因为中间的状态都是最终状态的某几个的线性组合!)
        ans = max(x + y + z, 3 * x, 3 * z, 3 * abs(x - y), 3 * (abs(z - y)))
        return print(ans)




if __name__ == '__main__':
    for _ in range(II()):
        solve()

总结

  • 做cf找规律很重要

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js 目录结构

当我们初始化一个项目后目录结构是这样的&#xff1a; 目录解析 目录/文件说明build项目构建(webpack)相关代码config配置目录&#xff0c;包括端口号等。我们初学可以使用默认的。node_modulesnpm 加载的项目依赖模块src这里是我们要开发的目录&#xff0c;基本上要做的事情都…

# 关于“table“中更新传参回填form

关于"table"中更新传参回填form 一、id查询数据库回填form 使用阶段&#xff1a;Javaweb/ssm/Springboot出现场景&#xff1a;jsp页面&#xff08;el表达式&#xff09;、thymeleaf页面&#xff08;thymeleaf表达式&#xff0c;具体使用方法请前往百度&#xff09;…

Python成求职中最吃香的三大编程语言之一

程序员培训公司 CodinGame 发布的一份开发人员调查报告显示&#xff0c;在开发人员招聘中&#xff0c;拥有 JavaScript、Java 和 Python 三大编程语言技能的开发人员最受招聘经理欢迎。 该报告基于对全球近 15,000 名开发人员和人力资源专业人员的调查。报告显示&#xff0c;每…

【IO流】JAVA基础篇(一)

文章目录一、字节流和字符流的区别1、字节和字符换算关系2、字节、位、二进制之间的关系3、在64位的操作系统中&#xff0c;一个字等于多少字节&#xff1f;4、字节流和字符流区别二、InputStream1、FileInputStream2、FilterInputStream3、ObjectInputStream4、PipedInputStre…

玩客云刷ARMBIAN当服务器过程记录

玩客云的可玩性 1、可以刷成电视游戏盒子的双系统。也可以刷成单独的电视盒子和游戏盒子。不过因为内存有限放不了多少游戏。还是建议用外置SD卡存储游戏比较合适。 2、刷成Armbian linux系统&#xff08;可以实现docker、可道云、甜糖等多种功能&#xff09; 3、最后它还可…

jsp+ssm计算机毕业设计风景区管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

生物安全防护实验室建设要点SICOLAB

生物安全实验室&#xff08;BiosafetyLaboratory&#xff09;&#xff0c;也称生物安全防护实验室&#xff08;BiosafetyContainmentforLaboratories&#xff09;&#xff0c;是通过防护屏障和管理措施&#xff0c;能够避免或控制被操作的有害生物因子危害&#xff0c;达到生物…

磺丁基醚环糊精盐内水相/桂利嗪/EGF/吲哚美辛-环糊精/黄芩苷β-环糊精包合物脂质体制备

小编今天分享了磺丁基醚环糊精盐内水相/桂利嗪/EGF/吲哚美辛-环糊精/黄芩苷β-环糊精包合物脂质体的研究内容&#xff0c;和小编一起来看&#xff01; 黄芩苷β-环糊精(β-CD)包合物脂质体: 采用薄膜-超声分散法制备黄芩苷-CD包合物脂质体,并测定脂质体的粒径分布,Zeta电位以及…

灿芯股份冲刺科创板上市:计划募资6亿元,中芯国际、小米为股东

12月19日&#xff0c;灿芯半导体&#xff08;上海&#xff09;股份有限公司&#xff08;下称“灿芯股份”&#xff09;在上海证券交易所递交招股书&#xff0c;准备在科创板上市。本次冲刺科创板上市&#xff0c;灿芯股份计划募资6亿元&#xff0c;海通证券为其保荐机构。 招股…

赫夫曼树 | 实战演练(二)

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

高效空气过滤器检漏

广州特耐苏净化设备有限公司详细介绍&#xff1a;高效空气过滤器安装后的检漏 高效空气过滤器安装后的检漏是确认安装质量&#xff0c;检测高效空气过滤器送风口的整个面、过滤器的周边、过滤器外框和安装框架之间的密封处。检漏时&#xff0c;从过滤器的上风侧引入测试气溶胶…

北京理工大学汇编语言复习重点(可打印)

文章目录前言第一章&#xff1a;基础性能指标计算储存器原理第二章&#xff1a;微处理器管理模式CPU工作模式实模式保护模式虚拟8086模式&#xff08;V86模式&#xff09;寄存器概述GDTR&#xff08;Global Descriptor Table Registr&#xff09;全局描述符表寄存器LDTRIDTRTR内…

神仙级python入门教程(非常详细),从零基础入门到精通,从看这篇开始!

前言 一.初聊Python【文末有惊喜福利】 1.为什么要学习Python&#xff1f; 在学习Python之前&#xff0c;你不要担心自己没基础或“脑子笨”&#xff0c;我始终认为&#xff0c;只要你想学并为之努力&#xff0c;就能学好&#xff0c;就能用Python去做很多事情。在这个喧嚣的…

云服务大变局:出海成新角斗场

配图来自Canva可画 根据Canalys的最新统计&#xff0c;2022年第三季度&#xff0c;中国大陆的云基础设施服务支出同比增长8%&#xff0c;达到78亿美元&#xff0c;占全球云支出的12%。自2022年一季度以来&#xff0c;年增长率已经连续三个季度放缓&#xff0c;并首次跌破了10%…

FFMPEG详解(完整版)

一、认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库&#xff0c;它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器&#xff0c;堪称多媒体业界的瑞士军刀。因此&#xff0c;对于从事多媒体技术开发的工程师来说&#xff0c;深入研究FFMP…

MySQL 进阶篇学习笔记

文章目录01. 课程介绍02. 存储引擎-MySQL体系结构03. 存储引擎-简介04. 存储引擎-InnoDB介绍05. 存储引擎-MyISAM和Memory05.1MyISAM05.2 Memory05.3 区别及特点06. 存储引擎-选择07. 存储引擎-小结08. MySQL安装(linux版本)MySQL8.0.26-Linux版安装1. 准备一台Linux服务器2. 下…

大数据系统架构-Hadoop生态系统

Hadoop是较早用于处理大数据集合的分布式存储计算基础架构&#xff0c;通过Hadoop&#xff0c;用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序&#xff0c;充分利用集群的为例执行告诉运算和存储。简单来说&#xff0c;Hadoop是一个平台&#xff0c;在它之…

【LeetCode每日一题】——剑指 Offer 42.连续子数组的最大和

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目注意】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 动态规划 二【题目难度】 简单 三【题目编号】 剑指 Offer 42.连续子数组的最…

基于springboot layui前后端分离的宿舍管理系统

系统以MySQL 为数据库&#xff0c;在Spring Boot SpringMVC MyBatis Layui框架下基于B/S架构设计开发而成。系统中的用户分为三类&#xff0c;分别为学生、宿管、后勤。这三类用户拥有不同的操作权限。 系统中用到的技术包括Axios, Echarts, POI。特色功能有人性化的宿舍分…

分支语句和函数

分支语句 条件语句 (1)if 语法格式&#xff1a; if expression:do_something1do_something2 next_something 如果expression值为True&#xff0c;则执行do_something1&#xff0c; do_something2&#xff0c;next_something 如果expression值为False&#xff0c;则只执行…