今日頭條筆試之手串問題

2021-08-14 14:06:45 字數 1348 閱讀 6384

一、問題描述

題目摘自牛客網,可以到牛客網直接查詢,現直接貼上原題目描述。

作為乙個手串藝人,有金主向你訂購了一條包含n個雜色串珠的手串——每個串珠要麼無色,要麼塗了若干種顏色。為了使手串的色彩看起來不那麼單調,金主要求,手串上的任意一種顏色(不包含無色),在任意連續的m個串珠裡至多出現一次(注意這裡手串是乙個環形)。手串上的顏色一共有c種。現在按順時針序告訴你n個串珠的手串上,每個串珠用所包含的顏色分別有哪些。請你判斷該手串上有多少種顏色不符合要求。即詢問有多少種顏色在任意連續m個串珠中出現了至少兩次。

輸入描述:

第一行輸入n,m,c三個數,用空格隔開。(1 <= n <= 10000, 1 <= m <= 1000, 1 <= c <= 50) 接下來n行每行的第乙個數num_i(0 <= num_i <= c)表示第i顆珠子有多少種顏色。接下來依次讀入num_i個數字,每個數字x表示第i顆柱子上包含第x種顏色(1 <= x <= c)

輸出描述:

乙個非負整數,表示該手鍊上有多少種顏色不符需求。

輸入例子1:

5 2 3

3 1 2 3

02 2 3

1 21 3

輸出例子1:

2例子說明1:

第一種顏色出現在第1顆串珠,與規則無衝突。

第二種顏色分別出現在第 1,3,4顆串珠,第3顆與第4顆串珠相鄰,所以不合要求。

第三種顏色分別出現在第1,3,5顆串珠,第5顆串珠的下乙個是第1顆,所以不合要求。

總計有2種顏色的分布是有問題的。 

這裡第2顆串珠是透明的。

二、解題思路

題目問的是所有顏色中共有幾種顏色的分布有問題,即同一種顏色在連續的小於m個珠子中同時出現。因此最自然的思路就是遍歷每一種顏色,判讀該顏色的分布是否有問題。由於共有n個珠子,c種顏色,因此很自然的想到用乙個nxc的矩陣儲存每種顏色出現在哪個珠子上,初始化矩陣元素都為0,某種顏色出現在了某個珠子上,則其對應的元素置1,比如第一種顏色出現在了第2個珠子上,則a[1][1]=1(珠子下標從0開始,顏色下標從1開始)。因此按列遍歷矩陣,遍歷的時候記錄每種顏色出現在了哪些珠子上,然後依次對這些珠子檢查是否滿足分布,有顏色不滿足分布時,計數cnt++。最後要注意的是由於珠子是連成串的,因此判斷時要對珠子下標取模n運算。

三、ac**

#include #include using namespace std;

int main()

}for(int j=1;j<=c;j++)

if(k != 1)}}

}cout << cnt

}

今日頭條筆試

問題描述 給定乙個段落,由 n 個句子組成。第 i 個句子的長度為 l i 包含的單詞個數為 w i 句子不包含任何除字母和空格 外的符號。每個句子內部,含有若干個單詞,由空格 分隔。句子不會包含連續的空格。隨後給定 m 個查詢,每個查詢包含乙個句子,需要在段落中尋找相同單詞數量最多的句子。重複的單...

2017 08 22 今日頭條筆試題

有乙個值得分享的地方,是x排序之後對應y的問題 我用了乙個很大的陣列,以x為索引,y為陣列值,不需要用到map。其實也是因為我懶不想去學map操作了,下次試試用map。include include include using namespace std int main cin n x.clear...

或與加(今日頭條筆試)

給定 x,k 求滿足 x y x y 的第 k 小的正整數 y 是二進位制的或 or 運算,例如 3 5 7。比如當 x 5,k 1時返回 2,因為5 1 6 不等於 5 1 5,而 5 2 7 等於 5 2 7。輸入描述 每組測試用例僅包含一組資料,每組資料為兩個正整數 x k。滿足 0 x k ...