zoukankan      html  css  js  c++  java
  • HDU6168 Numbers

    题意:一个序列由原序列的任意两个数相加得到,给出新序列,求原序列

    题解:找到最小的两个值就是原序列的最小的两个,删掉两个数的和,重复上面步骤

    #include <bits/stdc++.h>
    #define ll long long
    #define maxn 130100
    using namespace std;
    map<int,int>mp;
    int a[maxn], ans[maxn];
    inline void gg(int x){
        if(mp[x] == 1) mp.erase(x);
        else mp[x]--;
    }
    int main(){
        int n, num, t;
        while(~scanf("%d", &n)){
            num = 0; mp.clear();
            for(int i=0;i<n;i++) scanf("%d", &t), mp[t]++;
            ans[num++] = mp.begin()->first;
            gg(ans[num-1]);
            ans[num++] = mp.begin()->first;
            gg(ans[num-1]);
            while(1){
                for(int i=0;i<num-1;i++)
                    gg(ans[i]+ans[num-1]);
                if(mp.size() == 0) break;
                ans[num++] = mp.begin()->first;
                gg(ans[num-1]);
            }
            cout<<num<<endl;
            for(int i=0;i<num;i++)
                printf("%d%c", ans[i], i==num-1?'
    ':' ');
        }
        return 0;
    }
  • 相关阅读:
    Linux之cd、pwd、mkdir、rmdir
    Linux之目录结构配置
    Linux之chgrp
    Linux之chown
    Linux之chmod
    Linux之用户组、文件权限详解
    Linux命令之shutdown
    Linux命令之man
    Git-.gitignore配置
    Linux内核移植到JZ2440
  • 原文地址:https://www.cnblogs.com/Noevon/p/7413723.html
Copyright © 2011-2022 走看看