(1)某個字母不確定,無從下手
牛客競賽題解
一,簡單的佇列模擬
遍歷字串,每次:
(1)把每個字元放進乙個佇列que[maxn]中,把每個字元
j = int(str[i]) -『a』 + 1 放進對應26個字母字首和陣列num[30]裡。
(2)直到某次str[i]這個字母在num[j]記錄的個數達到k次,讓字母從頭開始出隊(head++)直到指到了str[i]這個字母,此時字串長度len,在這個過程中失去的字母,如果組成了子串,則長度必然大於len,不用考慮
(3)重複上述操作,記下最小值
#include
#define maxn 200010
#define inf 9999999
using
namespace std;
int n,k,ans=inf;
int que[maxn]
,head=
1,tail=0;
int num[30]
;string str;
intmain()
else
--num[que[head]],
++head;
//不是達到k次的字母,出隊的字母次數減一}}
}if(ans==inf)
printf
("-1");
//遍歷完成,所有字母沒能達到k次
else
printf
("%d"
,ans)
;return0;
}
二,直接暴力建立結構體,包含該字母位置陣列和個數;
遍歷一遍字串,記下各個字母位置和個數;
遍歷一遍26個結構體,記下最小長度:
(1)每個結構體中,有n個字母,要比較n-k次
#include
using
namespace std;
struct node
sum[30]
;int
main()
int ans =
10000010
;for
(int i=
0; i<
26; i++)if
(ans !=
10000010
) cout<
else cout<
;}
牛客寒假多校第一場A
題目描述 在絕地求生 吃雞 遊戲裡,不同的槍枝有不同的威力,更是可以搭配不同的配件,以提公升槍枝的效能。每一把槍都有其威力及其可裝備配件種類。每乙個配件有其所屬種類,可以為槍枝提供威力的百分比加成。每一把槍只能裝備乙個同類配件。給你n把槍枝和m個配件,槍的威力為p,可裝備的配件數量為k,為k個不同型...
2020 牛客多校第一場
a b suffix array f infinite string comparision jzk開場提出了兩倍最大的長度,然後 dh 說直接比較a b和b a即可,由於是訓練賽,不想寫太長的 然後交了一發直接比較的 就過了 includeusing namespace std string s1...
牛客寒假第一場訓練賽
比賽鏈結 題解b題 構造題先找構造括號效率比較高的方法 這種括號裡面套括號效率比較高而且合法 所以思路就是對所給整數開方,剩餘的零頭我們用列舉的方法。但是對於一些資料直接用開方得到的數x構造的話,會導致零頭太小,不好構造零頭 第一步構造的是乙個對稱的括號,有x個左括號,如果零頭小於x的話,就不好構造...