主頁 >  其他 > AtCoder Beginner Contest 300

AtCoder Beginner Contest 300

2023-04-30 07:50:49 其他

A - N-choice question (abc300 a)

題目大意

給定一個元素互不相同的陣列\(c\)\(a,b\),找到 \(i\)使得 \(c_i = a + b\)

解題思路

直接for回圈尋找即可,

神奇的代碼
#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 n, a, b;
    cin >> n >> a >> b;
    for(int i = 0; i < n; ++ i){
        int c;
        cin >> c;
        if (c == a + b){
            cout << i + 1 << '\n';
            return 0;
        }
    }

    return 0;
}



B - Same Map in the RPG World (abc300 b)

題目大意

給定兩個矩陣\(A,B\),問能否對 \(A\)進行若干次變換操作得到 \(B\)

變換分兩種,一種是將第一列放到最后一列,另一種是將第一行放到最后一行,

解題思路

范圍不大,直接列舉所有變換操作判斷即可,

如果我們將左右連通,上下連通,那么變換操作實際上不改變每個點的上下左右點,即變換操作可以看成將矩形左上角的點移動,

時間復雜度為\(O(H^2W^2)\)

神奇的代碼
#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 h, w;
    cin >> h >> w;
    vector<string> a(h), b(h);
    for(auto &i : a){
        cin >> i;
    }
    for(auto &i : b){
        cin >> i;
    }
    auto equal = [&](int x, int y){
        for(int i = 0; i < h; ++ i)
            for(int j = 0; j < w; ++ j){
                int X = (x + i) % h;
                int Y = (y + j) % w;
                if (a[X][Y] != b[i][j]){
                    return false;
                }
            }
        return true;
    };
    auto check = [&](){
        for(int i = 0; i < h; ++ i)
            for(int j = 0; j < w; ++ j)
                if (equal(i, j))
                    return true;
        return false;
    };
    if (check()){
        cout << "Yes" << '\n';
    }
    else 
        cout << "No" << '\n';
    return 0;
}



C - Cross (abc300 c)

題目大意

給定一個包含.#的矩形,問由#組成的形如X的最長長度,每個長度的數量,

解題思路

范圍不大,列舉X的位置和大小判斷即可,

時間復雜度為\(O(HW\min(HW))\)

神奇的代碼
#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 h, w;
    cin >> h >> w;
    vector<string> s(h);
    for(auto &i : s)
        cin >> i;
    int sz = min(h, w);
    vector<int> ans(sz + 1);
    auto check = [&](int x, int y){
        if (s[x][y] != '#')
            return 0;
        for(int i = 0; i <= sz; ++ i){
            for(int dx = -1; dx <= 1; dx += 2)
                for(int dy = -1; dy <= 1; dy += 2){
                    int nx = x + i * dx, ny = y + i * dy;
                    if (nx >= h || nx < 0 || ny < 0 || ny >= w)
                        return i - 1;
                    if (s[nx][ny] != '#')
                        return i - 1;
                }
        }
        return sz;
    };
    for(int i = 0; i < h; ++ i)
        for(int j = 0; j < w; ++ j)
            ans[check(i, j)] ++;
    for(int i = 1; i <= sz; ++ i)
        cout << ans[i] << " \n"[i == sz];

    return 0;
}



D - AABCC (abc300 d)

題目大意

\(1 \sim n\)中能表示成 \(a^2 \times b \times c^2(a < b < c)\)\(a,b,c\)為質數的數的個數,

解題思路

由于\(n \leq 10^{12}\),預處理\(1 \to 10^6\)的質數,然后列舉\(c\)\(a\),計算得到乘積小于等于 \(n\)的最大的 \(b\),此時符合條件的數量就是 \(1 \sim b\)中的質數個數,這個事先預處理即可,

時間復雜度是 \(O(\sqrt{n} \log n)\)

神奇的代碼
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
#define FOR(i, x, y) for (decay<decltype(y)>::type i = (x), _##i = (y); i < _##i; ++i)
#define FORD(i, x, y) for (decay<decltype(x)>::type i = (x), _##i = (y); i > _##i; --i)

