zoukankan      html  css  js  c++  java
  • CS46 C 枚举二分

    给你n*2个数其中n个数是原数减去了X值的数。问你满足条件的X值和原来的n个数。注意X为正整数。

    X should be positive,没0的

    思路很简单,一个数必定会对应一个数,那么枚举一个数和其他所有数的差值作为X,然后对每个数找到没有标记过的对应相差X的数,这个过程可以二分(不二分也一样过),标记。如果要找的数已经有标记了,由于拥有相同数存在的情况,那么往后遍历到继续找。

    /** @Date    : 2017-09-05 19:26:41
      * @FileName: C.cpp
      * @Platform: Windows
      * @Author  : Lweleth (SoungEarlf@gmail.com)
      * @Link    : https://github.com/
      * @Version : $Id$
      */
    #include <bits/stdc++.h>
    #define LL long long
    #define PII pair<int ,int>
    #define MP(x, y) make_pair((x),(y))
    #define fi first
    #define se second
    #define PB(x) push_back((x))
    #define MMG(x) memset((x), -1,sizeof(x))
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;
    
    const int INF = 0x3f3f3f3f;
    const int N = 1e5+20;
    const double eps = 1e-8;
    
    int n;
    int a[2010];
    int vis[2010];
    int main()
    {
    	while(cin >> n)
    	{
    		for(int i = 1; i <= n*2; i++)
    			scanf("%d", a + i);
    		sort(a + 1, a + n*2 + 1);
    		MMF(vis);
    		int ans = -1;
    		vector<int>q;
    		for(int l = 1; l <= n; l++)
    		{
    			int cnt = a[l + 1] - a[1];
    			if(cnt == 0)//尼玛不能0的
    				continue;
    			int flag = 0;
    			MMF(vis);
    			for(int i = 1; i <= n*2 - 1; i++)
    			{
    				if(vis[i])
    					continue;
    				int k = lower_bound(a + 1, a + n*2 + 1, a[i] + cnt) - a;
    				if(a[k] - a[i] != cnt)
    				{
    					flag = 1;
    					break;
    				}
    				while(k <= n*2 && vis[k] && a[k+1] == a[k])
    					k++;
    				if(k > n*2 || vis[k] || a[k] - cnt != a[i])
    				{
    					flag = 1;
    					break;
    				}
    				vis[k] = vis[i] = 1;
    				q.PB(a[k]);	
    			}
    			if(flag == 0)
    			{
    				ans = abs(cnt);
    				break;
    			}
    			else 
    				q.clear();
    		}
    
    			cout << ans << endl;
    			if(ans != -1)
    			for(int i = 0; i < q.size(); i++)
    				printf("%d%s", q[i], i==q.size() - 1?"
    ":" ");
    	}
        return 0;
    }
    
  • 相关阅读:
    shl and shr
    清空和填充內存
    php 中instanceof的使用
    HTTP错误代码大全
    临时关闭Mysql ONLY_FULL_GROUP_BY
    php 中instanceof的使用
    Laravel Eloquent ORM 时如何查询表中指定的字段
    vagrant在windows下的使用
    下载配置python tornado web window7 开发笔记1:环境搭建
    运行确认怎么用vnc访问自己电脑,并且同时又是同一个会话?
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/7487879.html
Copyright © 2011-2022 走看看