Codeforces Round #363 (Div. 2)

A

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#define LL long long
#define CLEAR(xxx) memset(xxx,0,sizeof(xxx))
using namespace std;
const int maxn=200000+5,inf=1e9;
char s[maxn];
int n,ans=inf; 
inline void _read(int &x){
	char ch=getchar(); bool mark=false;
	for(;!isdigit(ch);ch=getchar())if(ch=='-')mark=true;
	for(x=0;isdigit(ch);ch=getchar())x=x*10+ch-'0';
	if(mark)x=-x;
}
int main(){
	int i,x,y;
	_read(n);
	scanf("%s",s+1);
	_read(x);
	for(i=2;i<=n;i++){
		_read(y);
		if(s[i-1]=='R'&&s[i]=='L')
			ans=min(ans,(y-x)>>1);
		x=y;
	}
	printf("%d\n", ans>=inf ?-1:ans);
	return 0;
}
/*
*/

B

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#define LL long long
#define CLEAR(xxx) memset(xxx,0,sizeof(xxx))
using namespace std;
const int maxn=1000+5,inf=1e9;
char s[maxn][maxn];
int n,m;
bool ok1,ok2;
void check(int &x){if(!x) x++;}
int main(){
	//freopen("data.in","r",stdin);
	//freopen("myans.out","w",stdout);
	int i,j,x1,x2,y1,y2,t;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++) scanf("%s",&s[i][1]);
	x1=y1=x2=y2=0; ok1=ok2=true;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++)
			if(s[i][j]=='*'){x1=i;y2=j; break;}
			if(x1)break;
	}
	if(i>n&&j>m){
		printf("YES\n1 1");
		return 0;
	}
	for(i=x1+1;i<=n&&ok1;i++)
		for(j=1;j<=m;j++)
			if(s[i][j]=='*'&&!y1)y1=j;
			else if(s[i][j]=='*'&&y1!=j){ok1=false; break;}
			
	for(i=1;i<=m&&ok2;i++){
		if(i==y2) continue;
		for(j=1;j<=n;j++)
			if(s[j][i]=='*'&&!x2)x2=j;
			else if(s[j][i]=='*'&&x2!=j){ok2=false; break;}
		}
	check(x1);check(x2);
	check(y1);check(y2);
	if(ok1) printf("YES\n%d %d",x1,y1);
	else if(ok2)printf("YES\n%d %d",x2,y2);
	else puts("NO");
	return 0;
}
/*
*/

C

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#define LL long long
#define CLEAR(xxx) memset(xxx,0,sizeof(xxx))
using namespace std;
const int maxn=100+5,inf=1e9;
int n,s[maxn],f[maxn][5];
int main(){
	//freopen("data.in","r",stdin);
	//freopen("myans.out","w",stdout);
	int i,j;
	cin>>n;
	for(i=1;i<=n;i++)cin>>s[i];
	for(i=0;i<=n;i++)
		for(j=0;j<=2;j++)f[i][j]=inf;
	f[0][0]=0;
	for(i=1;i<=n;i++){
		f[i][0]=1+min(f[i-1][0],min(f[i-1][1],f[i-1][2]) );
		if(s[i]>=2)f[i][1]=min(f[i-1][0],f[i-1][2]);
		if(s[i]&1) f[i][2]=min(f[i-1][0],f[i-1][1]);
	}
	cout<<min(f[n][0],min(f[n][1],f[n][2]))<<endl;
	//for(i=1;i<=n;i++)
	//cout<<f[i][0]<<" "<<f[i][1]<<" "<<f[i][2]<<endl;
	return 0;
}
/*
*/


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值