首页 > 代码库 > hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

题目链接

题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性

分析:

类似cf的题目,比赛的时候都没想出来,简直笨到极点。。。。。

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <vector> 7 #include <algorithm> 8 #define LL __int64 9 const int maxn = 100000+10;10 using namespace std;11 int a[maxn];12 13 int main()14 {15     int i, t, n, ca = 1, ans, f;16     scanf("%d", &t);17     while(t--)18     {19         ans = 0; f = 0;20         scanf("%d", &n);21         for(i = 1; i <= n; i++)22         {23             scanf("%d", &a[i]);24             if(i>=2)25             {26                if(a[i-1]==1 && a[i]==2)27                ans ++;28                if(a[i-1]==2 && a[i]==1)29                ans ++;30                if(a[i-1]==a[i] && a[i]!=1) //这两种都是不符合规则的31                f = 1;32                if(abs(a[i]-a[i-1])>3)33                f = 1;34             }35         }36         if(f)37         printf("Case #%d: 0\n", ca++);  //不存在的情况38         else if(a[n]==0)39         printf("Case #%d: %d\n", ca++, ans+1);  //最后分差为0,结果少了一半40         else41         printf("Case #%d: %d\n", ca++, 2*ans+2);42     }43     return 0;44 }