主頁 >  其他 > Codeforces Round 881 (Div. 3)

Codeforces Round 881 (Div. 3)

2023-06-22 07:45:56 其他

A - Sasha and Array Coloring (CF1843 A)

題目大意

給定一個陣列,給每個元素涂色,求最大的代價,

代價為每個顏色的代價和,

每個顏色的代價為涂了該顏色的元素的極差,

解題思路

因為是極差,每個元素要么對答案有正的貢獻,要么有負的貢獻,要么無貢獻,且正負貢獻的個數要相同,

因為要最大值,自然就是想有正貢獻的是最大的那些數,負貢獻的是最小的那些數,

因此答案就是最大的那一半的和\(-\)最小的那一半的和,奇數的話中間多出來的一個無貢獻,

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        vector<int> a(n);
        for(auto &i : a)
            cin >> i;
        sort(a.begin(), a.end());
        int ans = -accumulate(a.begin(), a.begin() + n / 2, 0) + accumulate(a.end() - n / 2, a.end(), 0);
        cout << ans << '\n';
    }

    return 0;
}



B - Long Long (CF1843 B)

題目大意

給定一個陣列,可以進行一個操作,要求最小化運算元,使得陣列元素的和最大,

操作為:選定一個區間,對區間里的每個元素取其相反數

解題思路

很顯然,和最大一定是將所有的負數變為正數,

然后考慮如何求最小運算元,

對于一連串的負數,我們肯定選擇這個區間,這樣操作一次就好了,

對于\(----+---\),如果我們一次選定這個區間,后續還需要一次操作將里面的 +變回來,其操作次數跟只操作其中的負區間的次數是一樣的,都是兩次,不會更優,

因此就對每個負區間進行操作,答案就是這里面負區間的個數了,

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        vector<int> a(n);
        for(auto &i : a)
            cin >> i;
        LL ans = 0;
        for(auto &i : a)
            ans += abs(i);
        int cnt = 0;
        bool neg = (a[0] < 0);
        for(auto &i : a){
            if (i > 0 && neg){
                cnt ++;
                neg = false;
            }else if (i < 0)
                neg = true;
        }
        cnt += neg;
        cout << ans << ' ' << cnt << '\n';
    }

    return 0;
}



C - Sum in Binary Tree (CF1843 C)

題目大意

給定一棵完全二叉樹,點權為其標號,問從\(n\)號點開始,不斷往父親節點走,其點權和是多少,

解題思路

父親節點的標號為\(\frac{n}{2}\),因此直接模擬即可,走 \(\log\)次就走到根了,

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        LL n;
        cin >> n;
        LL ans = 0;
        while(n){
            ans += n;
            n >>= 1;
        }
        cout << ans << '\n';
    }

    return 0;
}



D - Apple Tree (CF1843 D)

題目大意

給定一棵有根樹,樹上有兩個蘋果,每一時刻,每個蘋果可以往其中一個兒子節點移動,最終移動到葉子處,

設兩個蘋果最終所處的葉子節點為\(a,b\),問 \((a,b)\)的情況數,

解題思路

如果一個蘋果在\(x\)節點,那么它能移動的葉子處就是以 \(x\)為根的葉子節點,如果有 \(a\)個葉子,那么該蘋果的可移動到的葉子數就是 \(a\)

現在有兩個蘋果,假設它們最終可移動到的葉子節點數分別為\(a,b\),那最終的情況數就是 \(a \times b\)

因此事先預處理\(son[x]\)表示以\(x\)為根的葉子數量,\(O(1)\)回答即可,

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        vector<vector<int>> edge(n);
        for(int i = 1; i < n; ++ i){
            int u, v;
            cin >> u >> v;
            -- u, -- v;
            edge[u].push_back(v);
            edge[v].push_back(u);
        }
        vector<int> son(n, 0);
        function<void(int, int)> dfs = [&](int u, int fa){
            bool leaf = true;
            for(auto &v : edge[u]){
                if (v == fa)
                    continue;
                leaf = false;
                dfs(v, u);
                son[u] += son[v];
            }
            son[u] += leaf;
        };
        dfs(0, 0);
        int q;
        cin >> q;
        while(q--){
            int u, v;
            cin >> u >> v;
            -- u, -- v;
            cout << 1ll * son[u] * son[v] << '\n';
        }
    }

    return 0;
}



