Heim  >  Artikel  >  Web-Frontend  >  Codeforces Round #251 (Div. 2)-C,D_html/css_WEB-ITnose

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

WBOY
WBOYOriginal
2016-06-24 12:02:431028Durchsuche

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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn