cf1557-D. Ezzat and Grid(离散化&线段树&pair复杂度&很多数据结构的基本操作)

总结收获

  1. 最重要的是知道怎么解决的,代码实在现在写不出来,可以先借鉴一下大佬的hhh。

题目

传送门

  1. 题意:n*1e9的01阵,m条线段(i,l,r)表示第i行[l,r]都为1,线段可能重复。一个漂亮矩阵定义为任意连续两行都至少有一列在这两行中都为1,求最少删去多少行,能使剩下的矩阵为漂亮矩阵。
    在这里插入图片描述
  2. 题解:不难想到,遍历每一行,每一行的上面一行应该是行数最多的漂亮矩阵的最后一行,然后线段树维护即可(具体的看代码)
    2.1 离散化:用unique而不用map
    2.2 pair<int,int>:能用就用,不用自己搞个结构体(大佬都在用pair),另外{x,y}似乎可以等价于make_pair(x,y)
    2.3 for(auto &i:g[x]):然后才可以修改值,否则知识取数操作。
    2.4 emplace_back算是puah_back的优化。
  3. 代码
//看懂之后仿一遍
#include <bits/stdc++.h>
#define pii pair<int, int>
// #define mp(x, y) make_pair(x, y)
#define dbg(x) cout << #x << "===" << x << endl
using namespace std;
const int N = 6e5 + 5;
int n, m, p, l, r;
int f[N], vis[N];
vector<pii> v[N];
vector<int> x;
pii mx[N << 2], tag[N << 2];
void pushdown(int p) {
   
   
    // if (!tag[p].first) return;
    mx[p << 1] = max(mx[p << 1], tag[p]);
    mx[p << 1 | 1] = max(mx[p << 1 | 1], tag[p]);
    tag[p 
### Vue3 实现遍历数组生成卡片并导出到 Word 的解决方案 #### 卡片生成部分 在 Vue3 中可以利用 `v-for` 指令来遍历数组生成多个卡片。以下是基于引用中的 Vuetify 组件结构[^2],构建一个简单的卡片模板: ```html &lt;template&gt; &lt;div id=&quot;card-container&quot;&gt; &lt;v-card flat v-for=&quot;(item, index) in items&quot; :key=&quot;index&quot; class=&quot;mb-4 card-item&quot;&gt; &lt;!-- 卡片标题 --&gt; &lt;v-card-title&gt;{{ item.title }}&lt;/v-card-title&gt; &lt;!-- 卡片内容 --&gt; &lt;v-card-text&gt;{{ item.content }}&lt;/v-card-text&gt; &lt;/v-card&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import { ref } from &#39;vue&#39;; export default { setup() { const items = ref([ { title: &#39;Card 1&#39;, content: &#39;This is the first card.&#39; }, { title: &#39;Card 2&#39;, content: &#39;This is the second card.&#39; }, { title: &#39;Card 3&#39;, content: &#39;This is the third card.&#39; } ]); return { items }; } }; &lt;/script&gt; &lt;style scoped&gt; .card-item { width: 300px; } &lt;/style&gt; ``` 此代码片段展示了如何通过 `items` 数组动态生成多个卡片。 --- #### 将 HTML 转换为图片 为了将生成的卡片转换为图片格式,可以使用第三方库 **html2canvas** 来完成这一操作。该工具能够捕获 DOM 元素并将它们渲染为 Canvas 图像。 安装依赖: ```bash npm install html2canvas ``` 实现逻辑如下: ```javascript import html2canvas from &#39;html2canvas&#39;; function convertCardsToImages() { const container = document.getElementById(&#39;card-container&#39;); const cards = Array.from(container.querySelectorAll(&#39;.card-item&#39;)); Promise.all( cards.map((card) =&gt; html2canvas(card).then((canvas) =&gt; canvas.toDataURL()) ) ).then((images) =&gt; console.log(images)); // images 是 Base64 编码的图片列表 } // 在页面加载完成后调用函数 convertCardsToImages(); ``` 以上代码实现了对每个 `.card-item` 进行截图,并返回一组 Base64 格式的图像数据。 --- #### 导出到 Word 文档 要将生成的图片嵌入到 Word 文件中,推荐使用 JavaScript 库 **docx** 或者 **mammoth.js**。这里以 **docx** 为例说明具体实现方法。 安装 docx: ```bash npm install @ezzat/docx ``` 创建 Word 文档并插入图片: ```javascript import { Packer, Paragraph, ImageRun } from &#39;@ezzat/docx&#39;; import fs from &#39;fs&#39;; async function exportToWord(imageUrls) { const doc = new Document(); imageUrls.forEach(async (imageUrl) =&gt; { try { const buffer = await fetch(imageUrl.replace(/^data:image\/\w+;base64,/, &#39;&#39;)).then(res =&gt; res.arrayBuffer()); doc.addSection({ children: [ new Paragraph({ children: [new ImageRun({ data: Buffer.from(buffer), transformation: { width: 400, height: 300 } })], }), ], }); } catch (error) { console.error(error); } }); const packer = new Packer(); packer.toBlob(doc).then((blob) =&gt; { saveAs(blob, &#39;cards.docx&#39;); // 使用 FileSaver.js 提供的 saveAs 函数保存文件 }); } // 假设已获取到 Base64 图片 URL 列表 const base64ImageList = [&#39;...&#39;]; // 替换为实际的 Base64 数据 exportToWord(base64ImageList); ``` 注意:需要引入额外的库如 **FileSaver.js** 才能支持浏览器端下载功能。 --- ### 总结 整个流程分为三个主要阶段: 1. 使用 Vue3 和 `v-for` 动态生成卡片。 2. 利用 **html2canvas** 把每张卡片转为图片。 3. 结合 **docx** 创建包含这些图片的 Word 文档并提供下载链接。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值