IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> swjtucpc—嘉然今天吃什么 -> 正文阅读

[数据结构与算法]swjtucpc—嘉然今天吃什么

这里写自定义目录标题

swjtucpc—嘉然今天吃什么

嘉然是枝江著名吃货,今天她沿着家背后的小巷子吃饭。小巷子长度为 L L L。她可以在任意时刻朝巷子正向走任意步(不能回头走)。在这条小巷子里有 n n n家餐馆,但令人无语的是,每家餐馆只在 t i t_i ti?时刻营业。

嘉然并不担心这个问题,每家餐馆能在 t i t_i ti?时刻将菜品送到她所在的位置。也就是说她能在 t i t_i ti?时刻吃到所有在 t i t_i ti?时刻营业的餐馆(作为知名吃货,她必须吃到这 n n n家餐馆的每一家)。

但等太久也会使她心烦,她的不满值 α \alpha α是餐馆的坐标 x i x_i xi?和该时刻她的坐标 x x x的差的绝对值,即 α = ∣ x i ? x ∣ \alpha =|x_i-x| α=xi??x.

请设计程序使得嘉然的不满值之和最小。

题解:linkcuttree优化贪心
抄个板子就行,没写几行自己的代码。

通过代码

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int rd() {
    int res = 0;
    char ch = getchar();
    while (!isdigit(ch)) {
        ch = getchar();
    }
    while (isdigit(ch))
        res = (res << 1) + (res << 3) + (ch ^ 48), ch = getchar();
    return res;
}
const int N = 300010;
int h1[N], e[N << 2], ne[N << 2], idx;
int h2[N];
void add(int h[], int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; }
int sz[N], dfn[N];
int n, timestamp;
int son[N][2];
void dfs1(int u, int fa) {
    sz[u] = 1;
    dfn[u] = ++timestamp;
    for (int i = h1[u]; i != -1; i = ne[i]) {
        int v = e[i];
        if (v == fa) continue;
        dfs1(v, u);
        sz[u] += sz[v];
    }
}
int len;
bool ok;
int q[N], tt;
int val[N << 2], tag[N << 2];
void pushdown(int u) {
    if (tag[u] == 0) return;
    tag[u << 1] += tag[u];
    tag[u << 1 | 1] += tag[u];
    val[u << 1] += tag[u];
    val[u << 1 | 1] += tag[u];
    tag[u] = 0;
}
int dep[N], f2[N], sz2[N];
void dfs3(int u) {
    return;
    sz2[u] = 1;
    for (int i = h2[u]; i != -1; i = ne[i]) {
        int v = e[i];
        if (v == f2[u]) continue;
        dep[v] = dep[u] + 1;
        f2[v] = u;

        dfs3(v);
        if (sz2[u] == 1) son[u][0] = v;
        son[u][1] = v;
        sz2[u] += sz2[v];
    }
}
void modify(int u, int l, int r, int L, int R, int v) {
    if (L <= l && r <= R) {
        val[u] += v;
        tag[u] += v;
        return;
    }
    pushdown(u);
    int mid = l + r >> 1;
    if (L <= mid) modify(u << 1, l, mid, L, R, v);
    if (R > mid) modify(u << 1 | 1, mid + 1, r, L, R, v);
    val[u] = max(val[u << 1], val[u << 1 | 1]);
}
void dfs2(int u) {
    return;
    if (ok) return;
    int cur = dep[u];
    if (cur >= len && (son[f2[u]][0] == u || u == 1)) {
        int v = q[tt - len + 1];
        modify(1, 1, n, dfn[v], dfn[v] + sz[v] - 1, -1);
    }
    q[++tt] = u;
    modify(1, 1, n, dfn[u], dfn[u] + sz[u] - 1, 1);
    if (cur + 1 >= len) {
        ll tot = val[1];
        if (tot <= 1) ok = 1;
    }
    for (int i = h2[u]; i != -1; i = ne[i]) {
        int v = e[i];
        if (v == f2[u]) continue;
        dfs2(v);
    }
    --tt;
    modify(1, 1, n, dfn[u], dfn[u] + sz[u] - 1, -1);
    if (cur >= len && (son[f2[u]][1] == u || u == 1)) {
        int v = q[tt - len + 1];
        modify(1, 1, n, dfn[v], dfn[v] + sz[v] - 1, 1);
    }
}
bool check(int x) {
    len = x;
    ok = 0;
    tt = 0;
    dfs2(1);
    return ok;
}
int init(int ff) {
    for (int i = 1; i <= n; i++) h1[i] = h2[i] = -1;
    idx = timestamp = 0;
    tt = 0;
    for (int i = 1; i <= n; i++) dfn[i] = sz[i] = 0;
    for (int i = 1; i <= n; i++) dep[i] = f2[i] = sz2[N] = 0;
    for (int i = 1; i <= n; i++) son[i][0] = son[i][1] = 0;
    int res = ff / 3;
    return res;
}

struct node {
    long long t, p;
} a[1000];
int main() {
    int u, vv;
    cin >> u >> vv;
    for (int i = 1; i <= u; i++) {
        scanf("%lld%lld", &a[i].t, &a[i].p);
        // ans += a[i].p;
    }
    // dfs1(1, 0);
    // dfs3(1);
    long long ll = 1, rr = init(vv);
    long long res = 0;
    for (int i = ll; i <= rr; ++i) {
        res += a[i].p;
    }
    cout << res << "\n";
    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:59:06  更:2022-05-09 13:03:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:45:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码