4 solutions

  • 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 这种纯数学的东西,我觉得这道题 真心是 还好。。

    Information

    ID
    129
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    6
    Tags
    # Submissions
    166
    Accepted
    51
    Uploaded By