题目戳我

字数统计

Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3021    Accepted Submission(s): 812

Problem Description
  一天,淘气的Tom不小心将水泼到了他哥哥Jerry刚完成的作文上。原本崭新的作文纸顿时变得皱巴巴的,更糟糕的是由于水的关系,许多字都看不清了。可怜的Tom知道他闯下大祸了,等Jerry回来一定少不了一顿修理。现在Tom只想知道Jerry的作文被“破坏”了多少。
  Jerry用方格纸来写作文,每行有L个格子。(图1显示的是L = 10时的一篇作文,’X’表示该格有字,该文有三个段落)。

图1

图2

  图2显示的是浸水后的作文 ,‘O’表示这个位置上的文字已经被破坏。可是Tom并不知道原先哪些格子有文字,哪些没有,他唯一知道的是原文章分为M个段落,并且每个段落另起一行,空两格开头,段落内部没有空格(注意:任何一行只要开头的两个格子没有文字就可能是一个新段落的开始,例如图2中可能有4个段落)。
  Tom想知道至少有多少个字被破坏了,你能告诉他吗?

 
Input
  测试数据有多组。每组测试数据的第一行有三个整数:N(作文的行数1 ≤ N ≤ 10000),L(作文纸每行的格子数10 ≤ L ≤ 100),M(原文的段落数1 ≤ M ≤ 20),用空格分开。
  接下来是一个N × L的位矩阵(Aij)(相邻两个数由空格分开),表示被破坏后的作文。其中Aij取0时表示第i行第j列没有文字(或者是看不清了),取1时表示有文字。你可以假定:每行至少有一个1,并且所有数据都是合法的。
 
Output
  对于每组测试输出一行,一个整数,表示至少有多少文字被破坏。
 
Sample Input
10 10 3
0 0 0 1 1 1 0 1 1 0
1 1 0 0 0 1 1 1 0 0
0 0 1 1 0 0 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 1 1 0 0 0
1 1 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 0
 
Sample Output
19
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  1736 1728 1734 1873 1731 
 
题目意思:
给出一段N*L的01矩阵,矩阵的一个值代表一个文章的一个字,
整个矩阵就是一段文字,0表示模糊(可能有值,也可能无),1表示有字。
已知开头两个00是段落的标记,若文章原段落数是M,求0表示的模糊字最少多少?
 
分析:先数一下0的总数是多少,然后减去最后一行的末尾的连续的0数目
然后减去每一段开头的两个0(段落数*2)
因为开始计算了最后一行,所以现在段落数目减一
然后遍历(第2行到n),遇到开头是两个0的看它上面那行末尾连续的0的数目是多少,存起来
然后降序排序一下,排序号之后,减去段落数个数就是至少被污染的数目
比如样例,总共是31个0,减去最后一行末尾的一共0,30个
减去段落数*2个0,30-2*3=24
段落数减1(最后一行算过了)
然后从第2行开始遍历到最后,得到数组:3,2,0
还有两个段落,所以减去数组里面的两个数字
24-3-2=19
 
code:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
using namespace std;
#define LL long long int
#define MEM(a) memset(a,0,sizeof(a))
const int INF = 0x3f3f3f3f;
int n, m, k;
int mp[][];
bool cmp(int x, int y)
{
return x > y;
} int main()
{
while (scanf("%d%d%d", &n, &m, &k) != EOF)
{
int sum = ;
int sum_last = ;
int han[] = { };
int idx = ;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
scanf("%d", &mp[i][j]);
//如果当前是0
if (mp[i][j] == )
{
sum++;
}
}
//如果是最后一行
if (i == n)
{
//统计最后一行的0的个数
for (int j = m; j >= ; j--)
{
if (mp[i][j] == )
{
sum_last++;
}
else
{
break;
}
}
}
}
//printf("sum=%d\n",sum);
//减去最后一段末尾的空格数
//printf("sum_last=%d\n",sum_last);
sum -= sum_last;
//printf("sum=%d\n",sum);
//减去每一段开头的两个空格
sum -= k * ;
// printf("sum=%d\n",sum);
//因为已经减了最后一段的空格数,so段落数要减一
k--;
// printf("k=%d\n",k);
for (int i = ; i <= n; i++)
{
//如果当前行前面有两个0
if (mp[i][] == mp[i][] && mp[i][] == )
{
//找当前行的上一行的0的个数
for (int j = m; j >= ; j--)
{
if (mp[i - ][j] == )
{
han[idx]++;
}
else
{
//如果当前不是0,就break
idx++;
break;
}
}
}
}
//末尾的0从大到小排序
sort(han, han + idx, cmp);
for (int i = ; i < idx; i++)
{
//每减去一行段落数要减一
sum -= han[i];
k--;
if (k <= )
{
break;
}
}
printf("%d\n", sum);
}
return ;
}
 
 

