线性基

数学知识:https://blog.sengxian.com/algorithms/linear-basis
题单:https://www.luogu.com.cn/training/11251#information
线性基用于解决最大异或和问题等


题目:
J:https://codeforces.com/gym/105336


线性基板子

#define int long long
const int N = 100, Max_M = 51;
int arr[N], brr[Max_M+1];
int n;
void linear_basis()
{
    for(int i = 1; i <= n; ++ i)
    	for(int j = Max_M; j >= 0; -- j)
            if(arr[i] >> j & 1)
            {
                if(brr[j]) arr[i] ^= brr[j];
                else
                {
                    brr[j] = arr[i];
                    for(int k = j - 1; k >= 0; -- k)
                        if(brr[k] && brr[j] >> k & 1) brr[j] ^= brr[k];
                    for(int k = j + 1; k <= Max_M; ++ k)
                        if(brr[k] >> j & 1) brr[k] ^= brr[j];
                    break;
                }
            }
}
posted @ 2024-09-10 18:33  Frodnx  阅读(17)  评论(0)    收藏  举报