4 solutions

  • 3
    @ 2022-1-1 22:58:52

    这道题的大致意思就是在一个n*n的二维数组当中找到连续的0的个数然后看这连续的0的个数是否能填入以m为长度的一维数组(一开始以为m数组当中会出现0(意思就是老师当中还能插入学生)) 那么这个时候一但知道m的大小就不用管一维数组的输入了

    #include<bits/stdc++.h>
    using namespace std;
    int i[2005][2005],p[2005],d,e,sum=0;
    int main()
    {
    	cin>>d>>e;
    	int l=0;
    	for(int c=0;c<d;c++){
    		for(int f=0;f<d;f++){
    			scanf("%1d",&i[c][f]);
    			if(f==d-1){ //当f走到最后一位时需要单独判断连续的0的个数防止与下一行的0向连接
    				if(!i[c][f]) l++;
    				if(l>=e) sum+=l-e+1;
    				l=0;
    			}else if(!i[c][f]){
    				l++;
    			}else if(i[c][f]){//如果0的连续断开则需要判断是否能填入一维数组
    				if(l>=e) sum+=l-e+1;
    				l=0;
    			}
    		}
    	}
    	for(int c=0;c<e;c++) scanf("%1d",&p[c]);
    	cout<<sum;
    	return 0;
    }
    
    • @ 2022-1-1 23:01:13

      %1d,%2d,%3d,%4d,%5d中%与d之间的数字表示 “最小字段宽度”。 在%和格式字符之间插入一个整型常数来指定宽度n.

  • 2
    @ 2022-4-2 7:46:26

    这道题 我觉得 挺有意思的。 来说下做这道题的时候,我身边小伙伴的奇思妙想。哈哈 ~

    ①看到 0和1 想到 二进制,奈何 存储的 数 太多,怎么转呢?当然 也有容器 是专门存二进制的。Bitset。

    ②还有 想推导 公式的,他发现 每一个连续的0 作为一段,0的个数 设为 zeroNum,老师的人数 设为 m,则 方案数 = zeroNum + 1 - m。

    ③然后 还有想直接 暴力模拟的,整个过程模拟下来就行了。

    最后我采取的是 ② 和 ③,大家 不要觉得我是在说故事,这确实是 做这道题的时候,发生的真人真事。我们都是 小白,所以 在一起 探讨了一下。

    #include <iostream>
    #include <cmath>
    #include <string>
    
    using namespace std;
    char arr18[2005][2005];
    char brr18[2005];
    
    
    
    
    int main(void) {
    	int n, m;
    	cin >> n >> m;
    
    	for (int i = 0; i < n; ++i) {
    		cin >> arr18[i];
    	}
    
    	cin >> brr18;
    
    
    
    	int ans = 0;
    	for (int i = 0; i < n; ++i) {
    		int zeroNum = 0;
    		for (int j = 0; j <= n; ++j) {
    			if (arr18[i][j] == '0') {
    				zeroNum++;// 这段 0 的 数目是几个
    			}
    			else {
    				int temp = zeroNum + 1 - m;
    				if (temp > 0) {
    					ans += temp;
    				}
    				zeroNum = 0;
    			}
    		}
    		
    	}
    	cout << ans << endl;
    
    
    	return 0;
    }
    

    相较于 上道题 P1111 Ball Dropping 这种纯数学的东西,我觉得这道题 真心是 还好。。

    • 0
      @ 2023-11-22 20:29:41
      #include<iostream>
      #include<string>
      using namespace std;
      int main(){
        int n,m;
        cin>>n>>m;
        string a[n],b;
        for(int i=0;i<n;i++){
          cin>>a[i];
        }
        cin>>b;
        for(int i=0;i<m;i++){
          b[i]-=2;
        }
        int ans=0;
        for(int i=0;i<n;i++){
          int temp=a[i].find(b);
          while(temp!=-1){
            ans++;
            temp=a[i].find(b,temp+1);
          }
        }
        cout<<ans;
        return 0;
      }
      
      • 0
        @ 2022-3-14 13:56:19
        #include <stdio.h>
        #include <algorithm>
        #include <math.h>
        #include <vector>
        #include <iostream>
        #include <string.h>
        #include <queue>
        using namespace std;
        int n,m,ans;
        char a[2005][2005];
        char b[2005];
        int main() {
            scanf("%d%d",&n,&m);
            for(int i=0; i<n; i++)
                scanf("%s",&a[i]);
            scanf("%s",&b);
            for(int i=0; i<n; i++) {
                int temp=0;
                for(int j=0; j<n; j++) {
                    if(a[i][j]=='0') {
                        temp++;
                    } else {
                        temp=0;
                        continue;
                    }
                    if(temp>=m) {
                        ans++;
                    }
                }
            }
        printf("%d\n",ans);
        return 0;
        }
        
        • 1

        Information

        ID
        129
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        7
        Tags
        # Submissions
        212
        Accepted
        57
        Uploaded By