Codeforces Round #460 (Div. 2)-C. Seat Arrangements
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)
解题心得:
- 题意就是说,在同一行或者同一列中要找k个连续的空地,有多少种找法。
- 思路是先找每一行,将连续的空地加起来,如果大于等于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的更多相关文章
- Codeforces Round #460 (Div. 2)
A. Supermarket We often go to supermarkets to buy some fruits or vegetables, and on the tag there pr ...
- 【Codeforces Round #460 (Div. 2) C】 Seat Arrangements
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用pre[i][j]表示第i行前j列的和. 然后枚举连续座位的最左上点. (有两种可能向右或向下k个. 则还需要处理出pre2[i] ...
- Codeforces Round #460 (Div. 2) ABCDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8397685.html 2018-02-01 $A$ 题意概括 你要买$m$斤水果,现在有$n$个超市让你选择. ...
- [Codeforces]Codeforces Round #460 (Div. 2)
Supermarket 找最便宜的就行 Solution Perfect Number 暴力做 Solution Seat Arrangement 注意当k=1时,横着和竖着是同一种方案 Soluti ...
- Codeforces Round #460 (Div. 2) E. Congruence Equation (CRT+数论)
题目链接: http://codeforces.com/problemset/problem/919/E 题意: 让你求满足 \(na^n\equiv b \pmod p\) 的 \(n\) 的个数. ...
- Codeforces Round #460 (Div. 2) 前三题
Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...
- 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 ...
- Codeforces Round #460 (Div. 2).E 费马小定理+中国剩余定理
E. Congruence Equation time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- Codeforces Round #460 (Div. 2)-D. Substring
D. Substring time limit per test3 seconds memory limit per test256 megabytes Problem Description You ...
随机推荐
- CentOS6.5 环境安装配置
一.GO环境配置 1.运行命令进入/usr/local/src目录:cd /usr/local/src 2.下载安装包:运行wget --no-check-certificate https://st ...
- 018.Java类加载器
https://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 类加载器(class loader) 用来加载 Java 类到 Java 虚拟 ...
- servlet传值到servlet传值问题
今天在项目中遇到一个问题:中期项目自己做的新闻部分NewsPagerSortservlet传值时,正确答案如下 if(title!=""){ resp.sendRedirect(& ...
- mysql对库,表,数据类型的操作以及完整性约束
一丶对库的操作 求救语法: help create database; 1.创建数据库 CREATE DATABASE 数据库名 charset utf8; 2.数据库的命名规则: 可以由字母.数字. ...
- form自动提交
在做项目中,例如b2b的由商城跳往卖家中心的后台,当他既有会员账号又是卖家的时候,让他登录了商城,就不需要卖家登录的时候,处理过程中可以用到form表单自动登录. 实现简单思路:可以再普通会员登录的地 ...
- WPF中的拖放1
实现了WPF的不同层级间的元素之间的拖放,例子虽小却很经典,引申一下也许可以实现类VS界面的浮动依靠面板. 拖放前: 拖放后: 代码如下: <Window x:Class="WpfAp ...
- ArcMap中提取影像数据边界
1.前言 客户手里有一些经过裁剪的不规则多边形影像数据(如图例所示),希望能批量获取该类影像的边界信息,即影像对应的面信息,边界线信息.这里我们提供一种利用镶嵌数据集Footprint图层的方法来获取 ...
- javascript设计模式之中介者模式
/* * 小游戏演示中介者模式 * Home 按键 1 * Guest 按键 0 * 半分钟内看谁按下的次数多 * * 参与的对象: * 玩家 * 计分板 * 中介者 * * 中介者模式使对象之间松耦 ...
- rmtree函数
blog.csdn.net/my2010sam/article/details/8956353
- MySQL使用一张表的一列更新另一张表的一列
使用MySQL中,在一张表etl_table_field_info上新增了一个字段tgt_table_en_name,该字段的值想从表etl_table_property_info的tgt_table ...