上帝的愛好


題目描述

  我們知道,詞都是按照詞牌來填的,上帝為了考驗小杉,只給了他四種詞牌,但只要壓韻就算符合詞牌。小杉已經想好了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 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 }

 


 
         

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM