https://codeforces.com/contest/1181/problem/C

题意:给一个n*m的格子(n,m<=1000),每个格子有个颜色,求可以条纹子矩阵的数量。

条纹矩阵就是如图

解法:

先预处理出每个点向下和它同字符能扩展到的位置down[i][j],然后暴力枚举顶点,检查即可。复杂度o(n*m)。

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn=1000100;
const int INF=(1<<29); int n,m;
char s[1100][1100];
int down[1100][1100]; void init_down(){
for(int j=1;j<=m;j++){
int l=1,r=1;
for(;l<=n;){
while(r+1<=n && s[r+1][j]==s[l][j]) r++;
for(int i=l;i<=r;i++) down[i][j]=r-i+1;
l=r+1;r=l;
}
}
} bool check(int i,int j,int cnt,int k){
if(s[i][j]!=s[i][k] || s[i+cnt][j]!=s[i+cnt][k] || s[i+2*cnt][j]!=s[i+2*cnt][k]) return 0;
return down[i][k]==cnt && down[i+cnt][k]==cnt && down[i+2*cnt][k]>=cnt;
} void solve(){
for(int i=1;i<=n;i++) scanf("%s",s[i]+1);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) down[i][j]=0;
init_down();
ll res=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;){
int cnt=down[i][j];
if(i+3*cnt-1>n||!check(i,j,cnt,j)){
j++;continue;
}
int k=j;
while(k+1<=m&&check(i,j,cnt,k+1)) k++;
int w=k-j+1;
res+=1LL*w*(w+1)/2;
j=k+1;
}
}
cout<<res<<endl;
} int main(){
// freopen("in.txt","r",stdin);
while(cin>>n>>m) solve();
return 0;
}

百题计划-1 codeforces1181C Flag 暴力模拟的更多相关文章

  1. 【第一期百题计划进行中,快来打卡学习】吃透java、细化到知识点的练习题及笔试题,助你轻松搞定java

    [快来免费打卡学习]参与方式 本期百题计划开始时间:2022-02-09,今日打卡题已在文中标红. 0.本文文末评论区打卡,需要登录才可以打卡以及查看其他人的打卡记录 1.以下练习题,请用对应的知识点 ...

  2. Python百题计划

    一.基础篇 想要像类似执行shell脚本一样执行Python脚本,需要在py文件开头加上什么?KEY:#!/usr/bin/env python Python解释器在加载 .py 文件中的代码时,会对 ...

  3. python 百题计划

    一.基础篇 想要像类似执行shell脚本一样执行Python脚本,需要在py文件开头加上什么?KEY:#!/usr/bin/env python Python解释器在加载 .py 文件中的代码时,会对 ...

  4. 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划

    [NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...

  5. POJ 1013 小水题 暴力模拟

    Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 35774   Accepted: 11 ...

  6. 2018/7/31-zznu-oj-问题 B: N! 普拉斯 -【求大数的阶乘-ll存不下-然后取尾零的个数输出-暴力模拟】

    问题 B: N! 普拉斯 时间限制: 1 Sec  内存限制: 128 MB提交: 114  解决: 35[提交] [状态] [讨论版] [命题人:admin] 题目描述 在处理阶乘时也需要借助计算器 ...

  7. 2018/7/31-zznuoj-问题 A: A + B 普拉斯【二维字符串+暴力模拟+考虑瑕疵的题意-0的特例】

    问题 A: A + B 普拉斯 在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:  现在我们用01来构成这些数字 当宝儿姐输入A + B 时(log10(A)<50,log10 ...

  8. bzoj3208: 花神的秒题计划Ⅰ

    3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec  Memory Limit: 128 MBSubmit: 323  Solved: 211[Submit][Status] Desc ...

  9. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  10. hihoCoder #1871 : Heshen's Account Book-字符串暴力模拟 自闭(getline()函数) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction B) 2018 ICPC 北京区域赛现场赛B

    P2 : Heshen's Account Book Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Description H ...

随机推荐

  1. MapboxGL基础

    1. 概述 Mapbox GL 是一套开源库,用于在 Web.移动和桌面应用程序中嵌入可自定义且响应迅速的客户端地图.Mapbox GL 贴图以高帧速率呈现.缩写"GL"来自行业标 ...

  2. RadioGroup 自动换行且保留点击事件

    转:(22条消息) RadioGroup 自动换行且保留点击事件_再见孙悟空_的博客-CSDN博客 public class MyRadioGroup extends RadioGroup { pri ...

  3. 【6】java之数组的定义和使用

    一.数组的定义与使用 1.1 数组的基本概念 数组指的就是一组相关变量的集合. 数组的定义: 声明并开辟数组 数据类型 数组名称 [] = new 数据类型[长度]: 数据类型 [] 数组名称 = n ...

  4. LCD1602液晶屏

    单片机系统用到的液晶屏(简称LCD)有很多类型,最常用的有两种,一种是1602型(即每行可显示16个字符,同时能显示2行),另一种是12864型(即每行可显示128个点,每列可显示64个点).一般前一 ...

  5. yile接口

    后台接口: ---------------------------更改订单状态接口(需要主站长账号权限,主站要有接口权限)更改订单状态(可批量更新),如需退款/退单请用订单退款退单接口,如需更新订单数 ...

  6. 前端JavaScript深拷贝的三种方法,看了不后悔!!!

    深拷⻉ 深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会 改变另⼀个对象的属性 常⻅的深拷⻉⽅式有: _.cloneDeep() jQuery.extend( ...

  7. s-hr实现单点登录,看我这份笔记就够了!!!

    https://pan.kingdee.com/s/MTA5ODk4NyxjNzk1来自:云之家企业云盘

  8. list变成String类型

    list变成String类型 CollectionUtils.isEmpty(vo.getImgs())?"" : String.join(";", (Stri ...

  9. GitLab能通过ssh克隆无法通过http克隆,也无法进行流水线,提示port 80: Connection refused

    问题记录:VM-Ubuntu20.04刚开始时使用NAT模式连接,后来改成桥接模式,改完之后原来使用docker启动的gitlab服务无法克隆,一直提示:fatal...没有远程库什么的,没解决后来删 ...

  10. Activity 的窗口去头的方式

    1\窗口去头的第一种方式 public class SplashActivity extends Activity { @Override protected void onCreate(Bundle ...