D. Phoenix and Socks

Posted Lnn.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D. Phoenix and Socks相关的知识,希望对你有一定的参考价值。

前言:这题真滴水。


D. Phoenix and Socks
  题目类型:贪心
  解析
  贪心思想,首先,能不花钱就不花钱,看看能不能左右匹配。
  设对于左右不同颜色的直接匹配为硬匹配,花费2元。不花钱的处理完了之后,若存在L != R的情况,此时不能直接硬匹配。如果L多,就在1~L中找找,能不能改方向,不改颜色匹配。因为此时硬匹配不但要改颜色而且要改方向,不如先在L中看看能不能同方向匹配,能的话绝对是赚的,每匹配一对,最终少改一次颜色
  最后硬匹配即可。

  code

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
 
int n,t,l,r,a[202020],col[202020],cor[202020];
 
int main()
{
    ios::sync_with_stdio(false);
    cin >> t ;
    while(t--){
        int finish = 0 , ans = 0;
        cin >> n >> l >> r ;
        for(int i = 1 ; i <= n ; ++i){
            cin >> a[i] ;
            if(i <= l)col[a[i]]++;
            else cor[a[i]]++;
        }
        int nl = l , nr = r;
        ///处理左右匹配
        for(int i = 1 ; i <= l ; ++i){
            if(col[a[i]] && cor[a[i]]){
                col[a[i]]--;
                cor[a[i]]--;
                nl--;
                nr--;
            }
        }
        if(nl >= nr){
            ///处理左匹配
            for(int i = 1 ; i <= l ; ++i){
                if(col[a[i]] >= 2 && nl > nr){
                    col[a[i]] -= 2;
                    nl-=2;
                    ans++;
                }
            }
            ans += (nl-nr)/2 + (nl+nr)/2;
        }
        else {
            ///处理右匹配
            for(int i = l+1 ; i <= n ; ++i){
                if(cor[a[i]] >= 2 && nr > nl){
                    cor[a[i]] -= 2;
                    nr-=2;
                    ans++;
                }
            }
            ans += (nr-nl)/2 + (nr+nl)/2;
        }
        cout << ans << endl ;
        for(int i = 1 ; i <= n ; ++i)
            col[i] = cor[i] = 0;
    }
    return 0;
}

以上是关于D. Phoenix and Socks的主要内容,如果未能解决你的问题,请参考以下文章

D. Phoenix and Science(贪心&排序)

Codeforces Global Round 14-A. Phoenix and Gold-暴力

CodeForces - 1515B Phoenix and Puzzle

CodeForces - 1515A Phoenix and Gold

Codeforces Global Round 14-C. Phoenix and Towers-堆模拟

X - Vasya and Socks