E - Tracking Segments (CF1843 E)

題目大意

給定一個有\(n\)\(0\)的陣列\(a\),以及 \(m\)個區間,

一個區間如果是好區間,則其間 \(1\)的個數嚴格大于 \(0\)的個數,

現依次進行 \(q\)次操作,每次操作將 \(a_x = 1\)

問最早進行了多少次操作后,出現好區間

解題思路

我們可以依次列舉\(q\),得到操作后的陣列,接下來就是判斷每個區間是不是 好區間,即判斷\(1\)的個數和 \(0\)的個數的大小關系,樸素判斷是\(O(nm)\),但我們可以事先對 \(1\)的個數求一遍陣列\(a\)的前綴和 ,這樣每個區間的判斷都可以在\(O(1)\) 得出結果,判斷的復雜度降為\(O(n + m)\)

由于我們是列舉\(q\)的,此時時間復雜度為 \(O(q(n + m))\),但可以發現 \(q\)與是否存在 好區間是一個單調的函式,即如果\(q=4\)存在 好區間,那么\(q > 4\)一定存在好區間,因此我們可以二分這個 q,得到其臨界點,

最終時間復雜度降為\(O((n + m)\log q)\)

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n, m;
        cin >> n >> m;
        vector<array<int, 2>> seg(m);
        for(auto &i : seg){
            cin >> i[0] >> i[1];
            -- i[0], -- i[1];
        }
        int q;
        cin >> q;
        vector<int> pos(q);
        for(auto &i : pos){
            cin >> i;
            -- i;
        }
        auto check = [&](int x){
            vector<int> cnt(n, 0);
            for(int i = 0; i < x; ++ i)
                cnt[pos[i]] = 1;
            partial_sum(cnt.begin(), cnt.end(), cnt.begin());
            for(auto &[l, r] : seg){
                int one = cnt[r];
                if (l > 0)
                    one -= cnt[l - 1];
                int zero = r - l + 1 - one;
                if (one > zero)
                    return true;
            }
            return false;
        };
        int l = 0, r = q;
        while(l + 1 < r){
            int mid = (l + r) >> 1;
            if (check(mid))
                r = mid;
            else 
                l = mid;
        }
        if (!check(r))
            r = -1;
        cout << r << '\n';

    }

    return 0;
}



F1 - Omsk Metro (simple version) (CF1843 F1)

題目大意

給定一棵點權為\(1\)\(-1\)的樹,點數為\(n\)

給定\(q\)個詢問\(u, v, k\),依次回答從\(u \to v\)這條路徑中,是否存在一個子區間,其和為 \(k\)

該題\(u = 1\)

解題思路

子區間和可以轉換成兩個前綴和作差,那么在一般的問題里,我們可以列舉每個前綴和,若其值為\(x\),那就看之前的前綴和是否有值為 \(x - k\)的,

很顯然本題里,復雜度是\(O(nq)\),無法通過,但本題有個奇特點為點權僅為\(1\)\(-1\),這其間或許有什么性質,

容易發現,假設一個區間的最大欄位和為 \(max\),最小欄位和為 \(min\),那么 \([min, max]\)區間的數都可以取到,即都存在對應的子區間,因為點權僅為\(1\)\(-1\),一個子區間左右擴張,其值只會加一或者減一,不會跳躍,而初始值為 \(0\)

因此問題就轉換成維護一個區間的子區間的最大值和最小值即可,這是一個簡單的\(dp\),即設 \(dp[i]\)表示以 \(i\)結尾的最大后綴和,然后再維護一個全域的最大值,最小值同理,

