社区讨论

数据过水请求添加 hack

P13754 【MX-X17-T3】Distraction参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjgv4ej
此快照首次捕获于
2025/11/04 02:21
4 个月前
此快照最后确认于
2025/11/04 02:21
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int _,n,p[5000006],v[5000005],weizhi[2];
long long caozuo,sum;
int main(){
    scanf("%d",&_);
    while(_--){
        sum=0;//v[i]的和
        caozuo=0;//一次操作所带来的收益
        weizhi[1]=weizhi[0]=0;//之前前缀和的最大值的下标的奇偶性
        long long qjh=0,lastmin=0x3f3f3f3f3f3f3f3f;//前缀和,之前前缀和的最小值
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&p[i]);
            v[i]=abs(p[i]-i)%2;
            sum+=v[i];
            caozuo=max(caozuo,qjh-lastmin-v[i]+weizhi[(p[i]+1)%2]);
            if(v[i]==1)qjh--;
            else qjh++;
            if(qjh<lastmin){
                lastmin=qjh;
                weizhi[1]=weizhi[0]=0;
                weizhi[(i+1)%2]=1;
            }
            else if(qjh==lastmin){
                weizhi[(i+1)%2]=1;
            }
            
        }
        printf("%lld\n",max(caozuo+sum,sum));
    }
}
第二个样例不过但题过了。。。。
本质问题在于测试点没有包含操作是将一个数调到数组头的情况

回复

2 条回复,欢迎继续交流。

正在加载回复...