hdu 5143 NPY and arithmetic progression(暴力枚举)

http://acm.hdu.edu.cn/showproblem.php?pid=5143

 

题意 : 有一定数量的 1 2 3 4 

          要求每三个或以上数字组成等差数列 每个数字用一次

          问是否能把数字都用完

 

思路: 等差数列的可能有 1 2 3  ,  2 3 4 ,1 2 3 4, 或者三个或以上的常数列

         如果前三种数列有三个以上就能组成常数列

         所以我们从0到2 枚举 只要剩下的数字全都 等于0 或者大于等于3 就能满足条件

         (想到就能轻松解决 可惜每次都要看题解才知道怎么搞= =)

 

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;

bool ok(int a[])
{
    if((a[0]==0||a[0]>=3)&&(a[1]==0||a[1]>=3)&&(a[2]==0||a[2]>=3)&&(a[3]==0||a[3]>=3))
        return true;
    return false;
}
int main()
{
    int a[10],b[10];
    int n;
    int i,j,k;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
        if(ok(a)) printf("Yes\n");
        else
        {
            int ok1=0;
            for(i=0;i<=2;i++)
            {
                for(j=0;j<=2;j++)
                {
                    for(k=0;k<=2;k++)
                    {
                        b[0]=a[0]-i-j;
                        b[1]=a[1]-i-j-k;
                        b[2]=a[2]-i-j-k;
                        b[3]=a[3]-i-k;
                        if(ok(b)) ok1=1;
                    }
                }
            }
            if(ok1) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}

 

posted @ 2015-01-26 10:05  sola94  阅读(193)  评论(0编辑  收藏  举报