답안 #494376

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
494376 2021-12-15T10:59:48 Z jasen_penchev Brperm (RMI20_brperm) C++14
컴파일 오류
0 ms 0 KB
#include "brperm.h"
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;

const int LOG = 20;
const int MAXN = 500000;

string str = "";
int diff[MAXN + 5];
int mem[LOG + 5][(1ll << LOG) + 5];

void init(int n, const char s[])
{
    for (int i = 0; i < n; ++ i)
    {
        str += s[i];
    }

    for (int k = 0; k < 20; ++ k)
    {
        for (int i = 0; i < (1ll << k); ++ i)
        {
            int idx = 0;
            for (int j = 0; j < k; ++ j)
            {
                if ((i & (1ll << j))) idx += (1ll << (k - j - 1));
            }

            mem[k][i] = idx;
        }
    }

    diff[n - 1] = n;
    for (int i = n - 2; i >= 0; -- i)
    {
        if (s[i] == s[i + 1]) diff[i] = diff[i + 1];
        else diff[i] = i + 1;
    }

    return;
}

int query(int pos, int k)
{
    if (pos + (1ll << k) > str.size()) return 0;

    if (pos + (1ll << k) <= diff[i]) return 1;

    for (int i = 0; i < (1ll << k); ++ i)
    {
        int idx = mem[k][i];

        if (str[pos + i] != str[pos + idx]) return 0;
    }

    return 1;
}

Compilation message

brperm.cpp: In function 'int query(int, int)':
brperm.cpp:47:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     if (pos + (1ll << k) > str.size()) return 0;
      |         ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
brperm.cpp:49:34: error: 'i' was not declared in this scope
   49 |     if (pos + (1ll << k) <= diff[i]) return 1;
      |                                  ^