BZOJ 3888 Usaco 2015 Jan Stampede 模拟

题目大意

给出一些奶牛,一个人在原点观察,牛和牛之间又互相遮挡的关系,给出每头牛的运行方式和位置,问这个人最终会看到多少头牛。

思路

知道了运行方式,我们就知道这头牛在什么时间段会遮挡住人的视线,然后从高到低弄个东西维护一下覆盖什么的,这个题就变成了POJ的Mayor’s posters。

注意下时间点和时间段的区别就行了。

CODE

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 100010
using namespace std;
#define LEFT (pos << 1)
#define RIGHT (pos << 1|1)

struct Cow{
    int x,y,c;
    int st,ed;

    bool operator <(const Cow &a)const {
        return y > a.y;
    }
    void Read() {
        scanf("%d%d%d", &x, &y, &c);
        x *= -1;
        st = c * (x - 1);
        ed = st + c;
    }
}src[MAX];

int cows;
pair<int,int *> xx[MAX << 1];
int cnt,t;

int tree[MAX << 4];

inline void PushDown(int pos)
{
    if(tree[pos]) {
        tree[LEFT] = tree[pos];
        tree[RIGHT] = tree[pos];
        tree[pos] = 0;
    }
}

void Modify(int l, int r, int x, int y, int c, int pos)
{
    if(l == x && y == r) {
        tree[pos] = c;
        return ;
    }
    PushDown(pos);
    int mid = (l + r) >> 1;
    if(y <= mid)    Modify(l, mid, x, y, c, LEFT);
    else if(x > mid)    Modify(mid + 1, r, x, y, c, RIGHT);
    else {
        Modify(l, mid, x, mid, c, LEFT);
        Modify(mid + 1, r, mid + 1, y, c, RIGHT);
    }
}

inline int Ask(int l, int r, int x, int pos)
{
    if(l == r)  return tree[pos];
    PushDown(pos);
    int mid = (l + r) >> 1;
    if(x <= mid)    return Ask(l, mid, x, LEFT);
    return Ask(mid + 1, r, x, RIGHT);
}

bool v[MAX];

int main()
{
    cin >> cows;
    for(int i = 1; i <= cows; ++i)
        src[i].Read();
    sort(src + 1, src + cows + 1);
    for(int i = 1; i <= cows; ++i) {
        xx[++cnt] = make_pair(src[i].st, &src[i].st);
        xx[++cnt] = make_pair(src[i].ed, &src[i].ed);
    }
    sort(xx + 1, xx + cnt + 1);
    for(int i = 1; i <= cnt; ++i) {
        if(i == 1 || xx[i].first != xx[i - 1].first)
            t += 2;
        *xx[i].second = t;
    }
    for(int i = 1; i <= cows; ++i)
        Modify(1, t, src[i].st, src[i].ed , i, 1);
    for(int i = 1; i <= t; ++i)
        v[Ask(1, t, i, 1)] = true;
    int ans = 0;
    for(int i = 1; i <= cows; ++i)
        ans += v[i];
    cout << ans << endl;
    return 0;
}
时间: 2024-10-19 18:37:28

BZOJ 3888 Usaco 2015 Jan Stampede 模拟的相关文章

[BZOJ 3888] [Usaco2015 Jan] Stampede 【线段树】

题目链接:BZOJ - 3888 题目分析 首先,计算出每个线段在 x 坐标 0 处出现的时间开始点和结束点,就转成了时间轴上的线段. 然后就是看每条线段是否被 y 比它小的线段完全覆盖了.注意求出的时间点要离散化,然后应该使用时间轴上的区间来表示,两线段端点重合并不是有共同部分. 将所有线段按照 y 从小到大排序之后,使用线段树判断它覆盖的区间是否已经都被前面的线段覆盖了. 然后将它所覆盖的区间覆盖. 就这样的一道题我WA了7次,还有救吗.. 代码 #include <iostream> #

线段树 BZOJ3888 [Usaco2015 Jan]Stampede

3888: [Usaco2015 Jan]Stampede Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 253  Solved: 81[Submit][Status][Discuss] Description Farmer John's N cows (1 <= N <= 50,000) appear to be stampeding along the road at the front of FJ's farm, but they are

Schlumberger Techlog 2013.3 Win64 油田测井解释+Schlumberger ECLIPSE 2015.1 油藏模拟中文最新版

Schlumberger Techlog 2013.3 Win64 油田测井解释+Schlumberger ECLIPSE 2015.1 油藏模拟中文最新版二维配管软件qpiping3.2+风险分析DNV Phast Risk v6.7+CAESAR II 2014 工艺配管Zeataline.PipeData.Pro.v10.0.21风险分析DNV Phast Risk v6.7-ISO 1DVDCAESAR II 2014 win32 64支持win7 win8 管道设计应力分析软件CAES

USACO翻译:USACO 2012 JAN三题(1)

USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery combos 输入文件名 gifts.in delivery.in combos.in 输出文件名 gifts.out delivery.out combos.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比

USACO翻译:USACO 2013 JAN三题(1)

USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入文件名 mirrors.in paint.in lineup.in 输出文件名 mirrors.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运行内存限制

USACO翻译:USACO 2014 JAN三题(2)

USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recording skicourse 输入文件名 bteams.in recording.in skicourse.in 输出文件名 bteams.out recording.out skicourse.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比

USACO翻译:USACO 2012 JAN三题(2)

USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛跑步 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking baleshare cowrun 输入文件名 stacking.in baleshare.in cowrun.in 输出文件名 stacking.out baleshare.out cowrun.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方

[BZOJ 1652][USACO 06FEB]Treats for the Cows 题解(区间DP)

[BZOJ 1652][USACO 06FEB]Treats for the Cows Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a given

【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

[题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描述] 奶牛从 \(1\) ~ \(N(1≤N≤1e5)\) 进行了编号,把公司组织成一棵树,\(1\)号奶牛作为总裁(树的根节点).除总裁以外的每头奶牛都有且仅有唯一的一个的上司(即它在树上的父结点).每一头牛\(i\)都有一个不同的能力指数 \(p(i)\),描述了她对其工作的擅长程度.如果奶牛