首页 > 其他分享 >线性基

线性基

时间:2024-01-16 14:02:57浏览次数:26  
标签:return int ll long -- 线性 属性

P4570 [BJWC2011] 元素

有两种属性 要求其中一种选出来线性无关(不能异或为0)前提下,另外一种属性加起来最大, 把第二种属性从大到小排个序, 能加就加。

感性理解一下,就是我们对于线性基每个位置我们都尽可能让第二种属性大的去占住,这样就可以保证第二种属性加起来最大

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long
typedef long long ll; 

const int B = 60;

struct linear_basis {
    ll num[B + 1];
    bool insert(ll x) {
        for (int i = B - 1; i >= 0; i--) {
            if (x & (1ll << i)) {
                if (num[i] == 0) { num[i] = x; return true; }
                x ^= num[i];
            }
        }
        return false;
    }

    // x 异或一个子集的最小值
    // 若为 0 表示 x 可以被这个集合表示出来
    ll querymin(ll x) {
        for (int i = B - 1; i >= 0; i--) {
            x = min(x, x ^ num[i]);
        }
        return x;
    }

    ll querymax(ll x) {
        for (int i = B - 1; i >= 0; i--) {
            x = max(x, x ^ num[i]);
        }
        return x;
    }
};

linear_basis T; 

const int N = 1e3 + 100;

struct node {
    ll id;
    int v;
} a[N];

bool cmp(node x, node y) {
    return x.v > y.v;
}

void solve() {    
    int n; cin >> n;

    for (int i = 1; i <= n; i++) {
        ll id; cin >> id;
        int v; cin >> v;
        a[i] = {id, v};
    }

    sort(a + 1, a + 1 + n, cmp);

    ll ans = 0;
    for (int i = 1; i <= n; i++) {
        auto [id, v] = a[i];
        if (T.insert(id)) ans += v;
    }
    cout << ans << endl;
}

signed main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

    // int T = 1; cin >> T;
    // while(T--) solve();
    solve();

    return 0;
}
View Code

 

标签:return,int,ll,long,--,线性,属性
From: https://www.cnblogs.com/zhujio/p/17967508

相关文章

  • 【算法】【线性表】【链表】随机链表的复制
    1 题目给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random......
  • 【算法】【线性表】【链表】环形链表
    1 题目给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos 不作为参数进行传递 。仅......
  • 数学建模入门笔记(1)——Python pulp库解线性规划问题
    参考:Python求解线性规划——PuLP使用教程-Only(AR)-博客园(cnblogs.com)1.Definethemodelmodel=pl.LpProblem(name="",sense=pl.LpMaximize)name模型的名字sense模型的类型(pl.LpMaximize/pl.LpMinimize)2.Definethedecisionvariables用x[i]存储变量,命名为xi......
  • 【算法】【线性表】【链表】K 个一组翻转链表
    1 题目给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例1:......
  • 非线性规划——Pyhton库的实现
    非线性规划(NonlinearProgramming,简称NLP)是一种优化问题的数学形式,其中目标函数或约束条件中至少有一个是非线性的。优化问题的目标是找到一组变量的取值,使得目标函数在满足一系列约束条件的情况下达到最小值或最大值。在非线性规划中,目标函数和约束条件可以包含平方项、绝对值、......
  • 可编程线性霍尔传感器 IC
    一、产品概述CC6521/2是一款高性能的可编程线性霍尔传感器IC,采用先进的BiCMOS制程生产,具有霍尔系数高的优点,芯片内部包含了高灵敏度霍尔传感器,霍尔信号预放大器,高精度的霍尔温度补偿单元,振荡器,动态失调消除电路和放大器输出模块。CC6521/2采用了先进的自适应霍尔温度补偿技术,......
  • 非线性状态误差反馈NLSEF
    一、作用找到一种非线性的控制组合代替传统的PID控制器的线性组合,获得更有效的误差反馈控制率,只需将误差信号换成关于误差的非线性函数如fst函数(fhan函数)和fal函数等,可实现“小误差大增益,大误差小增益”的效果。二、理论分析有了跟踪微分器TD之后,我们就可以利用误差e1=v1-x1和误......
  • PyTorch 基础篇(2):线性回归(Linear Regression)
    #包importtorchimporttorch.nnasnnimportnumpyasnpimportmatplotlib.pyplotasplt#超参数设置input_size=1output_size=1num_epochs=60learning_rate=0.001#Toydataset#玩具资料:小数据集x_train=np.array([[3.3],[4.4],[5.5],[6.71],[......
  • 一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器
    一、基本概述TX5806是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。芯片外部元件少,使芯片成为便携式应用的理想选择。芯片可以适合USB电源和适配器电源工作。由于采用了内部P-MOS架构,加上防倒充电路,所以不需要外部隔离二极管。热反馈可对充电电流进行自动调节,以便......
  • 数据结构线性表之【循环链表、双向链表】
    循环链表在单链表中,每个结点都带有一个指向其后继结点的指针,但因为表尾元素没有后继结点,所以表尾结点的指针域为空,表明它不指向任何结点,并表示这个结点是最后一个结点。现在修改这个约定,将表尾结点的指针指回头结点,从而形成一类新链表。在这样的链表中,从任何一个结点出发并沿着指针......