zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 100 (Rated for Div. 2) 1463D. Pairs

    题意:你有1~2n这2n个数,给你一个长度为n的数组b,让你去构造出b并且满足条件。构造要求:对于每一组合法的b,先定义计数x=0,每次从2n个数中选一对数,取其中的一个数去对应某一个bi,若这个数为这两个数中小的,则x++;最后让你求构造完每一个合法的b数组后选取的x的覆盖范围的大小

    大概就是这个意思,原题面: https://codeforces.com/problemset/problem/1463/D

    做法:考虑去计算这个覆盖范围的最大x与最小x之差加1作为答案。先贪心去求有多少个bi必须和一个大于它的数组合,计它为l,则n-l为x的最大值;
    再去倒着贪心求有多少个数必须结合一个小于它的数,计它为r,r为x的最小值,则最终答案为n-l-r+1。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll unsigned long long
    #define fastio ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
    const int maxn = 1e5 + 10;
    
    int main()
    {
    	fastio;
    	int t;
    	cin >> t;
    	while (t--)
    	{
    		int n;
    		cin >> n;
    		vector<int>a(n + 2, 0);
    		a[n + 1] = n * 2 + 1;
    		for (int i = 1; i <= n; i++)cin >> a[i];
    		sort(a.begin() + 1, a.end());
    		int sum = 0;
    		int l = 0, r = 0;
    		for (int i = 1; i <= n; i++)
    		{
    			sum += a[i] - a[i - 1]-1;
    			if (sum)
    				sum--;
    			else l++;
    		}
    		sum = 0;
    		for (int i = n; i >= 1; i--)
    		{
    			sum += a[i + 1] - a[i]-1;
    			if (sum)
    				sum--;
    			else r++;
    		}
    		cout << (n-l) - r + 1 << endl;
    	}
    	return 0;
    
    }
    
    
    
  • 相关阅读:
    吴军博士《浪潮之巅》
    第十二周
    第十一周
    第十周
    第九周
    第四次作业
    第四周
    学习进度表
    世界是数字的
    第二阶段团队第八天成果。
  • 原文地址:https://www.cnblogs.com/ruanbaiQAQ/p/14197237.html
Copyright © 2011-2022 走看看