題目描述
我們知道,詞都是按照詞牌來填的,上帝為了考驗小杉,只給了他四種詞牌,但只要壓韻就算符合詞牌。小杉已經想好了N個意境優美的句子,每個句子都有一個韻腳。符合要求的詞的句式應當有如下四種" XXYY" ," XYXY" ," XYYX" ," XXXX" ,其中X或Y表示韻腳。現在小杉想知道,從他想的N個句子之中,最多能按順序挑選出幾首符合條件的詞。並且詞的句子間不能交錯,比如你選了1 4 6 8做為一首詩,那么7你就不能再選了。
輸入數據
每組測試數據的第一行有一個數 N(N<=4000)。N
第二行有N個不超過10^4的正整數,第i個整數表示第i個句子的韻腳,整數相同表示韻腳相同
30%的數據 N<=100.N
輸出數據
對每組測試數據輸出一行,僅有一個數字,表示小杉最多能挑出幾首詞來。
樣例輸入
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 }