CF 342A Xenia and Divisors (数学规律)

转载请注明出处:http://blog.csdn.net/a1dark

分析:这题是一个数学规律的题、由于题目说了给出的数据都不大于7、又要满足a,b,c能够相互整除的情况、所以经推导只有3种情况:

1  2  4

1  2  6

1  3  6

于是规律就出来了、我们只需要判断1的个数、2的个数、3的个数、4的个数、6的个数能不能满足这种规律、就可以了、其中3和4是独立的、所以可以用1的个数减去3和4的个数、剩下第二组1的个数、2和6是同样的道理、最后只剩下1、2、6的个数、看相不相等并且必须要大于等于0才行、

#include<stdio.h>
#include<string.h>
int dp[10];
int map[10];
int main(){
    int n,x,i;
    while(scanf("%d",&n)!=EOF){
        memset(dp,0,sizeof(dp));
        memset(map,0,sizeof(map));
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            dp[x]++;
        }
        for(int j=1;j<=6;j++)
            map[j]=dp[j];
        dp[1]=dp[1]-dp[3];
        dp[1]=dp[1]-dp[4];
        dp[2]=dp[2]-dp[4];
        dp[6]=dp[6]-dp[3];
        if(dp[1]>=0&&dp[2]>=0&&dp[6]>=0&&dp[1]==dp[2]&&dp[1]==dp[6]&&(n==(map[1]+map[2]+map[3]+map[4]+map[6]))){
            for(i=1;i<=dp[4];i++){
                printf("1 2 4\n");
            }
            for(i=1;i<=dp[6];i++)
                printf("1 2 6\n");
            for(i=1;i<=dp[3];i++)
                printf("1 3 6\n");
        }
        else {
            printf("-1\n");
        }
    }
    return 0;
}


你可能感兴趣的:(ACM,codeforces,数学规律)