zoukankan      html  css  js  c++  java
  • CF/div2c/贪心

    题目链接【http://codeforces.com/contest/749/problem/C】

    题意:给出一个长度为n序列包含D和R,每一轮操作的先后顺序是1—n,规则是每一轮每个人有一次机会杀掉一个人,人死不能复生。问到最后剩下的人是D类人还是R类人。

    思路:贪心+模拟。如果某个人有机会杀人,要杀掉还有机会杀人的不同类人,如果没有就杀掉位子靠前的已经用过杀人机会的不同类人。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=200050;
    char s[maxn];
    int n;
    set<int>sr,sd;
    int main ()
    {
        while(~scanf("%d",&n))
        {
            sr.clear(); sd.clear();
            scanf("%s",s+1);
            for(int i = 1;i <= n;i++)
            {
                if(s[i] == 'R')
                    sr.insert(i);
                else
                    sd.insert(i);
            }
            while(sd.size()&&sr.size())
            {
                set<int>::iterator r = sr.begin();
                set<int>::iterator d = sd.begin();
                while(r != sr.end() && d != sd.end())
                {
                    if(*r > *d)
                    {
                        set< int > :: iterator  t= r;
                        r++;    d++;
                        sr.erase(*t);
                    }
                    else
                    {
                        set<int>::iterator t=d;
                        d++;    r++;
                        sd.erase(*t);
                    }
                }
                while(r!=sr.end())
                {
                    if(sd.size())
                    {
                        sd.erase(*sd.begin());
                        r++;
                    }
                    else    break;
                }
                while(d!=sd.end())
                {
                    if(sr.size())
                    {
                        sr.erase(*sr.begin());
                        d++;
                    }
                    else    break;
                }
            }
            if(sr.size())
                printf("R
    ");
            else
                printf("D
    ");
        }
        return 0;
    }
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int maxn = 200050;
    queue<int>qud,qur;
    char s[maxn];
    int n;
    int main ()
    {
        while(~scanf("%d",&n))
        {
            while(!qud.empty()) qud.pop();
            while(!qur.empty()) qur.pop();
            scanf("%s",s+1);
            for(int i=1;i<=n;i++)
            {
                if(s[i]=='R')
                    qur.push(i);
                else
                    qud.push(i);
            }
            while(!qur.empty()&&!qud.empty())
            {
                int r=qur.front();qur.pop();
                int d=qud.front();qud.pop();
                if(r>d)
                    qud.push(d+n);
                else
                    qur.push(r+n);
            }
            if(qur.empty())
                printf("D
    ");
            else
                printf("R
    ");
        }
        return 0;
    
    }
    想的太多,做的太少。
  • 相关阅读:
    爬虫中动态的POST参数
    Sublime3注册码和安装中文包
    [pytorch][进阶之路]pytorch学习笔记二-自动求导和module
    [pytorch][进阶之路]pytorch学习笔记一
    [python][进阶之路]理解python中的深复制和浅复制
    [python][matlab]在python36上安装matlab2015b引擎
    [python][进阶之路]list复制引发的问题
    [python][pandas]DataFrame的基本操作
    [Algorithm]ADMM简明理解
    [python][cpp]对浮点数进行n位翻转
  • 原文地址:https://www.cnblogs.com/pealicx/p/6207555.html
Copyright © 2011-2022 走看看