求助,帮忙看看区别
查看原帖
求助,帮忙看看区别
1251345
2012_Zhang_楼主2025/6/25 16:08

60pts

#include<bits/stdc++.h>
using namespace std;
int SG[500005],t,F;
bool f[5005];\\注意这里
int sg(int n){
    if(SG[n]>-1) return SG[n];
    if(n<F) return (SG[n]=0);
    SG[n]=0;
    int l;
    memset(f,0,sizeof f);
    for(l=2;l<=n;l=n/(n/l)+1){
        for(int i=l;i<=min(l+1,n);i++){
            int res=0;
            if((n%i)&1) res^=sg(n/i+1);
            if((i-n%i)&1) res^=sg(n/i);
            f[res]=1;
        }
    }
    for(int i=0;;i++)
        if(!f[i]){
            SG[n]=i;
            return i;
        }
}
int main(){
    for(int i=0;i<=500000;i++)SG[i]=-1;
    cin>>t>>F;
    while(t--){
        int n,x,ans=0;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>x;
            ans^=sg(x);
        }
        if(ans>0) cout<<1<<' ';
        else cout<<0<<' ';
    }
}

100pts

#include<bits/stdc++.h>
using namespace std;
int SG[500005],t,F;
int sg(int n){
    if(SG[n]>-1) return SG[n];
    if(n<F) return (SG[n]=0);
    SG[n]=0;
    int l;
    bool f[5005];\\注意这里
    memset(f,0,sizeof f);
    for(l=2;l<=n;l=n/(n/l)+1){
        for(int i=l;i<=min(l+1,n);i++){
            int res=0;
            if((n%i)&1) res^=sg(n/i+1);
            if((i-n%i)&1) res^=sg(n/i);
            f[res]=1;
        }
    }
    for(int i=0;;i++)
        if(!f[i]){
            SG[n]=i;
            return i;
        }
}
int main(){
    for(int i=0;i<=500000;i++)SG[i]=-1;
    cin>>t>>F;
    while(t--){
        int n,x,ans=0;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>x;
            ans^=sg(x);
        }
        if(ans>0) cout<<1<<' ';
        else cout<<0<<' ';
    }
}

感觉没区别

2025/6/25 16:08
加载中...