C. Seat Arrangements

time limit per test1 second

memory limit per test256 megabytes

Problem Description

Suppose that you are in a campus and have to go for classes day by day. As you may see, when you hurry to a classroom, you surprisingly find that many seats there are already occupied. Today you and your friends went for class, and found out that some of the seats were occupied.

The classroom contains n rows of seats and there are m seats in each row. Then the classroom can be represented as an n × m matrix. The character ‘.’ represents an empty seat, while ‘*’ means that the seat is occupied. You need to find k consecutive empty seats in the same row or column and arrange those seats for you and your friends. Your task is to find the number of ways to arrange the seats. Two ways are considered different if sets of places that students occupy differs.

Input

The first line contains three positive integers n, m, k (1 ≤ n, m, k ≤ 2 000), where n, m represent the sizes of the classroom and k is the number of consecutive seats you need to find.

Each of the next n lines contains m characters ‘.’ or ‘‘. They form a matrix representing the classroom, ‘.’ denotes an empty seat, and ‘’ denotes an occupied seat.

Output

A single number, denoting the number of ways to find k empty seats in the same row or column.

Examples

input

2 3 2

**.



output

3

input

1 2 2

..

output

1

input

3 3 4

.*.

.

.*.

output

0

Note

In the first sample, there are three ways to arrange those seats. You can take the following seats for your arrangement.

(1, 3), (2, 3)

(2, 2), (2, 3)

(2, 1), (2, 2)


解题心得:

  1. 题意就是说,在同一行或者同一列中要找k个连续的空地,有多少种找法。
  2. 思路是先找每一行,将连续的空地加起来,如果大于等于k个,就用连续空地数-k+1,先将所有的行找出来,再将所有的列找出来。就这个思路,被hack了很多次,就是处理k==1的问题啊。第一次被hack,想将列中重复找的k==1给除去,然后又被hack,没除完,最后k==1直接特判一个一个 的数空地就过了。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2010;
char maps[maxn][maxn];
int n,m,k;
long long ans = 0; void init()
{
for(int i=0;i<n;i++)
scanf("%s",maps[i]);
} void check_row()//找每一行中的连续空地数目
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(maps[i][j] == '.')
{
int z = j+1;
int tot = 1;
while(maps[i][z] == '.')
{
tot++;
z++;
}
if(tot >= k)
ans += tot-k+1;
j = z-1;
}
} void check_col()//找每一列中的连续的空地数目
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(maps[j][i] == '.')
{
int z = j+1;
int tot = 1;
while(maps[z][i] == '.')
{
z++;
tot++;
}
if(tot == 1)
continue;
if(tot >= k)
ans += tot-k+1;
j = z-1;
}
} void special_judge(){//特判k==1的时候的方案数
int ans = 0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(maps[i][j] == '.')
ans++;
printf("%d\n",ans);
} int main()
{
scanf("%d%d%d",&n,&m,&k);
init();
if(k == 1){
special_judge();
return 0;
}
check_row();
check_col();
printf("%lld\n",ans);
return 0;
}

Codeforces Round #460 (Div. 2)-C. Seat Arrangements的更多相关文章

  1. Codeforces Round #460 (Div. 2)

    A. Supermarket We often go to supermarkets to buy some fruits or vegetables, and on the tag there pr ...

  2. 【Codeforces Round #460 (Div. 2) C】 Seat Arrangements

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用pre[i][j]表示第i行前j列的和. 然后枚举连续座位的最左上点. (有两种可能向右或向下k个. 则还需要处理出pre2[i] ...

  3. Codeforces Round #460 (Div. 2) ABCDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8397685.html 2018-02-01 $A$ 题意概括 你要买$m$斤水果,现在有$n$个超市让你选择. ...

  4. [Codeforces]Codeforces Round #460 (Div. 2)

    Supermarket 找最便宜的就行 Solution Perfect Number 暴力做 Solution Seat Arrangement 注意当k=1时,横着和竖着是同一种方案 Soluti ...

  5. Codeforces Round #460 (Div. 2) E. Congruence Equation (CRT+数论)

    题目链接: http://codeforces.com/problemset/problem/919/E 题意: 让你求满足 \(na^n\equiv b \pmod p\) 的 \(n\) 的个数. ...

  6. Codeforces Round #460 (Div. 2) 前三题

    Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...

  7. Codeforces Round #460 (Div. 2): D. Substring(DAG+DP+判环)

    D. Substring time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...

  8. Codeforces Round #460 (Div. 2).E 费马小定理+中国剩余定理

    E. Congruence Equation time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  9. Codeforces Round #460 (Div. 2)-D. Substring

    D. Substring time limit per test3 seconds memory limit per test256 megabytes Problem Description You ...

随机推荐

  1. Ionic 解决gradle下载慢的问题

    问题 使用Ioinc添加安卓平台或者编译的时候,提示gradle-XXX-all.zip下载,此进度缓慢. 解决 下载gradle对应的zip文件. 参考资源:http://services.grad ...

  2. ElasticSearch之QueryBuilders

    1.termsQuery A filer for a field based on several terms matching on any of them 翻译过来:基于以下几个方面对其中任何匹配 ...

  3. 安装flask-mysqldb的时候,提示 mysql_config not found 的解决方法

    解决办法: sudo apt-get install libmysqlclient-dev sudo updatedb locate mysql_config 然后进入mysql_config的路径( ...

  4. Spring相关理解

    日常拖完整患者............... 待续...

  5. Sublime常用插件安装大全

    作为前端人员,要找一个很顺手的编辑器真的不容易,我向大家推荐的一款实用前端开发神器,不但占地小,且插件很多,很强大. 下面我向大家介绍一下它的安装及插件的使用方法. 一.安装及安装emmet插件 首先 ...

  6. Js/Jquery获取input file的文件名

    html代码:     <input type="file" name="file" id="file" class="in ...

  7. Unicode字符集

    Unicode字符集的出现是为了弥补ASCII码只能表示128个字符的限制.在实际应用中,如若我们想显示汉字或日文等等,显然使用ASCII是不可能的.Unicode占用了两个字节,即16位,能表示的字 ...

  8. 安装windows phone 7

    本机环境win7 32位旗舰版,本来是4G内存的  系统只能读出2.9G,vs2010中文旗舰版,想搭建windows phone环境学习wp手机开发.安装完了之后明显感觉机器慢了些. ①:安装Mic ...

  9. JAVA设计模式初探之适配器模式(转)

    1. 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 2. 解决的问题 即Adapter模式使得原本由于接口不兼容而不 ...

  10. squid如何屏蔽User-Agent为空的请求

    搞定了,反过来就行了acl has_user_agent browser ^ http_access deny !has_user_agent