Problem Description

在打败了易基•普罗布朗、诺姆•普罗布朗之后,小茗同学开始挑战哈德•普罗布朗。

一番交战之后,哈德展开了一大波攻击。小茗同学为了抵御攻击,一边放魔法阵一边放魔法阵,然后他也不知道自己一共放了几个魔法阵。回收魔法阵是需要花费时间的,为了抵御下一波攻击,小茗同学需要知道自己共放了几个魔法阵,由于情况紧急,这个任务需要由你来完成。

魔法阵是三角形△的,比如

.............

.x..x....x...

...xxx..x.x..

.......xxxxx.

.............

以上都认为是魔法阵。

(即:三角形三个顶点为(i,j),(i+k,j-k),(i+k,j+k),边上均为’x’。三角形中间的元素没有要求。一个’x’可以同时属于多个魔法阵。单个’x’也算一个魔法阵。)

场地可以认为是一个N×M的矩形,每个位置上为’.’表示没有东西,或’x’表示有魔法阵。

 Input

第一行是一个整数T(T<=10),表示共有T组测试数据。

每组数据的第一行包含两个整数N M(N,M≤1000),表示矩阵大小。

接下来N行 ,每行M个字母为‘.’或者‘x’。

 Output

每组数据输出独占一行,输出格式为”Case #x: y”,x从1开始,表示数据组号,y表示相应的魔法阵的数量。

 Sample Input

1 3 3 .x. xxx ...

 Sample Output

Case #1: 5

 Source

FOJ有奖月赛-2016年4月(校赛热身赛)

#include <cstdio>
#include <queue>
#include <stack>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define lson 2*root
#define rson 2*root+1
#define met(a,b) (memset(a,b,sizeof(a)))
typedef long long LL;
const LL mod = ;
const LL INF= 1e9+;
const int N = ; char s[N][N];
int dp[N][N], dL[N][N], dR[N][N]; ///右边,左下,右下记录连续的, 最后再判断能够增加的大三角形,代码还是很容易能看懂的 int main()
{
int T, iCase=;
scanf("%d", &T);
while(T--)
{
int i, j, k, n, m, cnt=; scanf("%d%d", &n, &m); met(s, );
met(dp, );
met(dL, );
met(dR, ); for(i=; i<=n; i++)
{
scanf("%s", s[i]+);
for(j=; j<=m; j++)
{
if(s[i][j]=='x')
{
cnt++;
dp[i][j] = dL[i][j] = dR[i][j] = ;
}
}
} for(i=n; i>=; i--)
for(j=m; j>=; j--)
{
if(dp[i][j])
dp[i][j] += dp[i][j+];
if(dL[i][j])
dL[i][j] += dL[i+][j-];
if(dR[i][j])
dR[i][j] += dR[i+][j+];
} for(i=; i<=n; i++)
for(j=; j<=m; j++)
{
for(k=; k<=min(dL[i][j], dR[i][j]); k++)
{
if(dp[i+k][j-k]>=*k+)
cnt++;
}
} printf("Case #%d: %d\n", iCase++, cnt);
}
return ;
}

(算是dp吧) 小茗的魔法阵 (fzu 2225)的更多相关文章

  1. FZU 2225 小茗的魔法阵 扫描线+树状数组

    这个题和一个CF上的找"Z"的题差不多,都是扫描线+树状数组 从右上角的主对角线开始扫描,一直扫到左下角,每次更新,右延伸等于该扫描线的点,注意在其所在的树状数组更新就好了 时间复 ...

  2. FZU 2099 魔法阵(计算几何)

     Problem 2099 魔法阵 Accept: 120    Submit: 289 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  3. 【bfs分层图 dp】hihocoder#1147 : 时空阵

    最短路径树上分层dp的一类套路吧 题目大意 幽香这几天学习了魔法,准备建造一个大型的时空传送阵. 幽香现在可以在幻想乡的n个地点建造一些传送门,如果她建造了从地点a与地点b之间的传送门,那么从a到b和 ...

  4. [P2119]魔法阵 (模拟?搜索?)

    很玄学 我暴力都没做出来 #include <cstdio> ],vis[],a[],b[],c[],d[]; int main() { //freopen("magic.in& ...

  5. NOIP2016 T4 魔法阵 暴力枚举+前缀和后缀和优化

    想把最近几年的NOIP T4都先干掉,就大概差16年的,所以来做一做. 然后这题就浪费了我一整天QAQ...果然还是自己太弱了QAQ 点我看题 还是pa洛谷的... 题意:给m个物品,每个物品有一个不 ...

  6. 洛谷 P2119 魔法阵 题解

    Analysis 这道题也是考试题,我也依然打了个n三次方暴力.正解是先枚举差,再枚举c和d,a和b用乘法原理优化,这样就能大大减少时间. #include<iostream> #incl ...

  7. HDU 3008 Warcraft(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008 题目大意:人有100血和100魔法,每秒增加 t 魔法(不能超过100).n个技能,每个技能消耗 ...

  8. poj 2029 Get Many Persimmon Trees 各种解法都有,其实就是瞎搞不算吧是dp

    连接:http://poj.org/problem?id=2029 题意:给你一个map,然后在上面种树,问你h*w的矩形上最多有几棵树~这题直接搜就可以.不能算是DP 用树状数组也可作. #incl ...

  9. 刷题向》DP》关于基础DP(easy)

    openjudge  8464 这道题其实很简单,算是DP的基础题,比较适合开拓DP思维. 题目比较有欺骗性,其实稍微想想就可以解决,因为题意说第一次卖出后才能买入,所以我们可以考虑枚举断点,所以题目 ...

随机推荐

  1. 剑指Offer:面试题28——字符串的排列(java实现)(待序)

    问题描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母 ...

  2. 2016-07-15: Window定时器使用

    windows下定时器使用实例 #include <iostream> #include <Windows.h> using namespace std; void Timer ...

  3. windows无提示关闭页面

    今天碰到个问题,需要自动关闭网页,网上找了方法,一直在火狐测试,一直没反应,还以为写错了,后来发现用火狐需要进行设置(后文有提供方法),IE可正常使用... 下面提供部分代码: 需要自动关闭网页,可以 ...

  4. 用vector容器代替数组 ——使用数组初始化vector对象

    在C++中,我们不能用数组直接初始化另一数组,而只能创建新的数组,然后显式的把原数组的元素逐个复制给新的数组. 按照C语言中的做法: const size_t arry_size=6; int int ...

  5. golang 格式化时间为字符串

    package main import ( "fmt" "reflect" "time" ) func main() { //格式化字符串为 ...

  6. JavaScript 常用算法

    1.排序算法 (1)冒泡排序,冒泡排序其实就是通过比较相邻位置的元素大小,如果左边比右边大,就交换位置,继续比较,实际上就是每轮比较都得出一个最大值,然后通过多伦比较得出. function bubb ...

  7. Android之使用Android-AQuery异步加载图片(一)

    第一节:转载地址(http://www.cnblogs.com/lee0oo0/archive/2012/10/25/2738299.html) // 必须实现AQuery这个类 AQuery aq ...

  8. C#算法之向一个集合中插入随机不重复的100个数

    一道非常经典的C#笔试题: 需求:请使用C#将一个长度为100的int数组,插入1-100的随机数,不能重复,要求遍历次数最少. 1.最简单的办法 var rd = new Random(); Lis ...

  9. QtCreator动态编译jsoncpp完美支持x86和arm平台

    如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...

  10. Operate blob data in Oracle via C#

    oracle table: CREATE TABLE "SCOTT"."TEST_BLOB"    (    "NAME" VARCHAR2 ...