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

    Description

    思路

    首先根据奇偶性,0和2所在位置的奇偶性相同,1和3所在位置奇偶性相同。故0和2的个数与1和3的个数相同或相差1。如果不满足就NO。
    由于3的左右两边必须是2;1的左右两边可以是0或2。所以先放3,计算所需的最少2的个数,如果2个数不够,就NO,否则把2放满3的左右两边后,剩下就按照奇偶性随便放就好了。

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 5e5 + 10;
    
    int arr[N];
    
    int main() {
        ios::sync_with_stdio(false);
        int a, b ,c, d;
        cin >> a >> b >> c >> d;
        int tot = a + b + c + d;
        if(tot % 2 == 0) {
            if(a + c != b + d || c < d) {cout << "NO" << endl; return 0;}
            cout << "YES" << endl;
            for(int i = 1; i <= tot; i++) {
                if(i % 2) {
                    if(a != 0) {cout << "0 "; a--;}
                    else {cout << "2 ";}
                } else {
                    if(b != 0) {cout << "1 "; b--;}
                    else {cout << "3 "; }
                }
            }
        } else {
            if(abs(a + c - b - d) != 1) {cout << "NO" << endl; return 0;}
            if(a + c > b + d && c < d + 1 && d != 0/*d!=0很重要,否则1 0 0 0过不了*/) {cout << "NO" << endl; return 0;}
            if(a + c < b + d) 
                if((b == 0 && c < d - 1) || (b != 0 && c < d)) {cout << "NO" << endl; return 0;}
            cout << "YES" << endl;
            int p = a + c > b + d ? 0 : 1;
            for(int i = 1; i <= tot; i++) {
                if(i % 2 == p) {
                    if(b != 0) {cout << "1 "; b--;}
                    else {cout << "3 "; }
                } else {
                    if(a != 0) {cout << "0 "; a--;}
                    else {cout << "2 ";}
                }
            }
        }
    }
    

    ------------恢复内容结束------------

  • 相关阅读:
    2021年下半年北京市中小学教师资格考试笔试报名公告
    高效演讲
    php的Allowed memory size of 134217728 bytes exhausted问题解决办法
    1111error
    http 500 错误
    xshell连接centons
    Vue 计算属性
    Vue 自定义指令
    Vue 事件绑定
    Vue v-cloak指令解决插值表达式“闪动”问题
  • 原文地址:https://www.cnblogs.com/limil/p/12622950.html
Copyright © 2011-2022 走看看