社区讨论

N^2 但是通过了民间数据?

P14359[CSP-J 2025] 异或和参与者 8已保存回复 16

讨论操作

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

当前回复
16 条
当前快照
1 份
快照标识符
@mhiyn0tt
此快照首次捕获于
2025/11/03 17:51
4 个月前
此快照最后确认于
2025/11/18 11:08
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
using namespace std;

const int maxn=5e5;
int a[maxn+5],sum[maxn+5],xor_number=0;

int main(){
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1; i<=n; i++){
        scanf("%d",&a[i]);
        sum[i]=sum[i-1]^a[i];
    }
    int ans=0;
    for(int i=1; i<=n; i++){
        sum[i]^=xor_number;
        if(sum[i]==k){
            ans++;
            xor_number^=k;
            sum[i]=-1;
        }
        else{
            for(int j=i-1; j>=0 && sum[j]!=-1; j--){
                if((sum[j]^sum[i])==k){
                    ans++;
                    xor_number^=sum[i];
                    sum[i]=-1;
                    break;
                }
            }
        }
    }
    cout<<ans;
    return 0;
}
考场上错误地把复杂度算成了 O(n)O(n),但后来发现好像是 O(n2)O(n^2)。然而通过了民间数据,那么是数据太弱了还是我复杂度算错了?

回复

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

正在加载回复...