2014多校第十场1002 || HDU 4972 A simple dynamic programming problem

题目链接

题意 : 每次无论哪个队投进一个篮球,就记下现在两队比分的差值,问你最后的结果有多少种情况。

思路 : 该题实在是不好理解,最后的结果有多少种情况就是说不管中间过程怎么来的,只要最后结果不一样的情况。因为会有不合法数据,类似于2 2 2 或者是1 5 9 23这种数据,非法数据就是0种情况,但是1 1 1 这种情况是可以的,你赢了1分的球,我下次赢了2分的球,差值还是1 ,由此也推断,整个数列中会产生不同情况的地方只有1 2 或者2 1 这些情况,你赢了1分球,然后你又赢了1分球,差值为2 ,与你赢了1分球我赢了3分球差值还为2 如果最后结果不一样 的话就是两种情况。

 #include <cstdio>
#include <cstring>
#include <math.h>
#include <iostream>
#define LL long long using namespace std ;
int a[] ; int main()
{
int T,n,casee = ;
scanf("%d",&T) ;
while(T--)
{
scanf("%d",&n) ;
for(int i = ; i <= n ; i++)
{
scanf("%d",&a[i]) ;
}
LL ans = ;
bool flag = true ;
for(int i = ; i <= n ; i++)
{
if(fabs(a[i]-a[i-]) > )
{
flag = false ;
break ;
}
if(a[i] == a[i-] && a[i] != )
{
flag = false ;
break ;
}
if(a[i] == && a[i-] == ) ans ++ ;
if(a[i] == && a[i-] == ) ans ++ ;
}
printf("Case #%d: ",casee++) ;
if(!flag)
{
printf("0\n") ;
continue;
}
else if(a[n] == )
{
printf("%I64d\n",ans) ;
continue ;
}
printf("%I64d\n",ans*) ;
}
return ;
}
上一篇:Ansible 小手册系列 十一(变量)


下一篇:阿里云centos6.5下搭建javaWeb运行环境