题目描述
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!
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");
}
}