QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#788068#9745. 递增序列isWFnoya#WA 276ms10228kbC++201.8kb2024-11-27 15:48:142024-11-27 15:48:14

Judging History

你现在查看的是最新测评结果

  • [2024-11-27 15:48:14]
  • 评测
  • 测评结果:WA
  • 用时:276ms
  • 内存:10228kb
  • [2024-11-27 15:48:14]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> PII;
const int N=1e6+10;
char s[N];


vector<int> e[N];

ll n,k;
ll a[N];

ll tg[N];
ll as[N];

int merge(int x,int y){
    // cout<<x<<" "<<y<<endl;
    if(x>y) swap(x,y);
    if(y==2) return x;
    if(x==y) return x;
    return -1;
}

bool dfs(int x,int l,int r){
    if(x<0||l>r) return true;
    int flag=2;
    int cnt=0,fl=0;
    vector<ll> v;
    for(int i=l;i<=r;i++){
        if((a[i]>>x)&1) v.push_back(1);
        else v.push_back(0);
    }
    for(int i=1;i<v.size();i++){
        if(v[i]!=v[i-1]){
            cnt++;
            if(cnt>=2){
                flag=-1;
                return false;
            } 
            else{
                if(v[i]>v[i-1]) flag=0;
                else flag=1;
                fl=i;
            }
        }
    }
    tg[x]=merge(tg[x],flag);
    if(!dfs(x-1,l,l+fl-1)) return false;
    if(!dfs(x-1,l+fl,r)) return false;
    return true;
}

void __(){
    scanf("%lld%lld",&n,&k);
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);

    for(int i=0;i<=64;i++) tg[i]=2;
    if(!dfs(60,1,n)){
        puts("0");
        return;
    }
    ll val=1;
    for(int i=0;i<=60;i++){
        if(tg[i]==2) val*=2;
        as[i]=val;
    }
    ll ans=0;
    for(int i=60;i>=0;i--){
        int val=(k>>i)&1;
        if(val&&(tg[i]==0||tg[i]==2)){
            if(i==0) ans++;
            else ans+=as[i-1];
        }
        if(tg[i]!=2&&val!=tg[i]) break;
    }
    for(int i=1;i<=n;i++) a[i]^=k;
    
    bool flag=1;
    for(int i=2;i<=n;i++){

        if(a[i]<a[i-1]){
            flag=0;
            break;
        }
    }
    ans+=flag;
    printf("%lld\n",ans);

}


int main(){
    int _;
    cin>>_;
    while(_--){
        __();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 9944kb

input:

1
4 17
3 2 5 16

output:

4

result:

ok single line: '4'

Test #2:

score: -100
Wrong Answer
time: 276ms
memory: 10228kb

input:

36156
2 732025001343805266
563399128172323734 55283226774627822
7 388099190813067712
564150557919527813 457487771983557281 332055400678110195 760833651510929158 785768483273197875 690506113272551236 463276585748519124
2 798714574862593347
426890163990834364 434764725667883272
1 414708220571820990
42...

output:

288230376151711744
0
432345564227567616
414708220571820991
716398192192370638
0
1949654914769744
0
0
0
811009189367843523
0
0
0
114457959388827198
36028797018963968
0
0
91540211282631659
0
694703231769895640
144115188075855872
0
0
0
0
432345564227567616
65333152962117911
753346372609875093
180143985...

result:

wrong answer 44th lines differ - expected: '0', found: '4503599627370496'