zoukankan      html  css  js  c++  java
  • (全国多校重现赛一) 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;
    }
  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/csushl/p/9386498.html
Copyright © 2011-2022 走看看