日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

[C] [字节跳动] [编程题] 手串

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C] [字节跳动] [编程题] 手串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

時間限制:C/C++ 1秒,其他語言2秒空間限制:C/C++ 64M,其他語言128M
鏈接:https://www.nowcoder.com/questionTerminal/0bb1fad52f474bdaa4d7636ca3a98244
來源:牛客網


首先遇到這一題是在字節跳動的一個前端試卷里,看上去不難,似乎就是一個數組+簡單查找的問題。但是我一直報錯,測試樣例過了,提交代碼就一直0分。

氣死了,遂上CSDN查找題解,作為一個底層C選手,讓我找到了一篇C++的題解,看懂之后,這不跟我的思路一樣嗎?這位博主提供了一個C++的AC代碼,但我發現缺少環的判斷啊,但是——當我把他的代碼CTRL C+V到答題區域之后,測試樣例沒過,提交卻AC了?

最后發現是題錯了!題目要求注意這里手串是一個環形,字節你是把它吃了嗎?去掉環的判斷就能AC了,然而連測試樣例都過不了你是認真的嗎?

練習結束之后我不甘心,上牛客網搜這道題,搜出一毛一樣的題之后提交了我的帶環判斷 的代碼,順利AC,再找到那位博主的代碼CTRL C+V,就0分。

我還是不甘心,遂把卷子翻出來重做,刪掉我最后的環形判斷的代碼,嘿,AC了。

我寶貴的一個半小時就浪費在一個錯題上!!看到這篇博客的小伙伴們別再踩坑了,嗚嗚嗚。


題目描述

作為一個手串藝人,有金主向你訂購了一條包含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
0
2 2 3
1 2
1 3

輸出

2

說明

第一種顏色出現在第1顆串珠,與規則無沖突。
第二種顏色分別出現在第 1,3,4顆串珠,第3顆與第4顆串珠相鄰,所以不合要求。
第三種顏色分別出現在第1,3,5顆串珠,第5顆串珠的下一個是第1顆,所以不合要求。
總計有2種顏色的分布是有問題的。 
這里第2顆串珠是透明的。

解題思路

觀察數字,n比較大,c比較小,可以定義一個a[n][c]的數組,表示第c號顏色是否存在于第n顆珠子上。存在則為1,不存在則為0。

當然,如果你喜歡,可以定義為a[c][n],含義一樣。

接著就是一個用一個數組來存對于每個顏色的珠子的位置,我的代碼里是b[]

接下來就是條件判斷:b[i + 1] - b[i] < m表示它在m顆內有重復出現,我們提前定義一個flag,表示這個顏色是否違規。(環判斷要用上)

違規一經發現,就要被抓走(break

環判斷:對于最后出現位置b[k](k是b的長度),判斷它離尾部的距離是否小于m,如果小于m,看b[1]出現的位置。

如果b[k] + m > n && b[1] < m - (n - b[k]) && flag == 0則表示在首位出游違規現象發生,抓走!


題解

#include <stdio.h>
int b[100001];
int a[100001][51];
int main()
{int n, m, c, num, color, cnt = 0;int i, j, k, l;scanf("%d %d %d", &n, &m, &c);for (i = 0; i < n; i++){scanf("%d", &num);for (j = 0; j < num; j++){scanf("%d", &color);a[i][color] = 1;}}int flag;for (j = 1; j <= c; j++){k = 0;flag = 0;for (i = 0; i < n; i++){if (a[i][j] == 1){k++;b[k] = i + 1;}}if (k != 1){for (i = 1; i < k; i++){if ( b[i + 1] - b[i] < m){cnt++;flag = 1;break;}}/* */if (b[k] + m > n && b[1] < m - (n - b[k]) && flag == 0){cnt++;}}}printf("%d", cnt);return 0;
}

友好起見,在此還是附上前文提到的那位C++的AC選手,注意只在字節(今日頭條)筆試題里有效。
當然我不是鼓勵讀者去復制代碼!
鏈接:今日頭條筆試之手串問題

總結

以上是生活随笔為你收集整理的[C] [字节跳动] [编程题] 手串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。