• (全国多校重现赛一) H Numbers


    zk has n numbers a1,a2,...,ana1,a2,...,an. For each (i,j) satisfying 1≤i<j≤n, zk generates a new number (ai+aj)(ai+aj). These new numbers could make up a new sequence b1,b2,...,bn(n−1)/2b1,b2,...,bn(n−1)/2. 
    LsF wants to make some trouble. While zk is sleeping, Lsf mixed up sequence a and b with random order so that zk can't figure out which numbers were in a or b. "I'm angry!", says zk. 
    Can you help zk find out which n numbers were originally in a? 

    Input

    Multiple test cases(not exceed 10). 
    For each test case: 
    ∙∙The first line is an integer m(0≤m≤125250), indicating the total length of a and b. It's guaranteed m can be formed as n(n+1)/2. 
    ∙∙The second line contains m numbers, indicating the mixed sequence of a and b. 
    Each aiai is in [1,10^9] 

    Output

    For each test case, output two lines. 
    The first line is an integer n, indicating the length of sequence a; 
    The second line should contain n space-seprated integers a1,a2,...,an(a1≤a2≤...≤an)a1,a2,...,an(a1≤a2≤...≤an). These are numbers in sequence a. 
    It's guaranteed that there is only one solution for each case.

    Sample Input

    6
    2 2 2 4 4 4
    21
    1 2 3 3 4 4 5 5 5 6 6 6 7 7 7 8 8 9 9 10 11

    Sample Output

    3
    2 2 2
    6
    1 2 3 4 5 6

    这个看代码吧。QAQ

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    int n,m;
    vector <int> a,b,c,ans;
    map <int,int> mmp;
    int main()
    {
    	while(~scanf("%d",&n))
    	{
    		a.clear();
    		b.clear();
    		c.clear();
    		ans.clear();
    		mmp.clear();
    		int temp;
    		for(int i=0;i<n;i++)
    		{
    			scanf("%d",&temp);
    			a.push_back(temp);
    			if(mmp[temp]==0) mmp[temp]=1;
    			else mmp[temp]++; 
    			
    		}
    		sort(a.begin(),a.end());
    		ans.push_back(a[0]);
    		for(int i=1;i<n;i++)
    		{
    			if(mmp[a[i]]==0) continue;
    			for(int j=0;j<ans.size();j++)
    			{
    				mmp[ans[j]+a[i]]--;
    			}
    			ans.push_back(a[i]);
    			mmp[a[i]]--; 
    		}
    		
    		
    		printf("%d
    ",ans.size());
    		vector <int> ::iterator it;
    		for(it=ans.begin();it!=ans.end();it++)
    		{
    			if(it==ans.begin()) cout<<*it;
    			else cout<<" "<<*it;
    		}
    		cout<<endl; 
    	}
    	return 0;
    }
  • 相关阅读:
    Vim作者创造新编程语言Zimbu
    Google Maps API编程资源大全
    好网收集的地址
    三种模拟自动登录和提交POST信息的实现方法
    解析VMware三种网络连接方式
    PostgreSQL 创建帐号,数据库,权限
    LINUX目录详解
    Linux流媒体服务器安装配置
    用RAMDISK来提高PostgreSQL访问速度
    PostgreSQL 集群复制方案之使用pgq和londiste工具包
  • 原文地址:https://www.cnblogs.com/csushl/p/9386498.html
Copyright © 2020-2023  润新知