2023牛客暑期多校訓練營8(A/H/I/J)

目錄

A.Alive Fossils

?H.Insert 1, Insert 2, Insert 3, ...

I.Make It Square

J.Permutation and Primes


A.Alive Fossils

思路:一開始題意看半天沒看懂,后面發現只需要輸出t組輸入中,都出現過的字符串即可。

代碼:

void solve() {int t;cin>>t;for(int i=1;i<=t;i++){int n;cin>>n;for(int i=1;i<=n;i++){string s;cin>>s;mp[s]++;}}vector<string>ans;for(auto x:mp){if(x.second==t){ans.push_back(x.first);}}cout<<ans.size()<<endl;for(auto x:ans) cout<<x<<endl;
}

?H.Insert 1, Insert 2, Insert 3, ...

思路:根據題意我們可以發現,因為數字是按順序1,2,3......插,所以若一段區間[l,r]滿足條件,那么[l,r'](r'<=r)也必然滿足條件。我們可以從后往前遍歷,也就是遍歷區間[i,n](i從n遍歷到1)。每次遍歷到a[i]時,因為插入是順序的,所以這個a[i],一定能和a[i]+1這個值對應,把它“抵消”掉,所以若一個區間合法,那么這個區間會被“抵消”完,第i個點的貢獻為最左邊的沒被抵消完的端點-i。

舉個例子吧,拿樣例一來說,它的序列為:

1 1 2 2 3 3

從后往前遍歷,遍歷了i=5以及i=6,此時存入了兩個3,它們都不合法:

不合法的值:3 3

不合法的下標:5 6

貢獻為:最左邊的沒被抵消完的端點-i=5-5=0

然后遍歷到i=4,此時a[i]=2,他能與一個a[i]+1抵消,也就是把3給抵消了,此時:

不合法的值:2?3

不合法的下標:4?6

貢獻為:最左邊的沒被抵消完的端點-i=4-4=0

然后遍歷到i=3,此時a[i]還是2,他還是能把3抵消,此時:

不合法的值:2 2

不合法的下標:3 4

貢獻為:最左邊的沒被抵消完的端點-i=3-3=0

然后遍歷到i=2,此時a[i]是1,他能把一個2抵消,此時:

不合法的值:2 (1不放入不合法的值中,因為單個1合法)

不合法的下標:4

貢獻為:最左邊的沒被抵消完的端點-i=4-2=2

然后遍歷到i=1,此時a[i]還是1,他能把一個2抵消,此時:

不合法的值:?無(1不放入不合法的值中,因為單個1合法)

不合法的下標:無

此時后面都合法了,貢獻為i~n整個區間也就是6

總貢獻為 :0+0+0+2+6=8

代碼:

vector<int>ans,pos[maxn];
//ans存最入不滿足條件的點
//pos[x]存入a[i]=x的位置
int a[maxn],st[maxn];
void solve() {int n,res=0;cin>>n;ans.push_back(n+1);//放入初始值,使得:若點i后面沒有不滿足條件的點,則答案加n-i+1,也就是i~n區間的貢獻。for(int i=1; i<=n; i++)cin>>a[i];for(int i=n; i>=1; i--) {if(pos[a[i]+1].size()) {st[pos[a[i]+1].back()]=true;//這個點被上一個點"抵消"了,標記這個點已經合法了pos[a[i]+1].pop_back();//消掉}if(a[i]>1) {pos[a[i]].push_back(i);//存入值對應的下標ans.push_back(i);//存入不合法的位置}while(st[ans.back()])ans.pop_back();//把合法的都彈出res+=ans.back()-i;}cout<<res<<endl;
}

I.Make It Square

思路:若字符串s的長度小于t,我們將兩個字符串翻轉后交換,仍可以使得字符串s大于t,所以我們考慮s長度大于t的情況。

通過手玩樣例我們可以發現,隨著字符串p和q長度的增加,對于字符串s,分割點是固定的,分割點在后綴大小為(s.size()-t.size())/2。舉個例子,比如樣例三:

s=abbabbababbab,t=bab。