由于本題中 \(u = 1\),因此可以直接從 \(1\)開始 \(dfs\),維護這個 \(dp\)即可,撤銷\(dp\)相當于回溯,

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        vector<vector<int>> edge(n + 1);
        vector<int> val(n + 1);
        vector<vector<int>> target(n + 1);
        vector<int> q;
        val[0] = 1;
        int cur = 1;
        for(int i = 0; i < n; ++ i){
            string op;
            cin >> op;
            if (op[0] == '+'){
                int v, x;
                cin >> v >> x;
                -- v;
                edge[v].push_back(cur);
                edge[cur].push_back(v);
                val[cur] = x;
                ++ cur;
            }else{
                int u, v, k;
                cin >> u >> v >> k;
                -- u, -- v;
                assert(u == 0);
                target[v].push_back(int(q.size()));
                q.push_back(k);
            }
        }
        vector<int> ans(q.size());
        function<void(int, int, int, int, int, int)> dfs = [&](int u, int fa, int maxx, int minn, int gmaxx, int gminn){
            for(auto &t : target[u]){
                ans[t] = (q[t] <= gmaxx && q[t] >= gminn);
            }
            for(auto &v : edge[u]){
                if (v == fa)
                    continue;
                int nmaxx = max({maxx + val[v], val[v], 0});
                int nminn = min({minn + val[v], val[v], 0});
                int ngmaxx = max(gmaxx, nmaxx);
                int ngminn = min(gminn, nminn);
                dfs(v, u, nmaxx, nminn, ngmaxx, ngminn);
            }
        };
        dfs(0, 0, 1, 0, 1, 0);
        for(auto &i : ans)
            if (i)
                cout << "YES" << '\n';
            else 
                cout << "NO" << '\n';
    }

    return 0;
}



F2 - Omsk Metro (hard version) (CF1843 F2)

題目大意

給定一棵點權為\(1\)\(-1\)的樹,點數為\(n\)

給定\(q\)個詢問\(u, v, k\),依次回答從\(u \to v\)這條路徑中,是否存在一個子區間,其和為 \(k\)

解題思路

本題\(u \neq 1\)

在上一題中,我們將問題轉換成維護一個區間的子區間的最大值和最小值,

注意到這個資訊是可合并的,以最大值為例,

假設我們有一個左區間和一個右區間,現在我們要將其合并成一個大區間,并求其子區間的最大值,

那么該最大值只有三種情況:

  • 左區間的最大值
  • 右區間的最大值
  • 左區間的最大后綴和+右區間的最大前綴和

因此我們只需要額外增加最大前綴和最大后綴和這兩個資訊,我們就可以將兩個區間合并,得到新區間的最大值,

而為了維護最大前綴和最大后綴和,還需要區間和這個資訊,因為新區間的最大前綴和有兩種情況:

  • 左區間的最大前綴和
  • 左區間的區間和+右區間的最大前綴和

最大后綴和同理,因此我們只要維護一個區間的

  • 最大值、最小值
  • 最大前綴和、最小前綴和
  • 最大后綴和、最小后綴和
  • 區間和

這些資訊,我們就可以將兩個區間合并,得到一個大區間的資訊,

可合并有什么用呢?

每次詢問其實就是詢問一個區間的最大子區間和最小子區間和,因為這些區間的數量級是\(O(n^2)\),我們不可能一一計算,而是通過只計算某些區間,這樣其他區間都可以通過這些區間,以較少的代價合并得到,

回想下 \(st\)表,它可以 \(O(1)\)回答出任意一個區間的最值,但它預處理的復雜度只有 \(O(n\log n)\),也就是說它可以通過計算 \(n\log n\)個區間的最值,然后以\(O(1)\)的代價通過 這些計算好的區間,合并出任意區間的最值(注意最值這個資訊也是可合并的),而它用到的方法就是倍增

同樣,既然我們要維護的資訊是可合并的,我們可以運用倍增的思想,即樹上倍增,對于每個點,維護以這個點往父親方向,一共\(2^j\)個點所組成的序列的資訊,然后對于每個詢問所對應的路徑,通過 倍增的方式可以拆成\(\log\)個區間進行合并 ,

