求金字塔數字非負的情況總數

Joerrot發表於2018-07-20

題目連結:

https://nanti.jisuanke.com/t/28855

題目大概意思是:輸入金字塔的底部一行的數字,要我們推匯出位於這一行之下的非負數字列的情況總數。

/*
看輸出樣例1:會發現 :
偶數列數字一旦+1,奇數列數字就-1;
而且第一個數字一確定,後面的數字就都確定了; 
如果第一個數字為0(以後第0列數字就從0開始增加),
由於以後的每一行都是偶數列在增加,奇數列在減少 ,
所以,應該找出第一行偶數列的最小數字p以及奇數列的最小數字q;
然後判斷p和q的非負情況即可(舉例子);
*/
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; 
int main()
{
	LL num,k;
	cin>>num;
	LL a[num];
	for(LL i=0;i<num;i++)
		cin>>a[i];
	LL b[num+1];
	b[0]=0;
	LL m=a[0];
	for(int i=1;i<num+1;i++)
	{
		b[i]=a[i-1]-b[i-1];
	}
	LL p=b[0],q=b[1];
	for(int i=0;i<num+1;i++)
	{
		if(i%2)
			q=min(b[i],q);
		else
			p=min(b[i],p);  //偶數列 ↑ 
	}
	if(q<0)
		cout<<0<<endl;
	else if(q==0)
	{
		if(p<0)
			cout<<0<<endl;
		else
			cout<<1<<endl;
	}
	else 
	{
		if(p>=0)
			cout<<q+1<<endl;
		else
		{
			if(q-abs(p)<0)
				cout<<0<<endl;
			else 
				cout<<q-abs(p)+1<<endl;
		}
			
	}
	return 0;
} 

 

相關文章