神奇的序列 HNUST 1883

题目描述
       Aurora在南宁发现了一个神奇的序列,即对于该序列的任意相邻两数之和都不是三的倍数。现在给你一个长度为n的整数序列,让你判断是否能够通过重新排列序列里的数字使得该序列变成一个神奇的序列。
输入
第一行包含一个数字T(T <= 50), 表示测试数据组数。


每一组测试数据首先给出一个数字n(2 <= n <= 200) 表示序列的长度,接下来n个数ai(1<= ai <= 100) 表示该序列。


输出
每组测试数据输出一行。如果序列能通过重新排列变成一个神奇的序列,输出”pulsating!” 否则输出”day day up!”。


样例输入
2
4
1 3 2 4
6
1 2 3 6 3 27
样例输出
pulsating!

day day up!

思路:根据数学规则,可以把所有的数字转换成0 1 2(对3取余)。然后考虑不可能存在神奇序列情况

1)0的个数大于1 2的个数+1   形似:1 0 2 0 1

2)没有0的时候,有1和2       形似 : 1 2 1 2 1

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <string>
 
using namespace std;
typedef long long ll;
int a[10];
int main()
{
   int t;
   scanf("%d",&t);
   while(t--)
   {
       int n,num,flag=0;
       scanf("%d",&n);
       memset(a,0,sizeof(a));
       for(int i=1;i<=n;i++)
       {
           scanf("%d",&num);
           a[num%3]++;
       }
       int a0=a[0],a1=a[1],a2=a[2];
       if(a0>a1+a2+1)
          flag=1;
       else if(a0<a1+a2)
       {
           if(a0==0&&(a1!=0&&a2!=0))
            flag=1;
       }
       if(flag)
        printf("day day up!\n");
       else
        printf("pulsating!\n");
 
   }
 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值