[JLOI2015]装备购买 题解 / 实数线性基学习笔记
看这道题之前,以为线性基只是支持异或的操作。。。
那么,我认为这道题体现出了线性基的本质:
就是说如何用最小的一个集合去表示所有出现的装备。
我们假设已经会使用线性基了,那么对于这道题该怎么办呢?
- 显然,根据贪心的思想,我们先把这些装备按照 \(cost\) 也就是花费从小向大排序。
- 我们从左往右 \(O(n)\) 扫一遍,如果可以插入线性基就插入然后加上答案的贡献。
- 如果不能插入,就一定不会造成贡献,这一点是很显然的。
所以,现在的关键问题是如何构建线性基。
其实我认为并没有那么困难。
因为我们已经知道异或线性基的写法,实数线性基直接套一下就好了。
这里先给出异或线性基的代码:
for (int i = 62; i >= 0; i--){
if (!(x >> (int)i)) continue;
if (!p[i]) {
p[i] = x;
break;
}
x ^= p[i];
}
观察一下可以发现,其实就是看当前位是有为一,再看线性基数组有没有被占用。
最后再把当前的 \(1\) 变成 \(0\) 的这一个简单的过程。
其实,实数的线性基也是一样的。
只是考虑如何把第 \(i\) 位消掉的问题,那直接高斯消元就可以了。
消完之后当前位上的就变成 \(0\) 了捏。
Code
#include <bits/stdc++.h>
#define file(a) freopen(a".out", "r", stdin), freopen(a".out", "w", stdout)
#define Enter putchar('\n')
#define quad putchar(' ')
const int N = 505;
const long double eps = 1e-6;
int n, m, p[N];
struct Node {
long double a[N];
int cost;
friend bool operator<(const Node &p, const Node &q) {
return p.cost < q.cost;
}
} node[N];
signed main(void) {
// file("1458");
std::cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
std::cin >> node[i].a[j];
for (int i = 1; i <= n; i++)
std::cin >> node[i].cost;
std::sort(node + 1, node + 1 + n);
int ans1 = 0, ans2 = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (std::fabs(node[i].a[j]) < eps)
continue;
if (!p[j]) {
p[j] = i;
ans1 ++;
ans2 += node[i].cost;
break;
}
long double K = 1.0 * node[i].a[j] / node[p[j]].a[j];
for (int k = j; k <= m; k++)
node[i].a[k] -= K * node[p[j]].a[k];
}
}
std::cout << ans1 << " " << ans2 << std::endl;
}
[JLOI2015]装备购买 题解 / 实数线性基学习笔记的更多相关文章
- BZOJ4004:[JLOI2015]装备购买——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4004 https://www.luogu.org/problemnew/show/P3265 脸哥 ...
- ACM线性基学习笔记
https://www.cnblogs.com/31415926535x/p/11260897.html 概述 最近的几场多校出现了好几次线性基的题目,,会想起之前在尝试西安区域赛的一道区间异或和最大 ...
- 洛谷P3389 高斯消元 / 高斯消元+线性基学习笔记
高斯消元 其实开始只是想搞下线性基,,,后来发现线性基和高斯消元的关系挺密切就一块儿在这儿写了好了QwQ 先港高斯消元趴? 这个算法并不难理解啊?就会矩阵运算就过去了鸭,,, 算了都专门为此写个题解还 ...
- [JLOI2015]装备购买(线性基)
[JLOI2015]装备购买 题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 nn 件装备,每件装备有 \(m\) 个属性,用向量 \(\mathbf{z_i}\)=\((a_1, \ldots ...
- BZOJ_4004_[JLOI2015]装备购买_线性基
BZOJ_4004_[JLOI2015]装备购买_线性基 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) ...
- bzoj 4004 [JLOI2015]装备购买 拟阵+线性基
[JLOI2015]装备购买 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1820 Solved: 547[Submit][Status][Dis ...
- 洛谷P3265 [JLOI2015]装备购买 [线性基]
题目传送门 装备购买 格式难调,题面就不放了. 分析: 一句话,有$n$件物品,每件物品有$m$个属性和一个花费值,如果一个装备的属性值可以由其他装备的属性值改变系数后组合得到那就不买,求购买最多装备 ...
- 【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元
[BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 ( ...
- BZOJ 4004: [JLOI2015]装备购买
4004: [JLOI2015]装备购买 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1154 Solved: 376[Submit][Statu ...
随机推荐
- 清除安装的Rancher、K8s
#清除主机的所有容器.挂载.镜像(慎用) docker stop $(docker ps -aq) docker system prune -f docker volume rm $(docker v ...
- busybox+linux Deplay 手机服务器
环境下载地址: Linux Deplay: https://github.com/meefik/linuxdeploy/releases Busybox : https:/ ...
- Golang(go语言)开发环境配置
VSCode开发环境配置 目录 VSCode开发环境配置 先到VSCode官网去下载适合自己系统的VSCode安装软件 演示在WIndows下 安装使用 演示在Linux(Ubuntu/centos) ...
- 详解Docker中Image、Container与 Volume 的迁移
开源Linux 长按二维码加关注~ 上一篇:Linux Used内存到底哪里去了? 已经部署的容器化服务,也不是不需要维护的.而且,由于生产环境往往有这样那样的严格要求,往往需要些非常规操作.Imag ...
- HttpContext.TraceIdentifier那严谨的设计
前言 Asp.Net Core中有一个不受人重视的属性HttpContext.TraceIdentifier,它在链路追踪中非常有用,下面是官方的定义: 在项目中一般会将该字段输出到每一条日志中,也可 ...
- 网络:Tor
洋葱路由催生了暗网的产生 1995年,美国海军研究实验室的科学家开始开发一套匿名系统,可以避免人们在互联网上的行迹被追 踪到.由于在该系统中,数据被层层密码保护,这个技术被称为叫作"洋葱路由 ...
- 115_Power Pivot之HR薪酬计算:公积金、社保、个税、实发工资相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 1.之前写了一个关于入离调转的pp应用,现在个税新增专项附加扣除项目,借此写一个关于薪酬计算的案例: 2.本案例 ...
- linux系统下文件误删除该如何恢复?
一.linux误删除数据的场景 在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了.而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就 ...
- 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型
目录 1.declare命令介绍 2.声明数组变量类型 3.声明变量为环境变量 4.声明只读属性 5.补充: 1.declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊 ...
- 翻页组件page-flip调用问题
翻页组件重新调用解决方案 翻页组件:page-flip import { PageFlip } from 'page-flip' pagefile() { //绘制翻页 this.pageFlip = ...