2017 Qinhuangdao Site CCPC L&&C

很难过的一场比赛,自己不能再浪费时间了,前一段太浪了。很差劲的自己啊... 唔.. 所以今天代码能出的全部自己写一遍... 真的难受一批..别浪了... 还有 以后读题好好读别自己有一点点想法然后就胡思乱想,形成有体系的思路再传递给队友啊..真的差劲...加油吧..

以后不写copy题目了直接传送门

L - One-Dimensional Maze ZOJ - 3992

比赛传送门:https://cn.vjudge.net/contest/227061#problem/L

题意:

给出字符串和一个位置,若'R' 就走向S[t+1] 若‘L’ 就走向S[t-1] 可以改变其中的字母,目的是可以走向S[0]或s[n-1]问改变最少的字母是多少

分析:

一开始在想怎么所在位置的字母怎么处理,结果突然意识到根本不需要特殊处理,遍历时候包含到即可。

#include <iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int m;
        cin>>m;
        string s;
        cin>>s;
        int cnt1=0;
        int cnt2=0;
        for(int i=1;i<=m-1;i++)
            if(s[i]=='R')
                cnt1++;
        for(int i=m-1;i<n-1;i++)
            if(s[i]=='L')
                cnt2++;
        cout<<min(cnt1,cnt2)<<endl;
    }
    return 0;
}

C - Crusaders Quest ZOJ - 3983

比赛传送门:https://cn.vjudge.net/contest/227061#problem/C

题意

三个相同的可以消去并得分,后面的往前移动

分析

模拟写了半天 然后应该是没考虑全啊呸,然后WA了,然后突然想到了栈模拟,用双端队列实现...因为很智障的问题debug一个小时。贴上我辛苦辛苦debug的代码...
为什么想到栈呢,因为我们只需要考虑类似于有间隔连续问题(就好像紫书那道火车的题啊)
if 相同三个元素就pop 若栈为空 cout<<3<<endl ;
else if 不push栈某个其中一个字母,如果栈为空cout<<2 <<endl
else cout<<1<<endl

#include<queue>
#include<iostream>
using namespace std;
string gao="gao";
deque<char>dq;
void judge()
{
    if(dq.size()>=3)
    {
        if(dq[0]==dq[1]&&dq[1]==dq[2])
        {
            dq.pop_front(); dq.pop_front(); dq.pop_front();
        }
        
    }
}
int main ()
{
    int t;
    cin>>t;
    while(t--)
    {
        string s;
        cin>>s;
        dq.clear();
        for(int i=0;i<9;i++)
        {
            judge();
            dq.push_front(s[i]);
            judge();
        }
        //cout<<dq.size()<<'!'<<endl;
        if(dq.empty())
        {
            cout<<3<<endl;
            continue;
        }
        int flag=0;
        for(int i=0;i<3;i++)
        {
            dq.clear();
            char tmp=gao[i];
            for(int j=0;j<9;j++)
            {
                if(s[j]==tmp) continue;
                judge();
                dq.push_front(s[j]);
                judge();
                if(dq.empty())
                    flag=1;
            }
        }
        if(flag)
            cout<<2<<endl;
        else
            cout<<1<<endl;

    }
    return 0;
}

明天继续填坑啊呜呜呜呜

posted @ 2018-05-05 02:33  muvseea  阅读(231)  评论(0编辑  收藏  举报