2 해설

  • 1
    @ 2025-1-10 15:53:15

    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
      @ 2025-1-10 15:50:50
      #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
      아이디