计算机学院大学生程序设计竞赛(2015’12)01 Matrix

01 Matrix

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


Problem Description
It's really a simple problem. 
Given a "01" matrix with size by n*n (the matrix size is n*n and only contain "0" or "1" in each grid), please count the number of "1" matrix with size by k*k (the matrix size is k*k and only contain "1" in each grid).
 

Input
There is an integer T (0 < T <=50) in the first line, indicating the case number.
Each test case begins with two numbers n and m (0<n, m<=1000), specifying the size of matrix and the query number.
Then n lines follow and each line contains n chars ("0" or "1").
Then m lines follow, each lines contains a number k (0<k<=n).
 

Output
For each query, output the number of "1" matrix with size by k*k.
 

Sample Input
2 2 2 01 00 1 2 3 3 010 111 111 1 2 2
 

Sample Output
1 0 7 2 2
 

总是望着曾经的空间发呆,那些说好不分开的朋友不在了,转身,陌路。 熟悉的,安静了, 安静的,离开了, 离开的,陌生了, 陌生的,消失了, 消失的,陌路了。快哭了

#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int a[1001][1001] ,b[1000];
char s[1001][1001];
int main()
{
    int t,n,m;
    cin>>t;
    while(t--)
    {
        cin>>n>>m;
        int ma=0;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(int i=0; i<n; i++)
            scanf("%s",s[i]);
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                a[i+1][j+1]=s[i][j]-'0';
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
            {
                if(a[i][j]==1)
                {
                    int mi=a[i-1][j-1];
                    if(mi>a[i-1][j])mi=a[i-1][j];
                    if(mi>a[i][j-1])mi=a[i][j-1];
                    mi++;
                    a[i][j]=mi;
                    b[mi]++;
                    ma=max(mi,ma);
                }
            }
        for(int i=ma; i>1; i--)
        {
            b[i-1]+=b[i];
        }
        int x;
        for(int i=0; i<m; i++)
        {
            cin>>x;
            cout<<b[x]<<endl;
        }
    }
    return 0;
}

@执念  "@☆但求“❤”安★ 下次我们做的一定会更好。。。。吐舌头

为什么这次的题目是英文的。。。。QAQ...哭

------------------- 这是千千的个人网站哦! https://www.dreamwings.cn -------------------
原文地址:https://www.cnblogs.com/im0qianqian/p/5989696.html