zoukankan      html  css  js  c++  java
  • TTTTTTTTTTTTT CF Good Bye 2015 C- New Year and Domino(CF611C) 二维前缀

    题目

    题意:给你一个n*m由.和#组成的矩阵,.代表可以放,#代表不可以,问在左上角(px,py)到(右下角qx,qy)这样的一个矩阵中,放下一个长度为2宽度为1的牌有多少种放法;

    #include <iostream>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #include <algorithm>
    #include <set>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long Ull;
    #define MM(a,b) memset(a,b,sizeof(a));
    const double eps = 1e-10;
    const int inf = 0x3f3f3f3f;
    const double pi=acos(-1);
    const int mod=100000000;
    ll max(ll a,ll b)
    {return a>b?a:b;};
    int min(int a,int b)
    {return a<b?a:b;};
    
    const int max_=500;
    int r[max_+5][max_+5],l[max_+5][max_+5],ans[100000+5];
    char f[505][505];
    int q,px,py,qx,qy,n,m;
    
    void init()
    {
        MM(r,0);MM(l,0);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=m;j++)
        {
            if(f[i][j]=='.'&&f[i-1][j]=='.') l[i][j]++;
            if(f[i][j]=='.'&&f[i][j-1]=='.') r[i][j]++;
            r[i][j]+=r[i-1][j]+r[i][j-1]-r[i-1][j-1];
            l[i][j]+=l[i-1][j]+l[i][j-1]-l[i-1][j-1];
        }
    }
    
    
    int  main()
    {
        while(~scanf("%d %d",&n,&m))
        {
            for(int i=1;i<=n;i++)
                {
                     scanf("%s",f[i]);
                     for(int j=m-1;j>=0;j--)
                           f[i][j+1]=f[i][j];
                     f[i][0]='#';
                }
            init();
            scanf("%d",&q);
            for(int i=1;i<=q;i++)
            {
                scanf("%d %d %d %d",&px,&py,&qx,&qy);
                ans[i]=r[qx][qy]-r[qx][py]-r[px-1][qy]+r[px-1][py];
                ans[i]+=l[qx][qy]-l[qx][py-1]-l[px][qy]+l[px][py-1];
                //这个地方需要细心一点,不是单纯的和计算面积一样,需要考虑牌的放法        
    } for(int i=1;i<=q;i++) printf("%d ",ans[i]); } return 0; }

      分析:本来还以为位是迷宫问题,后来看了题解后才发现只要处理下二维前缀就好,l,r数组分别代表

    从左上角到(i,j)这个点分别按能行吗,列所能放置的种数

  • 相关阅读:
    了解Whitehorse
    更新排行榜说明
    一个从Microsoft Word发表Blog文章的工具
    首页"进入我的博客"可以正常使用了
    ADO.NET: Close()与Dispose() 的讨论
    向大家致歉
    折腾了我一个下午及吃晚饭时间的问题
    [转帖]ASP.NET服务器端异步Web方法
    关于增加“收藏”功能的设想
    Mono 0.30发布了
  • 原文地址:https://www.cnblogs.com/smilesundream/p/5357204.html
Copyright © 2011-2022 走看看