zoukankan      html  css  js  c++  java
  • Codeforces 767D

    题目链接:http://codeforces.com/contest/767/problem/D


    D比C水系列。

    将商店里面的牛奶按照保质期升序排序(显然优先买保质期久的)考虑二分答案,然后再将整个序列归并排序,贪心的检测答案是否正确即可。


     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<vector>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<cstring>
     8 using namespace std;
     9 #define maxn 2001000
    10 #define llg int
    11 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
    12 llg n,m,a[maxn],b[maxn],c[maxn],ans,tail,k;
    13 
    14 inline llg getint()
    15 {
    16     llg res=0,fh=1;char ch=getchar();
    17     while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    18     if(ch=='-')fh=-1,ch=getchar();
    19     while(ch<='9'&&ch>='0')res=res*10+ch-'0',ch=getchar();
    20     return res*fh;
    21 }
    22 
    23 struct node
    24 {
    25     llg val,wz;
    26 }e[maxn];
    27 
    28 bool cmp(llg a,llg b){return a>b;}
    29 
    30 bool cmpp(const node&a,const node&b){return a.val>b.val;}
    31 
    32 inline bool check(llg r2)
    33 {
    34     llg r1=n;
    35     llg w1=1,w2=1; tail=0;
    36     while (w1<=r1 || w2<=r2)
    37     {
    38         if (w1>r1) c[++tail]=b[w2],w2++;
    39         else if (w2>r2) c[++tail]=a[w1],w1++;
    40         else if (a[w1]>b[w2])
    41             {
    42                  c[++tail]=a[w1],w1++;
    43             }
    44             else
    45             {
    46                  c[++tail]=b[w2],w2++;
    47             }
    48     }
    49     llg x=tail+1,t=0;
    50     while (1)
    51     {
    52         for (llg i=1;i<=k;i++)
    53         {
    54             x--;
    55             if (x<=0) return 1;
    56             if (c[x]<t) return 0;
    57         }
    58         t++; 
    59     }
    60     return 1;
    61 }
    62 
    63 int main()
    64 {
    65     yyj("D");
    66     cin>>n>>m>>k;
    67     for (llg i=1;i<=n;i++) scanf("%d",&a[i]);
    68     sort(a+1,a+n+1,cmp);
    69     for (llg i=1;i<=m;i++) 
    70     {
    71         scanf("%d",&b[i]);
    72         e[i].val=b[i],e[i].wz=i;
    73     }
    74     sort(b+1,b+m+1,cmp);
    75     sort(e+1,e+m+1,cmpp);
    76     llg l=0,r=m,mid;
    77     ans=-1;
    78     while (l<=r)
    79     {
    80         mid=(l+r)>>1;
    81         if (check(mid)) {ans=mid,l=mid+1;}else r=mid-1;
    82     }
    83     cout<<ans<<endl;
    84     for (llg i=1;i<=ans;i++) printf("%d ",e[i].wz);
    85     return 0;
    86 }
    本文作者:xrdog 作者博客:http://www.cnblogs.com/Dragon-Light/ 转载请注明出处,侵权必究,保留最终解释权!
  • 相关阅读:
    第12组 Beta冲刺(2/5)
    第12组 Beta冲刺(1/5)
    第12组 Alpha事后诸葛亮
    第12组 Alpha冲刺(6/6)
    第12组 Alpha冲刺(5/6)
    期末大作业(第十七小组)
    补交:第2次&第5次实践作业
    第6次实践作业 (第17小组)
    第4次实践作业
    第3次实践作业
  • 原文地址:https://www.cnblogs.com/Dragon-Light/p/6414172.html
Copyright © 2011-2022 走看看