码迷,mamicode.com
首页 > 其他好文 > 详细

上帝的爱好

时间:2019-11-08 23:49:18      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:sample   美的   数字   color   row   play   c++   测试数据   正整数   

题目描述

  我们知道,词都是按照词牌来填的,上帝为了考验小杉,只给了他四种词牌,但只要压韵就算符合词牌。小杉已经想好了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 }

 



 


上帝的爱好

标签:sample   美的   数字   color   row   play   c++   测试数据   正整数   

原文地址:https://www.cnblogs.com/baixinyu/p/11823658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!