lsmCC 发表于 2023-11-9 14:55:03

洛谷领地选择

#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,怎么修改呢

isdkz 发表于 2023-11-9 14:56:08

在这段代码中,问题出在了计算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]
查看完整版本: 洛谷领地选择