zoukankan      html  css  js  c++  java
  • 计算机学院大学生程序设计竞赛(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 -------------------
  • 相关阅读:
    编译预处理命令define
    共享数据的包含const
    友元类,友元函数
    静态成员static
    this 指针
    构造函数与析构函数
    c++类的基础
    void指针和const指针
    c++基础
    组播的实现
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989696.html
Copyright © 2011-2022 走看看