假設詢問\(u \to v\),因為在樹上,我們可以在它們的\(lca\)點拆開,這樣\(u \to lca\), \(v \to lca\)就是一條鏈,通過倍增合并得到其資訊(跟倍增lca是一樣的),最后再將\(u \to lca\)\(v \to lca\)合并(注意\(v \to lca\)資訊的前后綴要反轉過來)即得到\(u \to v\)的資訊,

這樣每次詢問的復雜度就是\(O(\log n)\)了,

當然因為是可合并的,樹鏈剖分將一個路徑剖分成若干條輕鏈和重鏈合并也不是不行

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

struct info{
    int max, premax, sufmax;
    int min, premin, sufmin;
    int sum;
};

info operator+(const info& a, const info& b){
    info c;
    c.max = max({a.max, b.max, a.sufmax + b.premax});
    c.premax = max(a.premax, a.sum + b.premax);
    c.sufmax = max(b.sufmax, b.sum + a.sufmax);
    c.min = min({a.min, b.min, a.sufmin + b.premin});
    c.premin = min(a.premin, a.sum + b.premin);
    c.sufmin = min(b.sufmin, b.sum + a.sufmin);
    c.sum = a.sum + b.sum;
    return c;
}

info reverse(const info& a){
    info c = a;
    swap(c.premax, c.sufmax);
    swap(c.premin, c.sufmin);
    return c;
}

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        vector<int> val(n + 1);
        val[0] = 1;
        int cur = 1;
        vector<array<int, 3>> q;
        vector<vector<int>> fa(32, vector<int>(n + 1));
        vector<int> deep(n + 1);
        for(int i = 0; i < n; ++ i){
            string op;
            cin >> op;
            if (op[0] == '+'){
                int v, x;
                cin >> v >> x;
                -- v;
                val[cur] = x;
                fa[0][cur] = v;
                deep[cur] = deep[v] + 1;
                ++ cur;
            }else{
                int u, v, k;
                cin >> u >> v >> k;
                -- u, -- v;
                q.push_back({u, v, k});
            }
        }
        vector<vector<info>> up(32, vector<info>(n));
        for(int i = 0; i < n; ++ i){
            if (val[i] == 1){
                up[0][i] = info{1,1,1,0,0,0,1};
            }else{
                up[0][i] = info{0,0,0,-1,-1,-1,-1};
            }
        }
        for(int i = 1; i < 32; ++ i){
            for(int j = 0; j < n; ++ j){
                fa[i][j] = fa[i - 1][fa[i - 1][j]];
                if (fa[i - 1][j] != fa[i][j])
                    up[i][j] = up[i - 1][j] + up[i - 1][fa[i - 1][j]];
            }
        }
        auto find = [&](int u, int v){
            if (deep[u] < deep[v])
                swap(u, v);
            int dis = deep[u] - deep[v];
            info l{}, r{};
            for(int i = 0; i < 32; ++ i){
                if (dis & 1){
                    l = l + up[i][u];
                    u = fa[i][u];
                }
                dis >>= 1;
            }
            if (u == v){
                return l + reverse(up[0][u]);
            }
            for(int i = 31; i >= 0; -- i){
                if (fa[i][u] != fa[i][v]){
                    l = l + up[i][u];
                    r = r + up[i][v];
                    u = fa[i][u];
                    v = fa[i][v];
                }
            }
            int lca = fa[0][u];
            l = l + up[0][u];
            r = r + up[0][v];
            return l + up[0][lca] + reverse(r);
        };
        auto solve = [&](int u, int v, int k){
            auto res = find(u, v);
            return res.min <= k && k <= res.max;
        };

        for(auto &[u, v, k] : q)
            if (solve(u, v, k))
                cout << "YES" << '\n';
            else 
                cout << "NO" << '\n';
    }

    return 0;
}



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555766.html

標籤:其他

上一篇:【技識訓累】資料結構中的基本概念【一】

下一篇:返回列表

