题目大意:
n(为三的倍数)个数的一个序列(每个数均不大于7),找出a,b,c
a能被b整除,b能被c整除,序列中的每个数都被用到。
1 2 3 4 5 6 7
只有 1 2 4
1 2 6
1 3 6
才能满足。
设他们分别有 x,y,z个
#include<stdio.h> #include<string.h> #include<algorithm> #include<map> using namespace std; int a[100100]; map<int ,int>m; int main() { int i,n; int flag=0; while(scanf("%d",&n)!=EOF) { m.clear(); memset(a,0,sizeof(a)); //for(i=0; i<n; i++) //printf("%d ",m[i]); for(i=0; i<n; i++) { scanf("%d",&a[i]); if(!flag) { if(a[i]==5||a[i]==7)flag=1; else m[a[i]]++; } } //printf("%d %d %d %d ",flag,m[1],m[3],m[6]); if(flag||m[2]+m[3]!=m[1]||m[4]+m[6]!=m[1]||m[4]>m[2]||m[3]>m[6]) {//m[4]>m[2]||m[3]>m[6]又写漏了判断条件,WA死的节奏 printf("-1 "); } else { for(i=0; i<m[4]; i++) printf("1 2 4 "); for(i=0; i<m[2]-m[4]; i++) printf("1 2 6 "); for(i=0; i<m[3]; i++) printf("1 3 6 "); } } //sort(a,a+n); return 0; }