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;
}