Sample Input 4 1 0 0 1 1 2 2 1 1 0 1 2 0 2 0 1 2 4 3 1 3 4 5 2 1 0 3 0 1 2 4 4 1 0 2 4 1 0 0 4 0 1 2 3 4 5 6 7 8 9 10 0
Sample Output 1 4 2 8 3 6 4 10
题意:一个集合里边的所有元素都大于集合两端的前一个和后一个元素,则这个集合为一个岛,求岛的数量。
比赛的时候无脑翻译错题意以为是依次消去最小的要消几次,可怕的是四个样例结果都刚好是对得上的,让我没怀疑自己理解错了!!!英语渣真心伤不起。
思路:三个循环从头开始暴力,用集合长度作为一个变量,符合条件的就计数加一。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[20],sum,flag;
int main()
{
int t,k,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=12;i++)
{
cin>>a[i];
}
sum=0;
for(int i=2;i<=11;i++)
{
for(int j=i;j<=11;j++)
{
flag=1;
for(int k=i;k<=j;k++)
{
if(a[k]<=a[i-1]||a[k]<=a[j+1])
{
flag=0;
break;
}
}
//cout<<flag<<endl;
if(flag==1)
{
sum++;
}
}
}
cout<<n<<" "<<sum<<endl;
}
return 0;
}