2 해설
-
1
Description
数学家 小田 有一个由 n n ( n n 能被 3 3 整除) 个正整数组成的数列,每个正整数最多为 7 7。她想把这个数列以三个数为一组进行拆分,并使得每组 a , b , c a, b, c 都满足以下条件:
a < b < c a < b < c ; a a 可以整除 b b , b b 可以整除 c c 。 自然地,小田 希望序列中的每个元素都能得到分配。
帮助 小田 ,找到所需的分组,否则就说它不存在。
Input
第一行包含整数 n ( 3 ≤ n ≤ 99999 ) n(3 ≤ n ≤ 99999) ,表示序列中元素的数量。
下一行包含 n n 个正整数,每个正整数最多为 7 7。
保证 n n 能被 3 3 整除。
Output
如果存在满足条件的分组,则需要输出 n 3 3 n 行,每行输出其中一组的元素的值,用空格隔开,如果有多个解,输出其中一种即可。
如果无解,则输出 − 1 −1 。
-
1
#include <bits/stdc++.h> using namespace std; int x,y,z,n,m,w[8]; int main(){//={1,2,4}={1,2,6}={1,3,6} cin>>n; for(int i=1;i<=n;i++){ cin>>m; w[m]++; if(m==5||m==7){ cout<<"-1"; return 0; } } for(int i=1;i<=n/3;i++){ if(w[1]>0&&w[2]>0&&w[4]>0){ x++; w[1]--; w[2]--; w[4]--; } else if(w[1]>0&&w[2]>0&&w[6]>0){ y++; w[1]--; w[2]--; w[6]--; } else if(w[1]>0&&w[3]>0&&w[6]>0){ z++; w[1]--; w[3]--; w[6]--; } } for(int i=1;i<=7;i++){ if(w[i]>0){ cout<<-1; return 0; } } for(int i=1;i<=n/3;i++){ if(x>0){cout<<1<<" "<<2<<" "<<4<<endl; x--; } else if(y>0){cout<<1<<" "<<2<<" "<<6<<endl; y--; } else if(z>0){cout<<1<<" "<<3<<" "<<6<<endl; z--; } } return 0; }
- 1
정보
- ID
- 33
- 시간
- 1000ms
- 메모리
- 256MiB
- 난이도
- 6
- 태그
- 제출 기록
- 76
- 맞았습니다.
- 21
- 아이디