題目介紹:
/**
作為乙個手串藝人,有金主向你訂購了一條包含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...