羅区P1970庭師
JDOJ 2230:[NOIP2013]庭師D2 T2
説明
別の庭師が植物花あたりの花の行を植えた後、独自の高さを有しています。花はますます大きく、より多くの混雑し成長しました。行の別の後、花の残りの部分にスペースが育つことができるように、残り同時に、その場に残る取り除か花に参加することを決めた、と多くはフラワーアレンジメントの残りの部分は、よりシックだった願っています。
具体的には、別の後の花の高さは、整数ℎ1、ℎ2、...、ℎnとみなすことができます。削除花被の一部を設定する場合は、花の残りの部分は非常にG1、G2、...、GM、そして次の2つの条件は、少なくとも一つの満たされていることを非常に期待しました。
条件A:すべての1≤iに対してはm / 2、G2iと> G2iと-1、及びG2iと> G2iと+ 1≤。
条件B:すべての1≤iについてはm / 2≤、G2iと<G2iと-1、及びG2iと<G2iと+ 1。
上記2つの条件が、M> 1が最も出会うにあるとき同時に、1 = Mを満足していることに留意されたいです。
別の後の花は、ほとんどが所定の位置にとどまることができますどのくらい私は、お願いします。
入力
入力の最初の行は、花の開始時の木の数を表す整数を含んでいます。
二行目はℎ1続く整数を、含まれている、ℎ2は、...、ℎn、植物あたりの花の高さを表しています。
出力
出力の行は、整数mが含まれている、木の花の数を表している場所までにしておくことができます。
サンプル入力
5 3 2 1 2
サンプル出力
3
ヒント
例説明[O]
わずか3花を保持するいくつかの方法は、最初の行1,4,5、5,1,2の高さは、それぞれ、残して、例えば、ありますが、条件Bを満たします
[データ範囲]
データの20%を、N≤10。
データの30%、N≤25。
データの70%を、N≤1000年≤ℎi≤1000,0。
1,000,000≤ℎi≤データの100%、100,000,0≤1≤nに、全てℎiランダムに生成され、一定の範囲内でのすべての一様に分布する乱数に従います。
ソース
ソリューション:
それは見ることができます:\(2I \)であっても、されている\(。。1-2i / 1 2I + \)が奇数である場合、この関数は、 "ダウン"画像として見ることができます。すなわち:山と谷。その後、我々はその答えに到達する列挙することにより、このプロセスをシミュレートすることができるようになります。
コード:
#include<cstdio>
using namespace std;
const int maxn=1e5+10;
int n,ans=1;
int h[maxn];
bool flag;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&h[i]);
if(h[2]>=h[1])
flag=1;
for(int i=1;i<=n;i++)
{
if(!flag&&i==n)
{
ans++;
break;
}
if(flag)
if(h[i+1]<h[i])
{
ans++;
flag=0;
continue;
}
if(!flag)
if(h[i+1]>h[i])
{
ans++;
flag=1;
continue;
}
}
printf("%d",ans);
return 0;
}