CodeForces 919C(DFS)

题目链接:点击打开链接


题目大意:输入n,m,k表示n*m的教室,.是空位,让你找连着的k个位置的情况。

 

题目思路:打这场CF的时候这题本来很早就过了..结果刚过完这题就被一个美国人hack...然后debug一个小时都没找出错误...去上了个厕所想起来是不是可能没朋友..(题意是说帮自己和朋友占座以为至少需要2个位置啊啊啊)回来一看k的范围果然可以等于1...很难受..不过那次没掉分,还加了几分美滋滋...

回到正题..这题咋写呢..其实比普通的dfs还简单点,都不用递归..直接横着找满足的个数,竖着找满足的个数,只不过k1的时候需要特判,把结果除以二就行了..

 

以下是代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char map[2005][2005];
int main(){
	int n,m,k,num,temp,y;
	while(~scanf("%d%d%d",&n,&m,&k)){
		memset(map,'0',sizeof(map));
		num=0;
		for(int i=1;i<=n;i++){
			scanf("%s",map[i]+1);
		}
		for(int i=1;i<=n;i++){
			temp=0;
			for(int j=1;j<=m;j++){
				if(map[i][j]=='.'){
					if(j>m-k+1){
						continue;
					}
					else{
						y=j;
						while(map[i][y]=='.'&&y<=m){
							temp++;
							y++;
						}
						if(temp>=k){
							num+=temp-k+1;
						}
						temp=0;
						j=y;
					}
					
				}
			}
		}
		for(int j=1;j<=m;j++){
			temp=0;
			for(int i=1;i<=n;i++){
				if(map[i][j]=='.'){
					if(i>n-k+1){
						continue;
					}
					else{
						y=i;
						while(map[y][j]=='.'&&y<=n){
							temp++;
							y++;
						}
						if(temp>=k){
							num+=temp-k+1;
						}
						temp=0;
						i=y;
					}
					
				}
			}
		}
		if(k==1){
			printf("%d\n",num/2);
		}
		else{
			printf("%d\n",num);
		}
	}
	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值