筆試刷題 頭條

2021-08-20 10:33:21 字數 1717 閱讀 5325

題目介紹:

/**

作為乙個手串藝人,有金主向你訂購了一條包含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顆串珠是透明的。

*/

思路如下:

colorpostable[c]表示第c種顏色出現的位置(按照順時針錄入)

colorset記錄顏色的種類

遍歷colorset的各種顏色

然後根據colorpostable[c]中看成乙個環,是否存在pos1 pos2 pos3其中pos1 pos2 pos3是列表中相鄰(順時針數)的三個下標然後看

int curleft = (cur-1+sz)%sz; 

int distleft = abs(colorpostable[color][cur]-colorpostable[color][curleft]);

(環中兩點距離計算短的那段)  distleft = min(distleft, n-distleft);

若pos2向左 向右距離 pos1 pos3距離都小於m那麼pos2就是乙個符合題目要求的位置,計數器加一

**如下:

#include#include#include#include#define max_n 10005

#define max_m 1005

#define max_c 55

using namespace std;

//colorpostable[c]表示第c種顏色出現的位置,若colorpostable[c]=0表示無色阻斷(先按題目無色不阻斷嘗試)

vectorcolorpostable[max_c];

setcolorset;

int main()

for(int cur=0; cur}

}printf("%d", cnt);

return 0;

}

筆試刷題 頭條

題目描述 給定乙個陣列序列,需要求選出乙個區間,使得該區間是所有區間中經過如下計算的值最大的乙個 區間中的最小數 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列 6 2 1 則根據上述公式,可得到所有可以選定各個區間的計算值 6 6 6 36 2 2 2 4 1 ...

今日頭條筆試

問題描述 給定乙個段落,由 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...