HDU 1735 字数统计(模拟+一点点贪心的思想)的更多相关文章

  1. hdu 1735 字数统计

    这道题是到贪心的题目,首先用ans记录下所有的0的个数,然后尽量去掉更多的0,剩下的0的个数就是最少的字数.首先想到最后一行的0的个数可以减掉,然后就是m行开头的两个0可以减掉.然后思考最多还可以减掉 ...

  2. Javascript字数统计

    字数统计功能,原理是给textarea添加onKeyup事件,事件读取textarea内容并获得长度,并赋值给统计字数的那个文本节点,这里有一点要注意的是添加onKeypress和onKeydown事 ...

  3. 工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等

    去掉如下截图: 在百度编辑器 ueditor 根目录下: ueditor.config.js 文件中 搜索并将参数elementPathEnabled设置成false即可 常用功能开关如下: ,ele ...

  4. textarea还剩余字数统计

    <!DOCTYPE html><html><head> <meta charset="utf-8" /> <title> ...

  5. HDU 2008 数值统计

    题目链接:HDU 2008 Description 统计给定的n个数中,负数.零和正数的个数. Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的 ...

  6. ios开发之--textview意见反馈页面(占位label,字数统计,提交按钮的交互设置)

    记录一个页面的功能: textview的占位符,字数统计,提交按钮的交互设置,具体效果图如下:

  7. HDU1735 字数统计

    版权声明:长风原创 https://blog.csdn.net/u012846486/article/details/28011667 字数统计 Time Limit: 1000/2000 MS (J ...

  8. Hexo添加字数统计、阅读时长

    统计插件 配置 NexT 主题默认已经集成了文章[字数统计].[阅读时长]统计功能,如果我们需要使用,只需要在主题配置文件 _config.yml 中打开 wordcount 统计功能即可.如下所示: ...

  9. 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等

    去掉如下截图: 在百度编辑器 ueditor 根目录下: ueditor.config.js 文件中 搜索并将参数elementPathEnabled设置成false即可 常用功能开关如下: ,ele ...

随机推荐

  1. 插入排序——Python实现

    一.排序思想 排序思想参见:https://www.cnblogs.com/luomeng/p/10583124.html 二.python实现 def InsertSort(arrs): " ...

  2. Service的启动流程源码跟踪

    前言: 当我们在一个Activity里面startService的时候,具体的执行逻辑是怎么样的?需要我们一步步根据源码阅读. 在阅读源码的时候,要关注思路,不要陷在具体的实现细节中,一步步整理代码的 ...

  3. 建造者(生成器)模式C++、Java实现

    1.建造者模式UML 图1. 建造者模式UML 2.C++实现 C++实现类视图: 图2. 建造者模式C++实现的类视图 其中,Product的实现代码是(ProductA和ProductB的代码不再 ...

  4. mybatis向数据库插入数据 (传入的是一个实体类)

    /** * 插入用户信息 user为实体类 * @param user */ public int insert( User user); //实体类不用@param标注 //mybatis的xml文 ...

  5. asp.net core 错误定位 & vs2017 远程调试部署在centos上的asp.net core程序

        前言 程序运行中会出现各种BUG. 排除BUG有三种方式. 一.访问页面直接报错误信息 出于安全,服务器是关闭这个功能的.在centos上可以用 命令设置环境变量来解决:   export A ...

  6. 文本类型的HTML

    <b>文本</b>加粗<i>倾斜<strong>加粗语气 工作里尽量使用strong<em>倾斜语气 工作里尽量使用em<u>下 ...

  7. css模仿百度首页

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 二十一、如何导入svg图片

    svg就相当于字体,如何将生成的svg导入到自己的项目中去呢? 1.将类似下面的文件放入自己的项目中: 2.生成的svg中有一个style.css文件,将里面的内容拷贝到你的css中,然后更改上图的路 ...

  9. 初看Mybatis 源码 (三) SQL是怎么执行的

    前面说到Java动态代理,Mybatis通过这种方式实现了我们通过getMapper方式得到的Dao接口,可以直接通过接口的没有实现的方法来执行sql. AuthUserDao mapper = se ...

  10. Dapper进行增删改查 z

    http://www.cnblogs.com/huangkaiyan10/p/4640548.html 项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET ...