上帝的愛好

題目描述

  咱們知道,詞都是按照詞牌來填的,上帝爲了考驗小杉,只給了他四種詞牌,但只要壓韻就算符合詞牌。小杉已經想好了N個意境優美的句子,每一個句子都有一個韻腳。符合要求的詞的句式應當有以下四種" XXYY" ," XYXY" ," XYYX" ," XXXX" ,其中X或Y表示韻腳。如今小杉想知道,從他想的N個句子之中,最多能按順序挑選出幾首符合條件的詞。而且詞的句子間不能交錯,好比你選了1 4 6 8作爲一首詩,那麼7你就不能再選了。ios

輸入數據

   每組測試數據的第一行有一個數 N(N<=4000)。N

   第二行有N個不超過10^4的正整數,第i個整數表示第i個句子的韻腳,整數相同表示韻腳相同c++

   30%的數據 N<=100.N 100數組

輸出數據

   對每組測試數據輸出一行,僅有一個數字,表示小杉最多能挑出幾首詞來

樣例輸入

12 1 2 4 2 3 1 2 2 1 1 2 2

樣例輸出

2

【解題思路】
將此題進行解析,N個句子每一個用一個整數表明,即一個整數表示一個句子中的韻腳。如題中所說只要符合四種詞牌就算押韻,即只要N個數字中有兩個
整數知足上述四種句式就知足一首詞。

兩個數字分別爲1 和 2
1122 2211 1212 2121 1221 2112 1111 2222都知足四種句式,即都符合詩詞的要求。
思路轉化爲 ====》求一個含有四個整數的數組,若是存在倆對元素相等知足四種句式。
可是題中還提到,句子不能交錯,若是選擇1 4 6 8 位置上的句子,那麼2 3 5 7 位置上的數字就不能在選擇了。
【代碼實現(c++)】
 1 #include <iostream>
 2 using namespace std;  3 int n;  4 int A[4001];  5 int main()  6 {  7     int c=0,a,b,sum = 0;  8     cin>>n;  9     for(int i = 0;i<n;i++) 10         cin>>A[i]; 11     int temp = 0; 12     for(int i = 0;i<n;i++) 13  { 14         for(int j = temp;j<i;j++) 15  { 16             if(A[i] == A[j]) 17  { 18                 c++; 19                 A[i] = A[j] = -1; 20                 break; 21  } 22  } 23         if(c==2) 24             sum++,c=0,temp = i; 25  } 26     cout<<sum<<endl; 27     return 0; 28 }
相關文章
相關標籤/搜索