const LL p_max = 1E6 + 100;
LL pr[p_max], p_sz;
int cnt[p_max];
void get_prime() {
    static bool vis[p_max];
    FOR (i, 2, p_max) {
        if (!vis[i]) {
            pr[p_sz++] = i;
            cnt[i] = 1;
        }
        FOR (j, 0, p_sz) {
            if (pr[j] * i >= p_max) break;
            vis[pr[j] * i] = 1;
            if (i % pr[j] == 0) break;
        }
    }
    FOR(i, 2, p_max)
        cnt[i] += cnt[i - 1];
}

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    LL n;
    cin >> n;
    LL ans = 0;
    get_prime();
    for(int i = 0; i < p_sz; ++ i){
        for(int j = 0; j < i; ++ j){
            LL sum = 1ll * pr[i] * pr[i] * pr[j] * pr[j];
            if (sum > n)
                break;
            LL maxb = min(n / sum, pr[i] - 1);
            if (maxb <= pr[j])
                break;
            ans += cnt[maxb] - cnt[pr[j]];
        }
    }
    cout << ans << '\n';

    return 0;
}



E - Dice Product 3 (abc300 e)

題目大意

六面骰子,每面等概率出現,

現在不斷擲骰子,直到擲出來的數的乘積大于等于\(N\)

問恰好為 \(N\)的概率,對 \(998244353\)取模,

解題思路

顯然\(n\)的質因數只能有 \(2,3,5\)

\(dp[n]\)表示最終是 \(n\)的概率,根據定義, \(dp[n] = \frac{1}{6}dp[\frac{n}{1}] + \frac{1}{6}dp[\frac{n}{2}] + \frac{1}{6}dp[\frac{n}{3}] + \frac{1}{6}dp[\frac{n}{4}] + \frac{1}{6}dp[\frac{n}{5}] + \frac{1}{6}dp[\frac{n}{6}]\),即擲出\(n\)的概率,應當是先擲出 \(\frac{n}{1}\) ,然后再以\(\frac{1}{6}\)的概率擲出 \(1\),或者先擲出 \(\frac{n}{2}\) ,然后再以\(\frac{1}{6}\)的概率擲出 \(2\),依次類推,

當然,如果不整除就沒有這部分的概率貢獻,

化簡一下就是\(dp[n] = \frac{1}{5}dp[\frac{n}{2}] + \frac{1}{5}dp[\frac{n}{3}] + \frac{1}{5}dp[\frac{n}{4}] + \frac{1}{5}dp[\frac{n}{5}] + \frac{1}{5}dp[\frac{n}{6}]\)

因為每次轉移狀態大小都會除以一個數,所以最終的狀態數量應該不會超過\(O(n \log n)\),寫個記憶化就可以了,

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

const int mo = 998244353;

long long qpower(long long a, long long b){
    long long qwq = 1;
    while(b){
        if (b & 1)
            qwq = qwq * a % mo;
        a = a * a % mo;
        b >>= 1;
    }
    return qwq;
}

long long inv(long long x){
    return qpower(x, mo - 2);
}

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    LL n, ba;
    cin >> n;
    ba = n;
    int cnt2 = 0, cnt3 = 0, cnt5 = 0;
    while (n % 2 == 0){
        ++ cnt2;
        n /= 2;
    }
    while (n % 3 == 0){
        ++ cnt3;
        n /= 3;
    }
    while (n % 5 == 0){
        ++ cnt5;
        n /= 5;
    }
    if (n != 1)
        cout << 0 << '\n';
    else{
        map<LL, int> cache;
        LL inv5 = inv(5);
        function<LL(LL)> dfs = [&](LL n){
            if (n == 1)
                return 1;
            if (cache.find(n) != cache.end())
                return cache[n];
            LL ans = 0;
            for(int i = 2; i <= 6; ++ i)
                if (n % i == 0){
                    ans = (ans + dfs(n / i));
                    if (ans >= mo)
                        ans -= mo;
                }
            cache[n] = ans * inv5 % mo;
            return cache[n];
        };
        cout << dfs(ba) << '\n';

    }

    return 0;
}



F - More Holidays (abc300 f)

題目大意