標籤雲
其他(161454) Python(38244) JavaScript(25512) Java(18251) C(15238) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7260) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1970) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • Codeforces Round 881 (Div. 3)

    ## [A - Sasha and Array Coloring (CF1843 A)](https://codeforces.com/contest/1843/problem/A) ### 題目大意 給定一個陣列,給每個元素涂色。求最大的代價。 代價為每個顏色的代價和。 每個顏色的代價為涂了該顏色 ......

    uj5u.com 2023-06-22 07:45:56 more
  • 【技識訓累】資料結構中的基本概念【一】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-22 07:45:51 more
  • ZEGO 即構音樂場景降噪技術決議

    隨著線上泛娛樂的興起,語聊房、在線 KTV 以及直播等場景在人們的日常生活中占據越來越重要的地位,用戶對于音質的要求也越來越高,因此超越傳統語音降噪演算法的 AI 降噪演算法應運而生,所以目前各大 RTC 廠商普遍使用 AI 技術進行降噪處理,使用 AI 降噪技術消除除人聲外的一切聲音。 但對于一些特殊 ......

    uj5u.com 2023-06-22 07:45:16 more
  • 即視角|出海正當時:歐美、東南亞、中東、拉美市場觀察

    共享即構新洞察,共建行業新動能——ZEGO即構科技基于音視頻技術領域的多年深耕,綜合面向各行業的服務經驗,推出【即視角】欄目,發布即構對行業的洞察。歡迎大家探討論道,共驅前行。 ......

    uj5u.com 2023-06-22 07:44:46 more
  • 視頻直播原始碼技術知識分享:連麥功能(一)

    我們開發視頻直播平臺就要去了解視頻直播開發相關功能知識,這對我們開發平臺有著重要的作用,連麥技術就是視頻直播原始碼重要的技術功能之一,每一個功能技術都有自己的用武之地 ......

    uj5u.com 2023-06-22 07:43:25 more
  • 自動化平臺總結(httprunner+djangorestframework+python3+Mysql+

    一、前言 最近從零搭建了一個自動化測驗平臺,雖然不是第一次從零搭建,但是也從來沒有進行過這類搭建的總結,還是記錄一下,搭建程序中的一些問題和方法。方便以后總結和翻閱 二、簡介 搭建的平臺語言使用的是Python3.6,未來有空可能考慮加個java版本。前端用的Vue,主體是httprunner2.X ......

    uj5u.com 2023-06-22 07:43:10 more
  • 花2個月時間整理了3.5W字的自動化測驗面試題(答案+學習路線)!為了找

    從5月初開始找作業到現在,先后面試了阿里巴巴、位元組跳動、網易、快手的測驗開發崗。大公司對于測驗開發的要求相比來說高很多,要求掌握的知識點的廣度和深度層次也比較高,遂整理了這兩個月的面試題目檔案供大家參考,同時也是為了方便以后自己需要的時候刷一刷,不用再去到處找題。希望大家都能找到滿意的作業,共勉之! ......

    uj5u.com 2023-06-22 07:43:04 more
  • 淺析GeoServer CVE-2023-25157 SQL注入

    GeoServer是一個開源的地圖服務器,它是遵循OpenGIS Web服務器規范的J2EE實作,通過它可以方便的將地圖資料發布為地圖服務,實作地理空間資料在用戶之間的共享。 ......

    uj5u.com 2023-06-22 07:42:40 more
  • 【技識訓累】演算法中的基本概念【一】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-21 08:20:56 more
  • 現代密碼學第四版楊波著-期末復習匯總

    我將用一整天突擊,嶄新的一本書,從0到期末80+,(僅針對本校逆天考點進行總結) 完本總結:總計歷經兩天半,共計15小時,總計30+頁,僅帶來個人的復習思路與心路歷程 寫本博客原因? 馬上期末考試,整本書從來沒有看過,嘗試0基礎一天學完,突破自己。 網上沒有完全符合本課程的詳細匯總(其中一篇總結不錯 ......

    uj5u.com 2023-06-21 08:19:27 more