主頁 >  其他 > 牛客小白月賽73

牛客小白月賽73

2023-05-31 08:19:25 其他

A.最小的數字

題目:

分析:

簡單列舉一下,找到第一個大于等于n的且是3的倍數的數

代碼:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    
    bool loop = true;
    
    if (n % 3 == 0)
            loop = false;
    
    while (loop)
    {
        n ++;
        if (n % 3 == 0)
            loop = false;
    }
    
    cout << n;
    
    return 0;
}

B.優美的GCD

題目:

分析:

根據題目條件,用兩個質數分別乘以n即可構造出答案,

代碼:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t;
    cin >> t;
    
    while (t --)
    {
        int n;
        cin >> n;
        
        cout << n * 2 << " " << n * 3 << endl;
    }
    
    return 0;
}

C.優美的序列

題目:


分析:

如果序列中存在相同項,由于下標差值最小是1,所以無解,
如果序列中不存在相同項,不妨對序列從小到大排序,由于兩兩各不相同,因此任意相鄰兩項的差的絕對值都至少是1,對任意1 <= i,j <= n都有|ai - aj| >= |i - j|成立

代碼:

#include <bits/stdc++.h>
using namespace std;

const int N = 1010;
int a[N];

int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t;
    cin >> t;
    
    while (t --)
    {
        int n;
        cin >> n;
        
        unordered_map<int, bool> mp;
        unordered_map<int, int> mp2;
        bool check = false;
        
        for (int i = 0; i < n; i ++)
        {
            cin >> a[i];
            
            if (mp[a[i]])
                check = true;
            mp[a[i]] = true;
        }
        
        if (check)
            cout << -1 << endl;
        else
        {
            sort(a, a + n);
            for (int i = 0; i < n; i ++)
                cout << a[i] << " ";
            cout << endl;
        }
        
    }
    
    return 0;
}

D/E Kevin喜歡零

題目:


分析:

hard版本:
x的末尾恰好有k個0,則x = p×10k = p×2k×5k且p與10互質,換句話說,設x中2的因子數位a, 5的因子數位b,當且僅當min(a, b) = k使得x的末尾恰好有k個0,因此,判斷一個區間內元素的累乘結果是否恰好有k個0,即看min(區間內因子2的總數,區間內因子5的總數)是否為k,這個查詢判斷可以用前綴和來做,接著就是列舉有多少個滿足此要求的區間,列舉區間我們可以采用固定一個端點然后列舉另一個端點的方式,不妨固定左端點,列舉右端點,由于我們統計的因子數量是非遞減的,因此可以二分右端點,設對于因子2的數量等于k的區間是[l2,r2],因子5的數量等于k的區間是[l5,r5],由于右端點的位置要滿足所選區間最小值是k,因此右端點的選擇范圍是[max(l2,l5), max(r2,r5)],最后統計所有滿足條件的區間數量即可,

代碼:

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 2e5 + 5;
int a[N];
LL s2[N], s5[N];

int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t;
    cin >> t;
    
    while (t --)
    {
        int n, k;
        cin >> n >> k;
        
        for (int i = 0; i <= n; i ++)
        {
            s2[i] = s5[i] = 0;
        }
        
        for (int i = 1; i <= n; i ++)
        {
            cin >> a[i];
            
            int m = a[i];
            
            while (m % 2 == 0)
            {
                s2[i] ++;
                m /= 2;
            }
            
            m = a[i];
            
            while (m % 5 == 0)
            {
                s5[i] ++;
                m /= 5;
            }
            
            s2[i] += s2[i - 1];
            s5[i] += s5[i - 1];
        }
        
        LL res = 0;
        
        for (int i = 1; i <= n; i ++)
        {
            LL t2 = s2[i - 1] + k, t5 = s5[i - 1] + k;
            int l2 = lower_bound(s2, s2 + n + 1, t2) - s2, r2 = upper_bound(s2, s2 + n + 1, t2) - s2 - 1;
            int l5 = lower_bound(s5, s5 + n + 1, t5) - s5, r5 = upper_bound(s5, s5 + n + 1, t5) - s5 - 1;
            
            int l = max(l2, l5), r = max(r2, r5);
            
            l = max(i, l); // 避免l列舉到i的左邊
            if (l == n + 1) // l為n + 1則說明沒有滿足條件的右端點
                continue;
            
            res += r - l + 1;
        }
        
        cout << res << endl;
    }
    
    return 0;
}

