Codeforces Round #238 (Div. 2)B:Domino Effect

地址:http://codeforces.com/contest/405/problem/B

题意:就是模拟多米诺骨牌的变形,看图即可明白题意,难点是处理中间.L.…….R. 和.R.…….L.的情况,我的思路是先统计L R个数和位置(针对只有一个L 、一个 R或者一个都没有的特判) 然后针对每个字符,记录L、R的位置 分.L.…….R. 和 .R.…….L.两种进行讨论、计算即可,具体实现看代码

代码如下:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;


char s[3020];

int i,n,l=0,r=0,cl,cr,ll,lr,ans=0;


int main()
{
    cin >>n;
	for(i=1;i<=n;i++)
    {
    	cin >>s[i];
    	if(s[i]=='L')ll=i,cl++;
    	if(s[i]=='R')lr=i,cr++;
    }
	bool f=true;
	if(cr==1&&cl==0)
	{
		cout <<lr-1<<endl;f=false;
	}
	if(cr==0&&cl==0)
	{
		cout <<n<<endl;f=false;
	}
	if(cl==1&&cr==0)    
	{
		cout <<n-ll<<endl;f=false;
	}
	
	if(f)
	{
		int i=0;
		while(i<n)
		{
			i++;
			if(s[i]!='.')
			{
				if(s[i]=='L')l=i;
				if(s[i]=='R')r=i;
				if(l!=0&&r!=0)
				{
					if(l>r)ans+=(l-r-1)%2;
					if(r>l)ans+=r-l-1;
				}
			}
		}
		for(i=1;i<=n;i++)
	    {
	    	if(s[i]=='L')break;
	    	if(s[i]=='R')
	    	{
	    		ans+=i-1;break;
	    	}
	    }
	    for(i=n;i>0;i--)
	    {
	    	if(s[i]=='R')break;
	    	if(s[i]=='L')
	    	{
	    		ans+=n-i;break;
	    	}
	    }
		cout <<ans<<endl;
	}
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值