码迷,mamicode.com
首页 > 其他好文 > 详细

F - Three Variables Game(暴力+贪心+思维)

时间:2020-05-04 21:33:13      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:bsp   否则   col   问题   概率   using   str   var   题目   

被这个题目卡了好久,思路大致是对的,但是一直wa,好像是当a+b+c<=2的时候需要特判,然后其他情况就贪心就好了。另外一个思路和这个差不多,也是贪心,比如说遇到了AB,如果次数的a>b,那就选择B,如果a<b那就选择A,如果A=B,这就要考虑一个概率问题了,如果s[i+1]中存在A我们就选择A,否则就选择B,为什么这样是对的呢?因为我们最终的目的是尽量不要让a,b,c成为负数,如果说s[i+1]中存在A,那么在执行i+1这步操作的时候,a减小的概率>b减小的概率,所以说我们可以让a+1,这样a变为负数的概率就小了很多。

code:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
char s[N][5];
int main(){
    int n,a,b,c;
    cin>>n>>a>>b>>c;
    for(int i=1;i<=n;i++)    scanf("%s",s[i]+1); 
    string ans="";
    
    for(int i=1;i<=n;i++){
        if(s[i][1]==A&&s[i][2]==B){
            if(a>b){
                a--;b++;
                ans+=B;
            }
            else if(a<b){
                a++;b--;
                ans+=A; 
            }
            else {
                if(s[i+1][1]==A){
                    a++;b--;
                    ans+=A;
                }
                else{
                    a--;b++;
                    ans+=B;
                }
            }
        }
        else if(s[i][1]==A&&s[i][2]==C){
            if(a>c){
                a--;c++;
                ans+=C;
            }
            else if(a<c){
                a++;c--;
                ans+=A; 
            }
            else {
                if(s[i+1][1]==A){
                    a++;c--;
                    ans+=A;
                }
                else{
                    a--;c++;
                    ans+=C;
                }
            }
        }
        else {
            if(b>c){
                b--;c++;
                ans+=C;
            }
            else if(b<c){
                b++;c--;
                ans+=B; 
            }
            else {
                if(s[i+1][2]==C){
                    b--;c++;
                    ans+=C;
                }
                else{
                    b++;c--;
                    ans+=B;
                }
            }
        } 
        if(a<0||b<0||c<0) return cout<<"No"<<endl,0;
    }
    puts("Yes");
    int t=ans.size();
    for(int i=0;i<t;i++){
        cout<<ans[i]<<endl;
    }
    return 0;
}

 

F - Three Variables Game(暴力+贪心+思维)

标签:bsp   否则   col   问题   概率   using   str   var   题目   

原文地址:https://www.cnblogs.com/Accepting/p/12828032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!