當p.size()=q.size()=1時:

?p+s+q+t=?abbabbababbab?bab

分割為??abbabbab??abbab?bab

當p.size()=q.size()=2時:

?p+s+q+t=??abbabbababbab??bab

分割為???abbabbab??abbab??bab

以??abbabbab??abbab??bab舉例,

首先,若bab與abbabbab的后綴不重合,那么這兩個部分的字符串怎么都不會相等。然后可以看出,我們可以通過字符串abbabbab作為后綴,字符串abbab作為前綴,來求出已經不固定的字符個數。

若這兩個部分有重合,則判斷重合部分是否一樣,也就是abbabbab的重合前綴和abbab重合后綴是否一樣,利用z函數判斷即可,若重合部分一樣則答案為1,反之答案為0。

若這兩個部分沒重合,則計算不固定字符的個數,答案為26的冪次。

具體實現見代碼:

代碼:

vector<int> zFunction(string s) {int n = s.size();vector<int> z(n + 1);z[0] = n;for (int i = 1, j = 1; i < n; i++) {z[i] = max(0ll, min(j + z[j] - i, z[i - j]));while (i + z[i] < n && s[z[i]] == s[i + z[i]]) {z[i]++;}if (i + z[i] > j + z[j]) {j = i;}}return z;
}
void solve() {k26[0]=1;for(int i=1; i<maxn; i++) {k26[i]=k26[i-1]*26%mod;}//預處理26的冪次string s,t;int n;cin>>n>>s>>t;int lens=s.size(),lent=t.size();if((lens+lent)%2) {//若字符串長度之和為奇數,那么它們怎么都不能分割成兩個相等字符串for(int i=1; i<=n; i++)cout<<0<<" ";return;}if(lens<lent) {reverse(s.begin(),s.end());reverse(t.begin(),t.end());swap(s,t);swap(lens,lent);}if(s.substr((lens+lent)/2-lent,lent)!=t) {//判斷字符串t作為后綴是否合法for(int i=1; i<=n; i++)cout<<0<<" ";return;}auto v=zFunction(s);reverse(v.begin(),v.end());//v[i]表示長度為i的后綴與前綴的最大公共前綴FOR(1,n) {int now=(lens+lent+2*i)/2;//當前一半的總字符串長度int p=abs(lens-now);if(lens>now) {//若有重合部分if(v[p]!=p) cout<<0<<" ";//重合部分是否全部相同else cout<<1<<" ";//答案為加1} else {cout<<k26[p]<<" ";//答案為26^(不確定字符的個數)}}
}

J.Permutation and Primes

思路:我們可以先構造長度為7的循環節:

i+3,i+6,i+1,i+4,i+7,i+2,i+5

那么若n%7不為0的時候怎么辦呢?我們可以先把前面的長度為7循環節給賦值,然后最后7+n%7個數,我們隨便找一組解滿足它與循環節的末尾形成奇質數,放預處理后面即可。

代碼:

