Samurai's Stroke

题目链接

  • 题意:

    一个长度为L的木棍,有n个支点支撑,每一个点是一个int数。表示距离木棍左端点的距离。求在那些位置将木棍劈开能够使得至少有一个木棍掉下去,输出这些位置的长度

    3 ≤ l ≤
    109;
    2 ≤ n ≤ 105

  • 分析:

    对于左端的木棍。假设会掉下去一定是重心在木棍之外。两种情况:1,在最左端木棍之外。2,在最右木棍之外

    每次能够得到一个答案区间,最后再从右向左处理一下,将区间合并即答案

const int maxn = 1100000;

struct Seg
{
    int l, r;
    bool operator< (const Seg& rhs) const
    {
        if (l != rhs.l)
            return l < rhs.l;
        return r < rhs.r;
    }
} x[maxn];
int tot, L, n;
int ipt[maxn];

void fun(bool flag)
{
    if (flag)
        x[tot++] = (Seg){ L - 2 * ipt[0], L };
    else
        x[tot++] = (Seg){ 0, 2 * ipt[0] };
    REP(i, n - 1)
    {
        int l = ipt[i] * 2, r = ipt[i + 1];
        if (l <= r)
        {
            if (flag)
                x[tot++] = (Seg){ L - r, L - l };
            else
                x[tot++] = (Seg){ l, r };
        }
    }
}

int main()
{
    while (~RII(L, n))
    {
        tot = 0;
        REP(i, n)
            RI(ipt[i]);
        sort(ipt, ipt + n);
        fun(false);

        REP(i, n)
            ipt[i] = L - ipt[i];
        sort(ipt, ipt + n);
        fun(true);

        sort(x, x + tot);
        int cnt = 1;
        FF(i, 1, tot)
        {
            int &l1 = x[cnt - 1].l, &r1 = x[cnt - 1].r;
            int &l2 = x[i].l, &r2 = x[i].r;
            if (r1 >= l2)
            {
                r1 = max(r1, r2);
            }
            else
            {
                x[cnt].l = l2;
                x[cnt].r = r2;
                cnt++;
            }
        }
        tot = cnt;
        int ans = 0;
        REP(i, tot)
        {
            ans += x[i].r - x[i].l;
        }
        WI(ans);
    }
    return 0;
}

Samurai's Stroke

时间: 2024-10-13 12:13:20

Samurai&#39;s Stroke的相关文章

Android实例-TRectangle加载图片(XE8+小米2)

结果: 1.加载图片很流畅,可以做背景用. 2.现在是加载了正形与圆形,其他形状能不能加载呢?自己测试哦,要多动手才行. 3.需要把图片打到包里哦(路径为“assets\internal\”). 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 7 FMX.Types, FMX.Controls,

HDUOJ 1033 Edge

看到百分之50多的AC率,但这道题看得我一头雾水...看了半天结果就是一道大水题.模拟就行了. 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 6 int main() 7 { 8 char command[201]; 9 int len, x, y, i, cur_direction; //cur_direction: 1 means n

PHP图标类库 - JpGraph使用详解

http://w3note.com/web/181.html 微信平台开发的推广支持应用里,为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,借此可以通过统计不同场景扫描的二维码的结果来获取商业信息. 为了更形象地展示统计结果,可以使用php作图,不过这需要掌握复杂抽象的画图函数,这里推荐使用php的JpGraph图表类库,它使得作图变成了一件非常简单的事情,你只需从数据库中取出相关数据,定义标

学习HTML5之塔克大战(详细记录)

学了一些HTML5的一些基本知识,开始学习制作...... 介绍一些基本知识:  px(像素)--->1px等于多少? 1cm or 2cm -->no  no no! (1).像素是一个密度单位:无法用度量.... (2)  stoke--->画线    fill--->填充 (3)再画图形时,一定记得路径闭合... (4)在绘制图片时:需要注意的是:先加载图片,在进行绘制 绘制照片的一些基本步骤: (1) 创建image对象   new Image(); (2)指定图片(或者路

js实现圆环进度条

在runjs.cn上找了段代码,不过作者有意卖萌,有意复杂化代码.我需要的只是从0到100%的加载,加载到100%就停止,不要再乱动! 效果图: 放码过来: 1 window.onload = function(){ 2 //canvas initialization 3 var canvas = document.getElementById("canvas"); 4 var ctx = canvas.getContext("2d"); 5 //dimension

GraphicsBasics

1 //GraphicsBasics.cpp 2 3 /* 4 Copyright 2000-2004 The VCF Project. 5 Please see License.txt in the top level directory 6 where you installed the VCF. 7 */ 8 9 10 #include "vcf/ApplicationKit/ApplicationKit.h" 11 12 13 using namespace VCF; 14 1

10-canva绘制数据点

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>10-Canvas绘制数据点</title> 6 <style> 7 *{ 8 margin: 0; 9 padding: 0; 10 } 11 canvas{ 12 display: block; 13 margin: 0

09-canvas绘制坐标系

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>09-Canvas绘制坐标系</title> 6 <style> 7 *{ 8 margin: 0; 9 padding: 0; 10 } 11 canvas{ 12 display: block; 13 margin: 0

11-canvas绘制折线图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>11-Canvas绘制折线图</title> 6 <style> 7 *{ 8 margin: 0; 9 padding: 0; 10 } 11 canvas{ 12 display: block; 13 margin: 0