zzun 2076 : 三花聚顶神功

题目描述

        相传练就三花聚顶神功,就能够天下无敌。

人花-炼精化气,人本由精化而生,故精为轮回种子,修道者心必空於下焦,戒去淫欲,精不妄泻,则精满不思淫,铅花生矣;

地花-炼气化神,人之生存赖以气,心必空於下焦,无惊无恐,无忿无怨,则气平顺,道畅通,中气足而不思食,银花生矣;

天花-炼神还虚,精气虽足,无神者,则其体无光,其人无命,故神为主宰,今心空其上焦,不执不着,神满不思眠,常清常醒,则脱壳还虚,归入虚空境界,则金花生矣;

输入

输入一个T表示有T个样例

每组实例一个整数n(0〈n〈1000

接下来输入2*n个数字,代表一个2*n的矩阵(每个数大于0小于1000)

输出

这些数可以任意调换位置,如果任意一个数与相邻一个数相加和不是三的倍数,则输出YES,反之输出NO。

占一行。

样例输入

复制
2
10
6 6 6 6 6 1 1 1 1 1
8 8 8 8 8 8 8 8 8 8
4
3 6 9 1
1 2 1 7

样例输出

复制
YES
YES

题目描述是废话。
先把数字分为三类:
第一类:1,4,7......(加2能够被3整除)
第二类:2,5,8......(加1能够被3整除)
第三类:3,6,9......(直接能够被3整除)
输出NO的只有两种情况
一,第三类数字个数大于n
二,第一类和第二类混一块(两小种情况)
1,第三类数字小于等于一个不足以分开这两类数字,必定有相邻(相加能被3整除)
2,第三类数字只有两个,并且第一类和第二类数字都有且个数为偶,不足以分隔

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include<math.h>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[2005];
 7 int main()
 8 {
 9     int T, n;
10     scanf("%d", &T);
11     while(T--)
12     {
13         scanf("%d", &n);
14         int sum1, sum2, sum3, s=0;
15         sum1=sum2=sum3=0;
16         for(int i=0; i<2*n; i++)
17         {
18             scanf("%d", &a[i]);
19             if(a[i]%3==0)
20                 sum3++;
21             if((a[i]+2)%3==0)
22                 sum1++;
23             if((a[i]+1)%3==0)
24                 sum2++;
25         }
26         if(sum3>n)
27             printf("NO\n");
28         else if((sum3==2&&sum1!=0&&sum1%2==0&&sum2!=0&&sum2%2==0)||(sum3<=1&&sum1>0&&sum2>0))
29             printf("NO\n");
30         else
31         printf("YES\n");
32     }
33     return 0;
34 }

 

posted @ 2017-12-04 19:05  风子磊  阅读(793)  评论(0编辑  收藏  举报