首页  >  文章  >  web前端  >  Codeforces Round #251 (Div. 2)-C,D_html/css_WEB-ITnose

Codeforces Round #251 (Div. 2)-C,D_html/css_WEB-ITnose

WBOY
WBOY原创
2016-06-24 12:02:431028浏览

C题:

思路很简单。

由题意可知,奇数的集合有k-p个,偶数的几何有p个。

那么我们先选择k-p-1个奇数,每一个奇数是一个集合。

然后我们再选择p个偶数,每一个偶数是一个集合,如果偶数的个数不足,那么就用两个奇数去补。

然后我们再把剩下的所有的数放在一个集合里。

By rowanhao, contest: Codeforces Round #251 (Div. 2), problem: (C) Devu and Partitioning of the Array, Accepted, # #include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<vector>#include<queue>using namespace std;#define LL __int64#define maxn 330000vector<int>vec;int a[maxn];int vis[maxn];int main(){    int n,k,p;    while(~scanf("%d%d%d",&n,&k,&p))    {        int sum=0;        int q=k-p;        int l,r;        l=r=0;        for(int i=1;i=p*2&&l%2==0)        {            l=p;            cout1)                {                    vis[i]=1;                    l--;                    printf("1 %d\n",a[i]);                }            }            vec.clear();            for(int i=1;i1&&vec.size()==2)                {                    printf("2 %d %d\n",vec[0],vec[1]);                    vec.clear();                    l--;                }            }            if(vec.size()==0)continue;            printf("%d",vec.size());            for(int i=0;i<vec.size puts else cout return>D题:  <p></p>  <p>思路也挺简单的。</p>  <p>由题意可知,我们需要把a数组的所有的数都变的大于等于x。b数组里的所有的数都小于等于x。</p>  <p>x是a数组和b数组中的某一个数。</p>  <p>那么我们枚举x,然后二分查找。</p>  <p></p>  <pre name="code" class="sycode">#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<vector>using namespace std;#define LL __int64#define maxn 220100double num[maxn];vector<ll>vec;LL a[maxn];LL b[maxn];LL sa[maxn];LL sb[maxn];LL n,m;LL dos(LL x){    LL sum=0;    LL l,r,mid;    l=1;r=n+1;mid=(l+r)/2;    while(l<r if>=x)r=mid;        else l=mid+1;        mid=(l+r)/2;    }    sum+=(mid-1)*x-sa[mid-1];    l=1;r=m+1;mid=(l+r)/2;    while(l<r if>=x)r=mid;        else l=mid+1;        mid=(l+r)/2;    }    sum+=sb[mid]-(m-mid+1)*x;    return sum;}int main(){    while(~scanf("%I64d%I64d",&n,&m))    {        for(LL i=1;i=1;i--)sb[i]=sb[i+1]+b[i];        LL  minn=-1;        for(LL i=0;i<vec.size ll x="vec[i];" if else minn="min(minn,dos(x));" cout return>  <br>  <br>  <p></p>  <p><br> </p> </vec.size></r></r></ll></vector></iostream></algorithm></string.h></stdio.h>
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn