周六不烦 2023-01-23 00:22 采纳率: 66.7%
浏览 36
已结题

刷cf的时候碰到一个问题1e5不能过1e6反而过了,不知道是为什么

刷cf的时候碰到一个问题1e5不能过1e6反而过了,想知道为什么时间查那么多

这个是题目:https://codeforces.com/contest/1760/problem/E

这是碰到的问题

img

img

img

这是我的代码

```c++
#include<bits/stdc++.h>
using namespace std;
using i64=long long;
i64 a[1000005],n;
i64 cal(){
    i64 ans=0,num=0;
    for(int i=n;i>=1;i--){
        if(a[i]==0)num++;
        else ans+=num;
    }
    return ans;
}
void solve(){
       cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        int pos=0;
        for(int i=1;i<=n;i++){
            if(!a[i]){
                pos=i;
                break;
            }
        }
        i64 ans=0;
        ans=max(ans,cal());
        a[pos]=1;
        ans=max(ans,cal());
        a[pos]=0;
        for(int i=n;i>0;i--){
            if(a[i]){
                pos=i;
                break;
            }
        }
        a[pos]=0;
        ans=max(ans,cal());
        cout<<ans<<endl;
}
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        solve();
    }
    return 0;
}



###### 如图所示将100005变成1000005就可以AC 不知道问什么



  • 写回答

2条回答 默认 最新

  • wresource Android领域优质创作者 2023-01-23 08:39
    关注

    数组开大点过不是正常操作吗?应该是数组不够大导致的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月31日
  • 已采纳回答 1月23日
  • 创建了问题 1月23日