nowcoder Wannafly 챌 린 지 1 B [폭력 + 사고]

전송 문 / / 사고: n 이 1000 밖 에 없 기 때문에 n ^ 2 의 알고리즘 은 통과 할 수 있 습 니 다. 그래서 우 리 는 접두사 와 구간 의 차이 나 값 을 구 한 다음 에 모든 위 치 를 매 거 진 다음 에 이 위치 앞 에 몇 가지 차이 나 가능 한 값 이 있 는 지 계산 하고 계산 한 다음 에 이 위치 뒤의 차이 나 값 을 계산 하고 앞의 수량 에 대응 하면 됩 니 다.
AC Code
const int maxn = 1e3+5;
int a[maxn],s[maxn];
int vis[maxn*maxn];
void solve()
{
    int n;
    while(~scanf("%d",&n)){
        Fill(vis,0);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            s[i] = s[i-1] ^ a[i];
        }
        ll res = 0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                vis[s[i] ^ s[j-1]]++;
            }
            for(int j=i+1;j<=n;j++){
                res += vis[s[j] ^ s[i]];
            }
        }
        cout << res << endl;
    }
}

좋은 웹페이지 즐겨찾기