給定一個包含xo的字串\(t\),它由一個長度為\(n\)的串\(s\)重復 \(m\)次拼接得到,要求將恰好 \(k\)x變成o,問連續o的最大長度,

解題思路

x的位置都記錄下來,容易發現我們進行變換的x肯定是一組連續的x

我們列舉進行變化的第一個x,然后找到之后的第 \(k\)x,之間的長度取個最大值即可,

雖然這個x\(nm = 10^{14}\)個,但由于串是重復拼接得到的,第二部分的串的 x實際上跟第一個串的情況一致(并且不會更優),因此我們只需要列舉第一個串x和第二個串的第一個x(注意這個情況,會利用第一個串最后一個x和第二個串的第一個x之間的o,可能從第一個串的第一個x更優),

神奇的代碼
#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 n, m;
    LL k;
    cin >> n >> m >> k;
    string s;
    cin >> s;
    vector<int> pos;
    LL cnt = 0;
    for(int i = 0; i < n; ++ i){
        cnt += (s[i] == 'x');
        if (s[i] == 'x')
            pos.push_back(i);
    }
    LL ans = 0;
    LL la = -1;
    auto solve = [&](int st){
        LL left = pos.size() - st;
        LL minn = min(left, k);
        left = k - minn;
        if (left == 0){
            if (st + k == pos.size()){
                return 1ll * n + pos[0] * (m > 1);
            }else {
                return 1ll * pos[st + k];
            }
        }
        LL shift = left / cnt + 1;
        LL remain = left % cnt;
        if (remain == 0 && shift == m){
            return shift * n;
        }else if (shift > m || shift == m && remain > 0)
            return 0ll;
        else{
            return shift * n + pos[remain];
        }
    };
    for(int i = 0; i < pos.size(); ++ i){
        LL r = solve(i);
        ans = max(ans, r - la - 1);
        la = pos[i];
    }
    if (m > 1){
        m -= 1;
        LL r = solve(0);
        ans = max(ans, n + r - pos.back() - 1);
    }
    cout << ans << '\n';

    return 0;
}


求第\(k\)x可能有些情況要討論,官方題解采用的二分法就可以以\(\log\)的代價避免這個討論,

x的數量和串\(s\)的長度是同一個數量級,我們也可以列舉答案的左端點,然后二分找到恰好包含\(k\)x的最右端點,長度取個最大值,

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

const LL inf = 1e18;

int main(void) {
    ios::sync_with_stdio(false); 
    cin.tie(0); cout.tie(0);
    int n, m;
    LL k;
    cin >> n >> m >> k;
    string s;
    cin >> s;
    vector<int> sum(n);
    LL cnt = 0;
    for(int i = 0; i < n; ++ i){
        if (s[i] == 'x'){
            sum[i] = 1;
        }
    }
    partial_sum(sum.begin(), sum.end(), sum.begin());
    LL ans = 0;
    LL la = -1;
    auto count = [&](LL pos){
        LL shift = pos / n, remain = pos % n;
        return shift * sum.back() + sum[remain] * (shift != m);
    };
    auto solve = [&](int st){
        LL l = st, r = 1ll * n * m;
        LL down = st == 0 ? 0 : sum[st - 1];
        while(l + 1 < r){
            LL mid = (l + r) >> 1;
            if (count(mid) - down <= k)
                l = mid;
            else 
                r = mid;
        };
        return r;
    };
    for(int i = 0; i < n; ++ i){
        LL r = solve(i);
        ans = max(ans, r - i);
    }
    cout << ans << '\n';

    return 0;
}



G - P-smooth number (abc300 g)

題目大意

<++>

解題思路

<++>

神奇的代碼



Ex - Fibonacci: Revisited (abc300 h)

題目大意

<++>

解題思路

<++>

神奇的代碼



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

標籤:其他

上一篇:中國剩余定理(CRT)學習筆記

下一篇:返回列表

