4 solutions
-
3
这道题的大致意思就是在一个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; }
-
2
这道题 我觉得 挺有意思的。 来说下做这道题的时候,我身边小伙伴的奇思妙想。哈哈 ~
①看到 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
#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
#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
- 6
- Tags
- # Submissions
- 215
- Accepted
- 58
- Uploaded By