zoukankan      html  css  js  c++  java
  • CF1417B Two Arrays

    Solution

    因为要求 (f) 最小,我们发现只要将 (a_i)(T-a_i) 染成不同的颜色就行了。

    但是当 (T) 为偶数的时候, (frac T2) 是要一个染白,一个染黑这样轮流的。

    举个例子:设 (k)(frac T2) 的个数,那么如果将 (k) 个全染一个颜色,则 (f) 起码是 (frac{(k-1)k}{2}) ,然后平均分成两种颜色,则是 ((frac k2-1)frac k2) ,是小于前值的。

    注意:因为 (1leq a_ileq 10^9) ,所以可以拿 (map) 来做映射。

    ​ (要么开全局记得清零,要么开局部变量,不要像我一样没有清零然后考场爆零)

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    const int N=1e5+10;
    int n,t,col[N],a[N],pre;
    map<int,int> mp;
    
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            pre=0;
            mp.clear();
            scanf("%d%d",&n,&t);
            if(t%2){
                for(int i=1;i<=n;i++){
                    scanf("%d",&a[i]);
                    if(mp[a[i]]) col[i]=1;
                    else{
                        col[i]=0;
                        if(a[i]<=t) mp[t-a[i]]=1;//可以不判的,比赛的时候忘了qwq
                    }
                }
                for(int i=1;i<=n;i++)
                    printf("%d ",col[i]);
                puts("");
            }
            else{
                for(int i=1;i<=n;i++){
                    scanf("%d",&a[i]);
                    if(a[i]==t/2){
                        if(pre) col[i]=1^col[pre];
                        pre=i;
                        continue;
                    }
                    if(mp[a[i]]) col[i]=1;
                    else{
                        col[i]=0;
                        if(a[i]<=t) mp[t-a[i]]=1;
                    }
                }
                for(int i=1;i<=n;i++)
                    printf("%d ",col[i]);
                puts("");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    惊讶
    BLOG休假
    因考试得福
    Shape of My HeartSting !
    一个月的第一天了
    BLOG开张喽~~~
    该走了
    脏话
    EditText的属性
    游戏引擎
  • 原文地址:https://www.cnblogs.com/jasony/p/13743089.html
Copyright © 2011-2022 走看看