zoukankan      html  css  js  c++  java
  • Xenia and Divisors

    Xenia and Divisors
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Xenia the mathematician has a sequence consisting of n (n is divisible by 3) positive integers, each of them is at most 7. She wants to split the sequence into groups of three so that for each group of three a, b, c the following conditions held:

    • a < b < c;
    • a divides bb divides c.

    Naturally, Xenia wants each element of the sequence to belong to exactly one group of three. Thus, if the required partition exists, then it has  groups of three.

    Help Xenia, find the required partition or else say that it doesn't exist.

    Input

    The first line contains integer n (3 ≤ n ≤ 99999) — the number of elements in the sequence. The next line contains n positive integers, each of them is at most 7.

    It is guaranteed that n is divisible by 3.

    Output

    If the required partition exists, print  groups of three. Print each group as values of the elements it contains. You should print values in increasing order. Separate the groups and integers in groups by whitespaces. If there are multiple solutions, you can print any of them.

    If there is no solution, print -1.

    数据最大才7。。。因此只有三种情况:1 2 4,1 2 6和1 3 6.

     1 #include <iostream>
     2 #include <queue>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 int n, cnt[8], ans[3];
     8 
     9 bool deal(int v)
    10 {
    11     bool ok = true;
    12     switch(v){
    13     case 7:
    14     case 5:
    15         ok = !cnt[v];
    16         break;
    17     case 4:
    18         if(cnt[4] > cnt[2] || cnt[4] > cnt[1]) {
    19             ok = false;
    20             break;
    21         }
    22         cnt[2] -= cnt[4];
    23         cnt[1] -= cnt[4];
    24         ans[0] = cnt[4];
    25         break;
    26     case 6:
    27         if(cnt[6] != cnt[2] + cnt[3] || cnt[6] != cnt[1]){
    28             ok = false;
    29             break;
    30         }
    31         ans[1] = cnt[2];
    32         ans[2] = cnt[3];
    33         break;
    34     }
    35     return ok;
    36 }
    37 
    38 int main()
    39 {
    40     while(scanf("%d", &n) != EOF){
    41         memset(cnt, 0, sizeof(cnt));
    42         while(n--){
    43             int v;
    44             scanf("%d", &v);
    45             cnt[v]++;
    46         }
    47         bool ok;
    48         ok = deal(7) && deal(5) && deal(4) && deal(6);
    49         if(ok){
    50             while(ans[0]--){
    51                 puts("1 2 4");
    52             }
    53             while(ans[1]--){
    54                 puts("1 2 6");
    55             }
    56             while(ans[2]--){
    57                 puts("1 3 6");
    58             }
    59         }
    60         else{
    61             puts("-1");
    62         }
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    怎样让一个div高度自适应浏览器高度
    angular change the url , prevent reloading
    论习惯的重要性
    php的几个内置的函数
    cakephp 2.0 源码解读(一)
    svn switch 的用法
    浏览器兼容问题 及 解决方案 (一)
    浏览器兼容问题 及 解决方案 (二)
    promise 承诺
    ng-selected 与ng-options的使用
  • 原文地址:https://www.cnblogs.com/cszlg/p/3307989.html
Copyright © 2011-2022 走看看