CodeForces 1417BTwo Arrays

    科技2022-07-12  127

    题目连接 题意: 给你一个组数和一个不幸数字T,要求把数组分成两部分,标记为1or0,同为1或者0的两个数相加尽可能的不等于T,求任意一种分法。 解题思路: T/2+T/2=T,既然这样,把所有小于T/2的数字放在一边,大于T/2的数放在另一边,这样无论怎么加都不会加到T。刚好等于T/2的数据就一个为0一个为1这样交替分开放。

    #include<bits/stdc++.h> #define maxn 1000001 using namespace std; long long int a[maxn];//int会TE int main() { int num; cin>>num; while(num--) { long long int n,T; cin>>n>>T; for(int i=1;i<=n;i++) { cin>>a[i]; } int x=1; for(int i=1;i<=n;i++) { if(T%2!=0) { int t=T/2; if(a[i]>t) { a[i]=1; } else { a[i]=0; } } else { int t=T/2; if(a[i]>t) { a[i]=1; } else if(a[i]<t) { a[i]=0; } else { a[i]=x; x=1-x; } } } for(int i=1;i<=n;i++) { cout<<a[i]<<" "; } cout<<endl; } return 0; }
    Processed: 0.071, SQL: 8