zoukankan      html  css  js  c++  java
  • 1036: 小希的数表

    1036: 小希的数表

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 417  解决: 283
    [提交][状态][讨论版]

    题目描述

    Gardon 昨天给小希布置了一道作业,即根据一张由不超过 5000 的 N(3<=N<=100)个正整数组成的数表两两相加得到 N*(N-1)/2 个和,然后再将它们排序。例如,如果数表里含有四个数 1,3,4,9,那么正确答案是 4,5,7,10,12,13。小希做完作业以后出去玩了一阵,可是下午回家时发现原来的那张数表不见了,好在她做出的答案还在,你能帮助她根据她的答案计算出原来的数表么?

    输入

    包含多组数据,每组数据以一个 N 开头,接下来的一行有按照大小顺序排列的 N*(N-1)/2 个数,是小希完成的答案。文件最后以一个 0 结束。
    假设输入保证解的存在性和唯一性。

    输出

     对于每组数据,输出原来的数表。它们也应当是按照顺序排列的。

    样例输入

    4
    4 5 7 10 12 13
    4
    5 6 7 8 9 10
    0

    样例输出

    1 3 4 9
    2 3 4 6




    #include<iostream>
    #include<vector>
    using namespace std;
    int solve(int x,int s2,int s1){
    if((x+s2-s1)%2==0){
    return (x+s2-s1)/2;
    }
    else
    return 0;
    }
    int main(){
    for(;;){
    int n;
    cin>>n;
    if(n==0)break;
    else{
    int a[n];
    vector<int> s(n*(n-1)/2);
    for(int i=0;i<n*(n-1)/2;i++){
    cin>>s[i];
    }
    for(int i=2;i<n*(n-1)/2;i++){
    if(solve(s[i],s[1],s[0])!=0){
    a[2]=solve(s[i],s[1],s[0]);
    s[i]=0;
    break;
    }
    }
    a[1]=s[0]-s[1]+a[2];
    a[0]=s[0]-a[1];
    s[0]=0;s[1]=0;
    int j=2;
    for(int i=3;i<n;i++){
    for(int j=2;j<n*(n-1)/2;j++){
    if(s[j]!=0){
    a[i]=s[j]-a[0];}
    for(int k=0;k<i;k++){
    for(int q=0;q<n*(n-1)/2;q++){
    if(s[q]==a[i]+a[k]){
    s[q]=0;
    }
    }
    }
    }
    }
    for(int i=0;i<n;i++){
    if(i==0)
    cout<<a[i];
    else
    cout<<" "<<a[i];
    }
    cout<<endl;
    }
    }
    return 0;
    }

  • 相关阅读:
    Protobuf
    CPU profiling
    转 Unicode 和 UTF-8 的区别
    Redis数据结构底层知识总结
    MySQL 加锁处理分析 ---非常牛逼
    MySQL Gap Lock问题
    利用Linux文件系统内存cache来提高性能
    Xcode7安装CocoaPods
    字符串排列组合算法
    iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
  • 原文地址:https://www.cnblogs.com/lchzls/p/5847577.html
Copyright © 2011-2022 走看看