Kevin的哈希構造

題目:


分析:

考慮dp,定義f[i][j][k]為前i個字符中有j個相同項且字串哈希值為k的方案是否可行,
初始:f[0][0][0] = 1
轉移:
①可以考慮用前面的值來推當前:f[i][j][k] |= f[i - 1][j - (s[i] == c)][(k - (c - 'a' + 1) × bi + p) % p]
②也可以考慮用當前的值來推后面的值:f[i + 1][j + (s[i] == c)][(k × b + (c - 'a' + 1)) % p] |= f[i][j][k]
本人選擇的是第二種方式,
目標狀態: f[n][k][hash]
至于記錄方案則可以用一個pre_h陣列記錄上一個方案的哈希值以及ch陣列記錄當前方案的選擇的字符,

代碼:

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 55, M = 1010;

bool f[N][N][M];
LL pre_h[N][N][M];
char ch[N][N][M], s[N];

int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t;
    cin >> t;
    
    while (t --)
    {
        int n, p, k;
        LL b, H = 0;
        cin >> n >> b >> p >> k;
        
        cin >> s + 1;
        
        memset(f, false, sizeof f);
        f[0][0][0] = true;
        
        for (int i = 1; i <= n; i ++)
            H = (H * b + s[i] - 'a' + 1) % p;
        
        for (int i = 0; i <= n; i ++)
        {
            for (int j = 0; j <= min(i, k); j ++)
            {
                for (int l = 0; l < p; l ++)
                {
                    if (f[i][j][l])
                    {
                        for (char c = 'a'; c <= 'z'; c ++)
                        {
                            LL h2 = (l * b + (c - 'a' + 1)) % p;
                            if (s[i + 1] == c)
                            {
                                f[i + 1][j + 1][h2] = true;
                                pre_h[i + 1][j + 1][h2] = l;
                                ch[i + 1][j + 1][h2] = c;
                            }
                            else
                            {
                                f[i + 1][j][h2] = true;
                                pre_h[i + 1][j][h2] = l;
                                ch[i + 1][j][h2] = c;
                            }
                        }
                    }
                }
            }
        }
        
        if (!f[n][k][H])
            cout << -1 << endl;
        else
        {
            string res;
            
            for (int i = n, j = k, h2 = H; i >= 1; i --)
            {
                res += ch[i][j][h2];
                int tmp = h2;
                h2 = pre_h[i][j][h2];
                if (s[i] == ch[i][j][tmp])
                    j --;
            }
            
            reverse(res.begin(), res.end());
            
            cout << res << endl;
        }
    }
    
    return 0;
}

G.MoonLight的冒泡排序難題

題目:


分析:

代碼:

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 2e5 + 5, mod = 998244353;
LL f[N];

LL qmi(LL m, LL k)
{
    LL res = 1, t = m;
    
    while (k)
    {
        if (k & 1)
            res = res * t % mod;
        t = t * t % mod;
        k >>= 1;
    }
    
    return res;
}

int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    for (int i = 1; i <= N; i ++)
    {
        f[i] = (f[i - 1] + (i - 1) * qmi(i, mod - 2)) % mod;
    }
    
    int t;
    cin >> t;
    
    while (t --)
    {
        int n;
        cin >> n;
        
        cout << f[n] << endl;
    }
    
    return 0;
}

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

標籤:其他

上一篇:基于ZigBee3.0技術的數傳電臺功能使用詳解

下一篇:返回列表

