首先这是最开始的代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int a,b,c,i,j,l=0,count=0;
cin>>a>>b>>c;
char d[a][b];
int e[114514]={0};
for(i=0;i<a;i++) cin>>d[i];
for(i=0;i<a;i++){
for(j=0;j<b;j++){
if(d[i][j]=='.')
e[l]++;
else if(j>0&&d[i][j-1]=='.')
l++;
}
l++;
}
for(j=0;j<b;j++){
for(i=0;i<a;i++){
if(d[i][j]=='.'){
e[l]++;
}
else if(i>0&&d[i-1][j]=='.'){
l++;
}
}
l++;
}
for(i=0;i<114514;i++){
if(e[i]>=c){
count+=e[i]-c+1;
}
}
cout<<count;
return 0;
}
这段代码没有考虑人数只有一个的情况,所以横竖算了两次,重复了。 然后这是第二次的代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int a,b,c,i,j,l=0,count=0;
cin>>a>>b>>c;
char d[a][b];
int e[114514]={0};
for(i=0;i<a;i++) cin>>d[i];
for(i=0;i<a;i++){
for(j=0;j<b;j++){
if(d[i][j]=='.')
e[l]++;
else if(j>0&&d[i][j-1]=='.')
l++;
}
l++;
}
if(c!=1){
for(j=0;j<b;j++){
for(i=0;i<a;i++){
if(d[i][j]=='.'){
e[l]++;
}
else if(i>0&&d[i-1][j]=='.'){
l++;
}
}
l++;
}
}
for(i=0;i<114514;i++){
if(e[i]>=c){
count+=e[i]-c+1;
}
}
cout<<count;
return 0;
}
想法是当人数=1的时候,不计算竖排的方案。但这么搞,以前能过的样例反而过不了了,只有20分。 然后这是第三次的
#include <bits/stdc++.h>
using namespace std;
int main() {
int a,b,c,i,j,l=0,count=0;
cin>>a>>b>>c;
char d[a][b];
int e[114514]={0};
for(i=0;i<a;i++) cin>>d[i];
for(i=0;i<a;i++){
for(j=0;j<b;j++){
if(d[i][j]=='.')
e[l]++;
else if(j>0&&d[i][j-1]=='.')
l++;
}
l++;
}
for(j=0;j<b;j++){
for(i=0;i<a;i++){
if(d[i][j]=='.'){
e[l]++;
}
else if(i>0&&d[i-1][j]=='.'){
l++;
}
}
l++;
}
for(i=0;i<114514;i++){
if(e[i]>=c){
count+=e[i]-c+1;
}
}
if(c==1){
count/=2;
}
cout<<count;
return 0;
}
这次简单粗暴当人数=1的时候,结果/2,就过了。所以为什么第二次的过不了啊?