1. 程式人生 > >今日頭條[程式設計題] 手串

今日頭條[程式設計題] 手串

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