• bzoj 1034 [ZJOI2008]泡泡堂BNB(贪心)


    【题目链接】

      http://www.lydsy.com/JudgeOnline/problem.php?id=1034

    【题意】

     

      给两个序列以任意顺序比较,求出最大和最小得分。

    【思路】

      

      排序后使用贪心。

      最小的能赢就赢,最大的能赢就赢,否则用最小的比最大的。

    【代码】

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int N = 3e5+10;
     8 
     9 int a[N],b[N],n;
    10 
    11 void read(int& x)
    12 {
    13     char c=getchar(); int f=1;x=0;
    14     while(!isdigit(c)) { if(c=='-')f=-1; c=getchar(); }
    15     while(isdigit(c)) x=x*10+c-'0',c=getchar();
    16     x*=f;
    17 }
    18 int solve(int* a,int* b)
    19 {
    20     int l1=1,r1=n,l2=1,r2=n;
    21     int res=0;
    22     while(l1<=r1&&l2<=r2)
    23     {
    24         if(a[l1]>b[l2]) { res+=2; l1++; l2++; }
    25         else if(a[r1]>b[r2]) { res+=2; r1--,r2--; }
    26         else {
    27             res+=a[l1]==b[r2];
    28             l1++,r2--;
    29         }
    30     }
    31     return res;
    32 }
    33 
    34 int main()
    35 {
    36     read(n);
    37     for(int i=1;i<=n;i++) read(a[i]);
    38     for(int i=1;i<=n;i++) read(b[i]);
    39     sort(a+1,a+n+1);
    40     sort(b+1,b+n+1);
    41     printf("%d %d",solve(a,b),2*n-solve(b,a));
    42     return 0;
    43 }
  • 相关阅读:
    [原]减小VC6编译生成的exe文件的大小
    [原]可用代码
    [原]BlogTemplate
    [原]Excel VBA数据校验
    Favorite
    [原]隐藏cnblogs侧边栏
    [原]Skills
    UI现在就升级到Windows7
    redis 笔记
    1 Two Sum(LeetCode HOT 100)
  • 原文地址:https://www.cnblogs.com/lidaxin/p/5264216.html
Copyright © 2020-2023  润新知