int cmp[7][15] {{3,6,1,4,7,2,5},//長度為7的循環節{5,2,7,4,1,8,3,6},//最后8個數,此時n%7=1{9,6,3,8,5,2,7,4,1},//最后9個數,此時n%7=2{9,4,7,2,5,10,3,8,1,6},//最后10個數,此時n%7=3{11,8,5,10,7,2,9,4,1,6,3},//最后11個數,此時n%7=4{1,6,3,10,7,12,5,2,9,4,11,8},//最后12個數,此時n%7=5{1,4,9,2,7,12,5,10,3,6,13,8,11}//最后13個數,此時n%7=6
};
void solve() {cin>>n;int k=n/7;if(n==2) {cout<<"1 2"<<endl;} else if(n==3) {cout<<"1 2 3"<<endl;} else if(n==4) {cout<<"1 2 3 4"<<endl;} else if(n==5) {cout<<"1 4 3 2 5"<<endl;} else if(n==6) {cout<<"4 3 6 5 2 1"<<endl;}if(n<=6)return;for(int i=0; i<k-1; i++) {for(int j=0; j<7; j++) {a[i*7+j+1]=i*7+cmp[0][j];}}//前面的循環節賦值 for(int i=0; i<7+n%7; i++) {a[(k-1)*7+i+1]=(k-1)*7+cmp[n%7][i];}//最后放合法解 for(int i=1; i<=n; i++)cout<<a[i]<<" \n"[i==n];
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39130.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39130.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39130.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實驗三 圖像分割與描述

一、實驗目的&#xff1a; &#xff08;1&#xff09;進一步掌握圖像處理工具Matlab&#xff0c;熟悉基于Matlab的圖像處理函數。 &#xff08;2&#xff09;掌握圖像分割方法&#xff0c;熟悉常用圖像描述方法。 二、實驗原理 1.膚色檢測 膚色是人類皮膚重要特征之一&#xff…

7.原 型

7.1原型 【例如】 另外- this指向&#xff1a; 構造函數和原型對象中的this都指向實例化的對象 7.2 constructor屬性 每個原型對象里面都有個constructor屬性( constructor構造函數) 作用&#xff1a;該屬性指向該原型對象的構造函數 使用場景: 如果有多個對象的方法&#…

Springboot 實踐(4)swagger-ui 測試controller

前文項目操作&#xff0c;完成了項目的創建、數據源的配置以及數據庫DAO程序的生成與配置。此文講解利用swagger-ui界面&#xff0c;測試生成的數據庫DAO程序。目前&#xff0c;項目swagger-ui界面如下&#xff1a; 以”用戶管理”為例&#xff0c;簡單講述swagger-ui測試數據庫…

無涯教程-Perl - s函數

描述 這不是功能。這是正則表達式替換運算符。根據PATTERN中指定的正則表達式,將數據替換為REPLACE。與m //一樣,分隔符由s后的第一個字符定義。 語法 以下是此函數的簡單語法- s/PATTERN/REPLACE/返回值 如果失敗,此函數返回0,如果成功,則返回替換次數。 例 以下是顯示…

筆記:移植xenomai到nuc972

xenomai是一個實時操作系統,想要使用它,先要移植I-pipe補丁 補丁在xenomai / ipipe-arm GitLab 我的內核是4.4-248的,合并上去會有幾個小錯誤,隨便改改就好 編譯內核沒有報錯之后,接下來需要修改arch/arm/mach-nuc970/time.c 修改方法參考補丁里面其它設備的定時器驅動,就…

學習Vue:數據綁定的基本概念

在 Vue.js 中&#xff0c;Vue 實例是您構建應用程序的核心。它允許您將數據和界面連接起來&#xff0c;實現動態的數據綁定&#xff0c;使您的應用程序能夠根據數據的變化自動更新界面。讓我們來深入了解 Vue 實例與數據綁定的基本概念。 Vue 實例與數據綁定 什么是 Vue 實例&…

OPC【2】——Relationships

引言 Relationships由一系列Relationship構成。將Abstract Package看做是一個圖數據結構&#xff0c;則Relationships是圖數據中的邊集合。 Package Relationships 對于Package Relationships&#xff0c;其所有引用關系的source對象為Abstract Package&#xff0c;或者看…

【Python機器學習】實驗10 支持向量機

文章目錄 支持向量機實例1 線性可分的支持向量機1.1 數據讀取1.2 準備訓練數據1.3 實例化線性支持向量機1.4 可視化分析 實例2 核支持向量機2.1 讀取數據集2.2 定義高斯核函數2.3 創建非線性的支持向量機2.4 可視化樣本類別 實例3 如何選擇最優的C和gamma3.1 讀取數據3.2 利用數…

Open3D 最小二乘擬合平面(SVD分解法)

目錄 一、算法原理二、代碼實現三、結果展示1、點云2、擬合結果四、優秀博客本文由CSDN點云俠原創,原文鏈接。爬蟲網站自重。 一、算法原理 本文實現矩陣奇異值分解方法的最小二乘擬合平面。原理如下: 對于得到的 n n

歐拉函數(質因子分解)

思路&#xff1a; (1)歐拉函數&#xff1a;輸入n則輸出1~n中與n互質的數的個數。 &#xff08;2&#xff09;計算公式&#xff1a; &#xff08;3&#xff09;證明&#xff1a;&#xff08;容斥原理&#xff09;對于n個數&#xff0c;先分別摘除所有被pi整除的數&#xff0c;…

億信ABI有什么不同,來看最新DEMO演示

為了給用戶營造更好的體驗環境&#xff0c;提供更豐富、更完善的服務&#xff0c;億信華辰旗下核心產品億信ABI DEMO再次上新啦&#xff01;本次億信ABI DEMO環境在原有基礎上煥新升級&#xff0c;帶來了全新的主視覺界面、豐富的行業應用和功能演示DEMO&#xff0c;我們一起來…

季度到季度的組件選擇

組件&#xff1a;<template><div class"quarter"><div class"input-wrap" id"closeId" mouseover"handler" click.stop"btn" :style"{color:colorItem}"><i class"el-icon-date"&…

【Java】BF算法(串模式匹配算法)

?? 什么是BF算法 BF算法&#xff0c;即暴力算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是將目標串S的第一個與模式串T的第一個字符串進行匹配&#xff0c;若相等&#xff0c;則繼續比較S的第二個字符和T的第二個字符&#xff1b;若不相等&#xff0c;則…

【計算機視覺|生成對抗】用深度卷積生成對抗網絡進行無監督表示學習(DCGAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 鏈接&#xff1a;[1511.06434] Unsupervised Representation Learning with Deep Conv…

騰訊云CVM服務器競價實例是什么?和按量計費有什么區別?

騰訊云服務器CVM計費模式分為包年包月、按量計費和競價實例&#xff0c;什么是競價實例&#xff1f;競價實例和按量付費相類似&#xff0c;優勢是價格更劃算&#xff0c;缺點是云服務器實例有被自動釋放風險&#xff0c;騰訊云服務器網來詳細說下什么是競價實例&#xff1f;以及…

NLP——操作步驟講義與實踐鏈接

數據集與語料 語料是NLP的生命之源&#xff0c;所有NLP問題都是從語料中學到數據分布的規律語料的分類&#xff1a;單語料&#xff0c;平行語料&#xff0c;復雜結構 語料的例子&#xff1a;Penn Treebank, Daily Dialog, WMT-1x翻譯數據集&#xff0c;中文閑聊數據集&#xf…

大數據:Numpy基礎應用詳解

Numpy基礎應用 Numpy 是一個開源的 Python 科學計算庫&#xff0c;用于快速處理任意維度的數組。Numpy 支持常見的數組和矩陣操作&#xff0c;對于同樣的數值計算任務&#xff0c;使用 NumPy 不僅代碼要簡潔的多&#xff0c;而且 NumPy 的性能遠遠優于原生 Python&#xff0c;…

mysql-5.5.62-win32安裝與使用

1.為啥是這個版本而不是當前最新的8.0&#xff1f; 因為我要用32位。目前mysql支持win32的版本最新只到5.7.33。 首先&#xff0c;到官網MySQL :: MySQL Downloads 然后選 選一個自己喜歡的版本就好。我這里是如標題版本。下載32位的zip。然后回來解壓。 完了創建系統環境變…

項目實施方案案例模板-拿來即用

《項目實施方案》實際案例模板&#xff0c;拿來即用&#xff0c;原件可獲取。 項目背景 項目目標 項目范圍 項目總體計劃 項目組織架構 5.1. 項目職責分工 項目風險點 6.1. 項目風險分析 6.2. 項目實施關鍵點 項目管理規范 7.1. 項目實施約束 7.2. 項目變更凍結 7…

(三) CUDA 硬件實現

一組帶有on-chip 共享內存的SIMD多處理器 GPU可以被看作一組多處理器, 每個多處理器使用單一指令&#xff0c;多數據架構(SIMD)【單指令流多數據流】 在任何給定的時鐘周期內&#xff0c;多處理器的每個處理器執行同一指令&#xff0c;但操作不同的數據 每個多處理器使用以下…