今日頭條[程式設計題] 手串
阿新 • • 發佈:2019-01-10
作為一個手串藝人,有金主向你訂購了一條包含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
輸出例子1:
2
例子說明:
第一種顏色出現在第1顆串珠,與規則無衝突。 第二種顏色分別出現在第 1,3,4顆串珠,第3顆與第4顆串珠相鄰,所以不合要求。 第三種顏色分別出現在第1,3,5顆串珠,第5顆串珠的下一個是第1顆,所以不合要求。 總計有2種顏色的分佈是有問題的。 這裡第2顆串珠是透明的
這道題我覺得是對思維的一種鍛鍊,我的思路以例子為例,即假設n為5 m為2 c為3
我設定一個a[5][3]的陣列來存放每個珠子的顏色
並設定一個b[5]來存放第i中顏色在哪些珠子上面有
通過對b陣列的迴圈來判斷相鄰m個有幾種相同顏色。
大家畫個草圖就很顯而易見了。
但是我在牛客網上相同程式碼第一次ac了百分之80,第二次ac了百分之70,第三次ac百分之百,我也很無語。
不過我用eclipse測試下來是正確的這個可以放心。
以下是程式碼:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int c=sc.nextInt(); int [][]a=new int[n][c]; for(int i=0;i<n;i++) { int num_i=sc.nextInt(); for(int j=0;j<num_i;j++) a[i][j]=sc.nextInt(); } //對於不同的顏色 int count=0; for(int i=0;i<c;i++) { //對於不同的珠子 int []b=new int[n]; for(int j=0;j<n;j++) { for(int k=0;k<c;k++) { if(a[j][k]==i+1) b[j]=1; } } //進行判斷 for(int l=0;l<n;l++) { int scount=0; for(int u=l;u<l+m;u++) { if(b[u%n]==1) scount++; } if(scount>1) { count++; break; } } } System.out.print(count); } }