zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 79 A. New Year Garland

    https://codeforces.com/contest/1279/problem/A

    思路:不妨设R>=G>=B,因为R的数量最多,故以R为界,相邻的两个R之间只可能是一个G或一个B或一个G和一个B

               按以下策略构造,先放全部的R,再在相邻的两个R之间放一个B 因为R有R+1个空隙,所以一定能放完所有的B,可能还有相邻的两个R之间或第一个R前面或最后一个R后面为空

                                         接下来先把G补满相邻的两个R之间为空的位置,显然若不能补满相邻的两个R之间为空的位置,则无法构造出符合题意的序列

                                         若还有G剩余,则先放在第一个R前面和最后一个R后面,再在每个B左侧或右侧放一个G(其实每个B两侧各放一个G,也符合题意,但由一般性假设R>=G>=B,单独考虑G(B)时,在相邻的两个R

                                         之间放一个G(B),必定能将G(B)放完)

    综上,只要G+B>=R-1即可 当G+B=R-1、R、R+1时,在相邻的两个R之间或第一个R前面或最后一个R后面放一个G或B即可

            当G+B>R+1时,B放完后还剩R+1-B个位置可以单独放一个G,故G还剩G-(R+1-B)=G+B-R-1>0个,将其与B放在一起,而B有B个位置,B-(G+B-R-1)=R+1-G>=1,故能将剩下的G放完,即在每个B左侧或右侧放一个G后,还有相邻的两个R之间只有一个B

    官方:

    #
     #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
     
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        int T;
        cin>>T;
        while(T--){
            int m1=0,m2=0,m3=0,a,b,c;
            cin>>a>>b>>c;
            ll sum=a+b+c;
            if(a>b){
                if(a>c){m1=a;if(b>c)m2=b,m3=c;else m2=c,m3=b;
                }
                else{m1=c;if(b>a)m2=b,m3=a;else m2=a,m3=b;
                }
            }
            else{
                if(b>c){m1=b;if(a>c)m2=a,m3=c;else m2=c,m3=a;
                }
                else{m1=c;if(b>a)m2=b,m3=a;else m2=a,m3=b;
                }
            }
            if(m2+m3>=m1-1)
            cout<<"Yes"<<endl;//if(sum-m1>=m1-1&&m2-m1<m3)
            else cout<<"No"<<endl;
        }
        
        
        return 0;
    }

  • 相关阅读:
    IOS设计模式之四(备忘录模式,命令模式)
    IOS设计模式之三(适配器模式,观察者模式)
    IOS设计模式之二(门面模式,装饰器模式)
    IOS设计模式之一(MVC模式,单例模式)
    C#调用C++导出(dllexport)方法
    C# 多任务之 Task
    C# Remoting的一个简单例子
    C#中指针使用总结
    C# fixed详解
    C#中virtual和abstract的区别
  • 原文地址:https://www.cnblogs.com/wyh447154317/p/12165901.html
Copyright © 2011-2022 走看看