標籤雲
其他(158337) Python(38110) JavaScript(25398) Java(18011) C(15221) 區塊鏈(8261) C#(7972) AI(7469) 爪哇(7425) MySQL(7152) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5334) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1964) Web開發(1951) HtmlCss(1929) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(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
最新发布
  • AtCoder Beginner Contest 300

    A - N-choice question (abc300 a) 題目大意 給定一個元素互不相同的陣列$c$和 $a,b$,找到 $i$使得 $c_i = a + b$ 解題思路 直接for回圈尋找即可。 神奇的代碼 ```cpp #include using namespace std; usin ......

    uj5u.com 2023-04-30 07:50:49 more
  • 中國剩余定理(CRT)學習筆記

    約定 $A\perp B$ 表示 $\gcd(A,B)=1$。 $A\mid B$ 表示 $B\equiv 0\pmod{A}(A\neq0)$。 引入 考慮以下這道題: 有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。 問物幾何?—— 《孫子算經》 也就是說,求出下列關于 $x$ 方程組的 ......

    uj5u.com 2023-04-30 07:50:44 more
  • Vulnhub之GreenOptics靶機詳細測驗程序

    GreenOptics 識別目標主機IP地址 ─(kali?kali)-[~/Vulnhub/GreenOptic] └─$ sudo netdiscover -i eth1 -r 192.168.56.0/24 Currently scanning: Finished! | Screen View ......

    uj5u.com 2023-04-30 07:50:40 more
  • 一文帶你了解區塊鏈中15種共識演算法

    所有主要的區塊鏈共識演算法解釋 區塊鏈技術席卷全球,提供了一種去中心化且安全的資訊存盤和傳輸方式。它還徹底改變了交易的執行方式,隨之而來的是廣泛的共識演算法。在這里,共識演算法在確保區塊鏈網路的完整性方面發揮著關鍵作用。在本文中,我們將探討所有主要型別的區塊鏈共識演算法、它們的含義、優點、缺點,以及為什么它 ......

    uj5u.com 2023-04-30 07:50:19 more
  • Spring RCE漏洞

    Spring RCE漏洞 一、漏洞概況與影響 CVE編號:CVE-2022-22965 受影響范圍: Spring Framework 5.3.X < 5.3.18 Spring Framework 5.2.X < 5.2.20 JDK >=9 使用Tomcat中間件且開啟了Tomcat日志記錄的應 ......

    uj5u.com 2023-04-30 07:50:04 more
  • xss-labs靶場

    在線XSS-labs靶場:https://xssaq.com/yx/ 靶場搭建 靶場是直接使用docker搭建的 docker pull vulfocus/xss-labs 啟動靶場 docker run -p 8005:80 vulfocus/xss-labs 瀏覽器訪問IP+8005 windo ......

    uj5u.com 2023-04-30 07:49:11 more
  • traefik網關的https上游配置

    老牌網關traefik。因為沒有中文網站和社區支持,自己研究很費勁。
    https上游如何配置,沒有一個可用的。我把經驗總結下來,給大家使用。 ......

    uj5u.com 2023-04-30 07:48:23 more
  • 解密Prompt系列6. lora指令微調扣細節-請冷靜,1個小時真不夠~

    上一章介紹了如何基于APE+SELF自動化構建指令微調樣本。這一章咱就把微調跑起來,主要介紹以Lora為首的低引數微調原理,環境配置,微調代碼,以及大模型訓練中顯存和耗時優化的相關技術細節 ......

    uj5u.com 2023-04-30 07:48:10 more
  • Midjourney 創建私人畫圖機器人(保姆級教程)

    本教程收集于:AIGC從入門到精通教程匯總 之前給大家介紹過了Midjourney 的注冊教程:AI繪畫:Midjourney 注冊(保姆級教程) 也有Stable Diffusion(開源)的本地搭建教程:AI數字繪畫:stable-diffusion 本地部署教程 你是不是遇到以下問題: 1.M ......

    uj5u.com 2023-04-30 07:47:20 more
  • Codeforces Round 868 Div 2

    A. A-characteristic (CF 1823 A) 題目大意 要求構造一個僅包含$1$和 $-1$的長度為 $n$的陣列 $a$,使得存在 $k$個下標對 $(i, j), i < j$滿足 $a_i \times a_j = 1$。 解題思路 當有$x$個 $1$, $y$個 $-1$ ......

    uj5u.com 2023-04-30 07:46:24 more