標籤雲
其他(160010) Python(38189) JavaScript(25464) Java(18161) C(15234) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7217) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4579) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1950) C++(1927) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(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
最新发布
  • 牛客小白月賽73

    # A.最小的數字 ### 題目: ![](https://img2023.cnblogs.com/blog/2960080/202305/2960080-20230526220648535-777334559.png) ### 分析: 簡單列舉一下,找到第一個大于等于n的且是3的倍數的數 ### ......

    uj5u.com 2023-05-31 08:19:25 more
  • 基于ZigBee3.0技術的數傳電臺功能使用詳解

    一、ZigBee3.0數傳電臺功能簡介 1、4G DTU數傳電臺LINK燈詳解 基于zigbee3.0通信技術的4G DTU數傳電臺LINK燈用于指示模塊當前網路狀態,設備入網成功后LINK燈常亮,當設備沒有網路時LINK燈熄滅;在協調器模式下,該引腳指示zigbee模塊是否正常建立網路,協調器和路 ......

    uj5u.com 2023-05-31 08:18:54 more
  • 提高生產力的最佳免費開源終端:WindTerm

    WindTerm是一個免費的開源終端工具,旨在提高開發人員和系統管理員的生產力。它為使用命令列的用戶帶來了更好的終端體驗,使其能夠更快速、高效地完成操作。

    相比傳統終端,WindTerm具有多個優勢,如支持多標簽頁、自定義主題、自動補全等功能,這些功能都可以顯著提高開發人員的作業效率。此外,Win... ......

    uj5u.com 2023-05-31 08:18:39 more
  • Three.js教程:物件克隆、復制

    推薦:將NSDT場景編輯器加入你的3D工具鏈 其他系列工具:NSDT簡石數字孿生 物件克隆.clone()和復制.copy() Threejs大多數物件都有克隆.clone()和復制.copy()兩個方法,點模型Points、線模型Line、網格網格模型Mesh一樣具有這兩個方法。 復制方法.cop ......

    uj5u.com 2023-05-31 08:18:06 more
  • Java 集合類詳解(一)

    ## 為什么要使用集合 存盤多個資料可以使用陣列,但由于陣列在記憶體中是連續存盤的,所以會有一些限制。比如陣列在創建時就要指定長度,即可以容納的元素個數,且指定后無法更改;陣列在創建時需要指定元素的型別,并且所有元素都必須是該型別或其子類;添加或洗掉陣列中的元素需要創建一個新陣列再進行元素復制,比較麻 ......

    uj5u.com 2023-05-31 08:17:43 more
  • 詳解RocketMQ 順序消費機制

    摘要:順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先出(FIFO)的原則進行訊息發布和消費,即先發布的訊息先消費,后發布的訊息后消費。 本文分享自華為云社區《RocketMQ 順序消費機制》,作者: 勇哥java實戰分享 。 順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先 ......

    uj5u.com 2023-05-31 08:17:16 more
  • 直播原始碼平臺搭建技術分享之直播短信功能

    在利用直播原始碼去開發平臺中,直播原始碼功能技術是開發直播平臺的重要技術之一,今天我就為大家分享直播原始碼平臺搭建技術分享直播短信功能實作。 ......

    uj5u.com 2023-05-31 08:16:52 more
  • 5年測驗工程師經歷,下一步轉開發還是繼續測驗?

    測驗五年,沒有積累編程腳本能力和自動化經驗,找作業時都要求語言能力,自動化框架。
    感覺開發同事積累的經歷容易找作業。
    下一步,想辦法轉開發崗還是繼續測驗???
    正常情況下,有了四年的測驗工程師經歷,應該可以達到中級測驗工程師的水平了。作為一個初中級測驗工程師下一步是轉開發還是繼續做測驗,個人建議是做... ......

    uj5u.com 2023-05-31 08:16:12 more
  • 安全測驗實踐-萬家APP越權邏輯漏洞挖掘

    邏輯漏洞會導致業務面臨著巨大的經濟損失隱患與敏感資料泄露的風險,本文從安全測驗的角度,以越權邏輯漏洞為例,介紹邏輯漏洞的挖掘方法和實踐程序。 ......

    uj5u.com 2023-05-31 08:16:00 more
  • OWASP移動應用安全測驗指南中文版

    OWASP移動應用安全測驗指南(MASTG)是OWASP移動應用安全(MAS)旗艦專案的一部分,是一本涵蓋移動應用安全分析程序、技術和工具的綜合手冊,也是一套詳盡的測驗案例,用于驗證OWASP移動應用安全驗證標準(MASVS)中列出的要求,為完整和一致的安全測驗提供一個基線。 OWASP MASVS ......

    uj5u.com 2023-05-31 08:15:44 more