题目地址:点击打开链接
思路:M的值大于20题目说错, b数组开小就会运行错误,开大点,还有就是尽量用scanf(),printf()输入输出,跑出来的时间有点长啊
AC代码:
#include <iostream>
#include<algorithm>
using namespace std;
int a[10010][110],b[25000];
bool cmp(int a,int b)
{
return a > b;
}
int main()
{
int n,l,m,i,j,k,sum,sum1;
while(cin>>n>>l>>m)
{
sum1 = 0;
sum = 0;
k = 0;
for(i=1; i<=n; i++)
{
for(j=1; j<=l; j++)
{
cin>>a[i][j];
if(a[i][j] == 0)
sum1++;
}
}
for(i=2; i<=n; i++)
{
if(a[i][1] + a[i][2] == 0)
{
sum = 0;
for(j=l; j>=1; j--)
{
if(a[i-1][j] == 1)
break;
else if(a[i-1][j] == 0)
sum++;
}
b[k++] = sum;
}
}
sort(b,b+k,cmp);
for(i=0; i<m-1; i++)
sum1 -= b[i];//把有可能是文章开头的上一段的最大的m-1个空格减掉
sum = 0;
for(i=l; i>=1; i--)
{
if(a[n][i] == 1)
break;
else if(a[n][i] == 0)
sum++;
}
sum1 -= 2*m;//把m个段落开头的2个空格减掉
sum1 -= sum;//把最后一段的空格减掉
cout<<sum1<<endl;
}
return 0;
}