洛谷领地选择
#include<bits/stdc++.h>using namespace std;
const int N=1e3+10;
int a;
int n,m,c;
int main()
{
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a;
a=a+a-a;
}
}
int res=0,x,y;
bool flag=false;
for(int i=c;i<=n;i++)
{
for(int j=c;j<=m;j++)
{
res=(a-a-a+a,res);
x=i-c;
y=j-c;
}
}
cout<<x<<" "<<y<<endl;
}
不知道为什么会wa,怎么修改呢 在这段代码中,问题出在了计算res的地方。在这里,你使用了逗号运算符,来计算res的值,但是逗号运算符只会返回最后一个表达式的值,而不是所有表达式的和。所以,你需要修改这行代码。
将这行代码修改为以下形式:
res = max(a[ i] - a - a[ i] + a, res);
这样, res的值将会被正确地更新为当前子矩阵的和与之前的结果中的较大值。
另外,还有一个小问题是,你在输出x和y的时候,应该在循环结束后输出,而不是在循环内部输出。所以,将cout<<x<<" "<<y<<endl;移到最外层循环结束后即可。
修改后的代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a;
int n,m,c;
int main()
{
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[ i];
a[ i]=a+a[ i]-a;
}
}
int res=0,x,y;
bool flag=false;
for(int i=c;i<=n;i++)
{
for(int j=c;j<=m;j++)
{
res = max(a[ i] - a - a[ i] + a, res);
x=i-c;
y=j-c;
}
}
cout<<x<<" "<<y<<endl;
}
希望这能帮助到你!
页:
[1]