10pts悬关求助

P2363 马农

```cpp #include<bits/stdc++.h> using namespace std; typedef pair<int,int> pii; typedef long long ll; typedef unsigned long long ull; int n; map<ll,int>cnt; ll mp[55][55]; ll ans; ll query(int lx,int ly,int rx,int ry){ return mp[rx][ry]-mp[lx-1][ry]-mp[rx][ly-1]+mp[lx-1][ly-1]; } int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>mp[i][j]; mp[i][j]+=mp[i][j-1]+mp[i-1][j]-mp[i-1][j-1]; } } for(int i=1;i<n;i++){ for(int j=1;j<n;j++){ for(int lx=1;lx<=i;lx++){ for(int ly=1;ly<=j;ly++){ cnt[query(lx,ly,i,j)]++; } } for(int rx=i+1;rx<=n;rx++){ for(int ry=j+1;ry<=n;ry++){ ans+=cnt[query(i+1,j+1,rx,ry)]; } } cnt.clear(); for(int lx=1;lx<=i;lx++){ for(int ry=j+1;ry<=n;ry++){ cnt[query(lx,j+1,i,ry)]++; } } for(int rx=i+1;rx<=n;rx++){ for(int ly=1;ly<=j;ly++){ ans+=cnt[query(i+1,ly,rx,j)]; } } cnt.clear(); } } cout<<ans; return 0; } ``` 你的循环下标边界似乎搞混了 ```cpp for(int rx=i+1;rx<=n;rx++){ for(int ly=1;ly<=i;ly++){ ans+=cnt[query(i+1,ly,rx,j)]; } } ``` 应为 ```cpp for(int rx=i+1;rx<=n;rx++){ for(int ly=1;ly<=j;ly++){ ans+=cnt[query(i+1,ly,rx,j)]; } } ``` ```cpp for(int lx=1;lx<=i;lx++){ for(int ly=1;ly<=i;ly++){ cnt[query(lx,ly,i,j)]++; } } ``` 应为 ```cpp for(int lx=1;lx<=i;lx++){ for(int ly=1;ly<=j;ly++){ cnt[query(lx,ly,i,j)]++; } } ```
by JOKER_chu @ 2024-08-02 00:40:33


@[WsW_](/user/349824)
by JOKER_chu @ 2024-08-02 00:40:53


@[chuxm](/user/994729) thx
by WsW_ @ 2024-08-02 09:15:47


|