首页 > 其他分享 >洛谷-P5541 Sleepy Cow Herding S

洛谷-P5541 Sleepy Cow Herding S

时间:2022-11-30 00:44:28浏览次数:73  
标签:10 洛谷 Cow int ll Sleepy P5541 include

Sleepy Cow Herding S

Sleepy Cow Sorting 的升级版,从 \(3\) 头牛变成 \(n\) 的情况

分类讨论 + 双指针

  • 先把答案本就连续的特判丢掉

  • 最大值

最大值就尽量把每个空位都踩一遍,模拟一下会发现,第一跳的空隙一定没办法踩到,因此考虑两边第一跳谁跳的短,就从哪边开始

  • 最小值
  1. 考虑枚举答案所在的连续 \(n\) 个位置,假设枚举的这个区间外的牛,都可以跳进来,则答案为 \(n - cnt_{lr}\)

显然可以转化成为:找到一个长度为 \(n\) 的连续区间,使得牛尽可能多,双指针处理即可

  1. 会有不满足条件 \(1\) 的情况,也就是在区间外的牛没办法跳进来,这种情况只有 \(n - 1\) 头牛连续才会出现

    1. 类似于 5 8 9 10 的情况,区间在 \([7, 10]\) 为最优,可以让 \(10\) 跳到 \(6\),留个位置给 \(5\) 跳到 \(7\),总共 \(2\) 跳

    2. 类似于 6 8 9 10 的情况,区间在 \([7, 10]\) 为最优,直接让 \(10\) 跳到 \(7\) 即可,即唯一一个不连续的牛,距离连续的牛的距离为 \(2\) 的情况,只需要 \(1\) 跳

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
const ll maxn = 2e5 + 10;
const ll inf = 1e17 + 10;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin >> n;
    vector<int>a(n);
    for(int i=0; i<n; i++) cin >> a[i];
    sort(a.begin(), a.end());
    int cnt = 0, now = 1;
    for(int i=1; i<n; i++)
    {
        if(a[i] == a[i - 1] + 1) now++;
        else now = 1;
        cnt = max(now, cnt);
    }
    if(cnt == n) {cout << "0\n0\n"; return 0;}
    int ans = 0x3fffffff;
    int l = 0, r = 0;
    while(l < n)
    {
        while(r < n && a[r] <= a[l] + n - 1) r++;
        ans = min(ans, n - (r - l));
        l++;
    }
    if(cnt == n - 1)
    {
        ans = 2;
        if(a[0] == a[1] - 2 || a[n - 1] == a[n - 2] + 2) ans = 1;
    }
    cout << ans << endl;
    ans = a[n - 1] - a[0] - 1;
    ans -= n - 2;
    ans -= min(a[1] - a[0], a[n - 1] - a[n - 2]) - 1;
    cout << ans << endl; 
    return 0;
}

标签:10,洛谷,Cow,int,ll,Sleepy,P5541,include
From: https://www.cnblogs.com/dgsvygd/p/16937199.html

相关文章

  • USACO 2019 January Contest, Bronze Problem 2. Sleepy Cow Sorting
    SleepyCowSorting分类讨论先把答案本就连续的特判丢掉最大值最大值就尽量把每个空位都踩一遍,模拟一下会发现,第一跳的空隙一定没办法踩到,因此考虑两边第一跳谁......
  • 洛谷P2014 [CTSC1997] 选课
    sloj P2006.「树上背包」选课题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总......
  • 洛谷P2015 二叉苹果树
    slojP10153.「一本通5.2例1」二叉苹果树P2015二叉苹果树题目描述有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有N个结点(叶子......
  • 洛谷 P4018 Roy&October之取石子
    洛谷P4018Roy&October之取石子题意:\(n\)个石头,每次取\(p^k\)个石子(\(p\)是质数,\(k\in\N\)),取完最后一个的人获胜,问谁有必胜策略。只能说,MO题真的猛!结论:\(n\bmod......
  • 洛谷P1090 Java
    [NOIP2004提高组]合并果子/[USACO06NOV]FenceRepairG题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的......
  • 洛谷P2141 [NOIP2014 普及组] 珠心算测验
    [NOIP2014普及组]珠心算测验题目描述珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而......
  • 洛谷P1614 爱与愁的心痛
    爱与愁的心痛题目背景(本道题目隐藏了两首歌名,找找看哪~~~)《爱与愁的故事第一弹·heartache》第一章。《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大......
  • 洛谷P1047 [NOIP2005 普及组] 校门外的树
    [NOIP2005普及组]校门外的树题目描述某校大门外长度为l的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置......
  • 洛谷P4956 [COCI2017-2018#6] Davor
    [COCI2017-2018#6]Davor题面翻译在征服南极之后,Davor开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。他将在2018年12月31日开始出发,在这之......
  • 洛谷P1085 [NOIP2004 普及组] 不高兴的津津
    [NOIP2004普及组]不高兴的津津题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去......