답안 #1035579

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1035579 2024-07-26T12:07:11 Z alexander707070 Intergalactic ship (IZhO19_xorsum) C++14
12 / 100
2000 ms 22940 KB
#include<bits/stdc++.h>
#define MAXN 100007
using namespace std;

struct query{
    int type,val;
};

const int maxa=128;
const long long mod=1e9+7;

int n,d[MAXN],q,l[MAXN],r[MAXN],x[MAXN];

long long dp[507][150][150];
int u[507][150][150];

long long power[100007];
long long cnt[1007][1007],ans;

vector<query> w;
int li[207][3],tim,rest;
int br[207][3];

int ff(int pos,int s,int t){
    if(pos==0){
        if(s==0 and t==0)return 1;
        return 0;
    }

    if(u[pos][s][t]==tim)return dp[pos][s][t];
    u[pos][s][t]=tim;

    if(w[pos-1].type==0){
        dp[pos][s][t]=(ff(pos-1,s,t)+ ff(pos-1,s^w[pos-1].val,t))*power[br[w[pos-1].val][0]-1];
    }

    if(w[pos-1].type==1){
        dp[pos][s][t]=(ff(pos-1,s,t)+ ff(pos-1,s,t^w[pos-1].val))*power[br[w[pos-1].val][1]-1];
    }

    if(w[pos-1].type==2){
        dp[pos][s][t]=(ff(pos-1,s,t)+ ff(pos-1,s^w[pos-1].val,t^w[pos-1].val))*power[br[w[pos-1].val][2]-1];
    }

    dp[pos][s][t]%=mod;

    return dp[pos][s][t];
}

bool in(int a,int l,int r){
    return a>=l and a<=r;
}

long long calc(int a,int b){
    long long res=0;

    rest=0; tim++;
    w.clear();

    for(int i=0;i<=200;i++){
        for(int f=0;f<3;f++)br[i][f]=0;
    }

    for(int i=1;i<=q;i++){
        if(!in(a,l[i],r[i]) and !in(b,l[i],r[i]))rest++;

        if(in(a,l[i],r[i]) and !in(b,l[i],r[i])){
            if(li[x[i]][0]!=tim)w.push_back({0,x[i]});
            li[x[i]][0]=tim;
            br[x[i]][0]++;
        }
        if(!in(a,l[i],r[i]) and in(b,l[i],r[i])){
            if(li[x[i]][1]!=tim)w.push_back({1,x[i]});
            li[x[i]][1]=tim;
            br[x[i]][1]++;
        }
        if(in(a,l[i],r[i]) and in(b,l[i],r[i])){
            if(li[x[i]][2]!=tim)w.push_back({2,x[i]});
            li[x[i]][2]=tim;
            br[x[i]][2]++;
        }
    }

    for(long long s=0;s<maxa;s++){
        for(long long t=0;t<maxa;t++){
            res+=((s*t*cnt[a][b])%mod) * (( ff(int(w.size()),d[a]^s,d[b]^t)*power[rest])%mod);
            res%=mod;
        }
    }

    return res;
}

int main(){

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>d[i];
    }

    for(int i=1;i<=n;i++){
        for(int f=i;f<=n;f++){
            cnt[i][f]=i*(n-f+1);
            if(i!=f)cnt[i][f]*=2;
        }
    }

    cin>>q;
    for(int i=1;i<=q;i++){
        cin>>l[i]>>r[i]>>x[i];
    }

    power[0]=1;
    for(int i=1;i<=q;i++){
        power[i]=(power[i-1]*2)%mod;
    }

    for(int i=1;i<=n;i++){
        for(int f=i;f<=n;f++){
            ans+=calc(i,f);
            ans%=mod;
        }
    }

    cout<<ans<<"\n";
 
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 2 ms 344 KB Output is correct
3 Correct 66 ms 2604 KB Output is correct
4 Correct 68 ms 2392 KB Output is correct
5 Correct 21 ms 1884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 2 ms 344 KB Output is correct
3 Correct 66 ms 2604 KB Output is correct
4 Correct 68 ms 2392 KB Output is correct
5 Correct 21 ms 1884 KB Output is correct
6 Execution timed out 2015 ms 2568 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2041 ms 18556 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2032 ms 7768 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 716 ms 3916 KB Output is correct
2 Correct 722 ms 3920 KB Output is correct
3 Correct 705 ms 3920 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 716 ms 3916 KB Output is correct
2 Correct 722 ms 3920 KB Output is correct
3 Correct 705 ms 3920 KB Output is correct
4 Execution timed out 2076 ms 22940 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 2 ms 344 KB Output is correct
3 Correct 66 ms 2604 KB Output is correct
4 Correct 68 ms 2392 KB Output is correct
5 Correct 21 ms 1884 KB Output is correct
6 Execution timed out 2015 ms 2568 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 2 ms 344 KB Output is correct
3 Correct 66 ms 2604 KB Output is correct
4 Correct 68 ms 2392 KB Output is correct
5 Correct 21 ms 1884 KB Output is correct
6 Execution timed out 2015 ms 2568 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 2 ms 344 KB Output is correct
3 Correct 66 ms 2604 KB Output is correct
4 Correct 68 ms 2392 KB Output is correct
5 Correct 21 ms 1884 KB Output is correct
6 Execution timed out 2015 ms 2568 KB Time limit exceeded
7 Halted 0 ms 0 KB -