picture 1177 poj 线段树+扫描线+离散化

来源:互联网 发布:win10系统反间谍软件 编辑:程序博客网 时间:2024/05/22 14:17

首先说作为一位菜鸟~~虽然编了很多的代码,但是觉得遇到的经典题目不多所以提高很慢,以前听说三本很经典的书,黑书,算法导论,算法之美,于是我选择了最无语的算法导论,不是说算法导论不好,但是作为新手,算法导论就过于理论了,觉得算法导论更加适合做了大量题目之后可以看看,可以增加对算法核心理论的理解。这道题做了一个星期了,做此题的初衷是源于黑书,准备大学内把黑书看完,话说刚做的时候很痛苦,完全找不到思路,于是百度,本不想看源代码,但是实在找不到有大神说明思路,更恨自己不懂离散化和扫描线,其中最难的就是扫描线啦。、

首先线段树,线段树还是很简单的,类似于二叉搜索数,只不过是分了段而已。然后是离散化,为什么要离散化呢?百度百科解释听详细的,因为数据太多或者由于是一个连续的值,如果不离散化,空间压力太大,所以一般最简单的做法就是排序,然后去重。最后是扫描线,理解了半天才明白,首先说明我没看过扫描线的理论,可能扫描线针对不同的情况,方法是不一样的,但是要注意的是任何题目,我觉得扫描线的使用是源于题目中几何在扫描过程中有一个恒定的规律。也许规律很简单就是你找不到而已~~这次仅谈扫描线应用于求矩形周长。

扫描线思路是这样:在扫描的过程中线段树要记录几个值

区间的左右点位置:l,r

区间的总长度:len

区间被覆盖左右节点的情况:rcover,lcover

区间被覆盖的次数:cover

区间内的段数:segnum

区间所包含的线段长度:sum

要说明的是我看代码怎么也没看懂扫描线的原理,然后我是通过数据把线段树更新过程画出来之后发现的,所以下面我会把测试数据结果贴出来,测试数据就为poj的测试数据。

下面是扫描线如何运作了,扫描过程中通过insert更新cover,segnum,sum,虽难理解的是segnu,如果需要理解的话需要根据测试数据画个图就通了。

好像区间[0,10],被[1,2],[4,5]覆盖,那么num=2

好像区间[0,10],[1,4][4,5]覆盖,那么num=1,因为他们刚好连在一起了

好像区间[0,10],[1,5][2,6]覆盖,那么num=1,因为还是连起来的一段

所以有ST[i].segnum=ST[i*2].segnum+ST[i*2+1].segnum-ST[i*2].rcover*ST[i*2+1].lcover;

然后说一下cover,cover在扫描线太重要了!这里的处理很巧妙,因为入边和出边会是相互影响的,如果你入边没被覆盖,出边备覆盖了一点点,这怎么算呢,在扫描线理论中,把入边去掉,由于入边去掉之后,那么sum就会更新为覆盖出边的几个矩形重合部分的长度只和,于是没被覆盖的值就是变化之前的减去变化之后的值。

最后segnum反映的是整体由几个举行,segnum=n,就有n个矩形,所以计算的时候选择*2或者*4

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;


#define MAXN 10010
struct STnode //线段树的节点
{
    int l,r;
    int len;//区间内代表的长度
    int segnum;//区间内被分成的段数,不懂的话再结合代码看看
    int cover;//区间被覆盖的次数
    int sum;//区间中被覆盖的总长度
    bool lcover,rcover;//标记左右端点是否被覆盖,用于合并区间时候统计区间内的离散线段数
    STnode()//初始化
    {
        l = r = 0;
        len = segnum = cover = sum = 0; 
        lcover = rcover = false;
    }
};
STnode ST[MAXN*4];//整棵线段树


struct Line
{


    int st,ed;//竖边的两个y值
    int x;//此条边的x值
    bool InOut;//是否为入边
    bool operator<(Line o) const//重载小于符号 
    {
        return x<o.x;
    }
};




Line Yline[MAXN];//存储竖边
int Index[MAXN];//存储离散后的y值
int cnt=0;
int n;//存储矩形的数目




void Build(int l,int r,int i)//创建线段树
{


    ST[i].l=l;
    ST[i].r=r;
    ST[i].cover=0;
    ST[i].len=Index[r]-Index[l];
    ST[i].segnum=0;
    ST[i].sum=0;
    ST[i].lcover=ST[i].rcover=false;
    //建立线段的时候进行初始化
    if(r-l>1)
    {
        int mid=(l+r)>>1;
        Build(l,mid,i*2);
        Build(mid,r,i*2+1);
    }
}//build之后的线段树l,r为原来index所在的下标,但是线段树记录长度的信息


void GetLen(int i)//求节点包含的线段总长度
{
    if(ST[i].cover>0)
        ST[i].sum=ST[i].len;// 如果这条线断是被覆盖的那么总长度为就为这条线断记录的长度
    else if(ST[i].r-ST[i].l>1)
        ST[i].sum=ST[i*2].sum+ST[i*2+1].sum;//目测这是和计算有覆盖区域有关系的代码【第二次解读】如果ST[i]所在的左右两个下标长度大于一那么线段包的总长度为左右两个节点的线断总长度之合
    else
        ST[i].sum=0;//如果cover长度为0下标长度为1长度和为0?这是为啥?
}


void GetSegNum(int i)//求该区间所包含的线段数总量(就是含有不想交的线段的条数)
{


    if(ST[i].cover>0)
    {
        ST[i].lcover=ST[i].rcover=true;
        ST[i].segnum=1;
    }
    else if(ST[i].r-ST[i].l>1)
    {
        ST[i].lcover=ST[i*2].lcover;
        ST[i].rcover=ST[i*2+1].rcover;
        ST[i].segnum=ST[i*2].segnum+ST[i*2+1].segnum-ST[i*2].rcover*ST[i*2+1].lcover;//这边不太明白segnum-ST[i*2].rcover*ST[i*2+1].lcover这个是和线段有关系?
    }
    else
    {
        ST[i].lcover=ST[i].rcover=false;//距离为1的时候为什么肯定不会被覆盖呢??
        ST[i].segnum=0;//特殊处理下叶子节点,为什么段数一定为一呢?
    }
}




void Insert(int l,int r,int i)//插入一条线段
{
    if(ST[i].l==l&&ST[i].r==r)
        ST[i].cover++;
    else
    {
        int mid=(ST[i].l+ST[i].r)>>1;
        if(r<=mid)
            Insert(l,r,i*2);
        else if(l>=mid)
            Insert(l,r,i*2+1);
        else
        {
            Insert(l,mid,i*2);
            Insert(mid,r,i*2+1);
        }
    }
    GetLen(i);//比较难理解的地方在于getlen又没有递归,怎么就更新了从一的值呢,应该从叶子节点开始吧?
    GetSegNum(i);
}


void Delete(int l,int r,int i)//删除矩形的右边

    if(ST[i].l==l&&ST[i].r==r)
        ST[i].cover--;
    else
    {
        int mid=(ST[i].l+ST[i].r)>>1;
        if(r<=mid)
            Delete(l,r,i*2);
        else if(l>=mid)
            Delete(l,r,i*2+1);
        else
        {
            Delete(l,mid,i*2);
            Delete(mid,r,i*2+1);
        }
    }
    GetLen(i);
    GetSegNum(i);
    //这个后序操作非常精彩!
}




int GetIndex(int x)// 返回x的下标
{
    return lower_bound(Index,Index + cnt,x) - Index;//lower_bound函数返回一个元素在容器中的迭代器,数组可以看成特殊的容器,所以这里返回的迭代器就是指针
}




int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        cnt=0;
        int i,j,k;
        int x1,x2,y1,y2;
        for(i=0;i<n;i++)
        {
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            Yline[i*2].x=x1;
            Yline[i*2+1].x=x2;
            Yline[2*i].st=Yline[2*i+1].st=y1;
            Yline[2*i].ed=Yline[2*i+1].ed=y2;
            Yline[2*i].InOut=true;//标记入边
            Yline[2*i+1].InOut=false;
            Index[2*i]=y1;
            Index[2*i+1]=y2;
        }
        sort(Index,Index+n*2);;//对y进行排序
        sort(Yline,Yline+n*2);//对线段进行排序.排序标准为x
        for(int i=1;i<n*2;i++)//Y数组去重
        {
            if(Index[i]!=Index[i-1])
                Index[cnt++]=Index[i-1];
        }
        Index[cnt++]=Index[2*n-1];//这里很容易错!
        Build(0,cnt-1,1);;//用y建立一个线段树
        int Ans=0;
        int Lsum=0;//上一次记录的长度,画个图很好理解
        for(int i=0;i<2*n-1;i++)
        {
            if(Yline[i].InOut)
                Insert(GetIndex(Yline[i].st),GetIndex(Yline[i].ed),1);//getindex用来记录两个y值的位置
            else
                Delete(GetIndex(Yline[i].st),GetIndex(Yline[i].ed),1);
            //画个图还是很好理解下面这两行的
            Ans+=ST[1].segnum*(Yline[i+1].x-Yline[i].x)*2;
            Ans+=abs(ST[1].sum-Lsum);
            Lsum=ST[1].sum;
        }
        //特殊处理最后一条出边,因为没有下一条竖边了
        Delete(GetIndex(Yline[2*n-1].st),GetIndex(Yline[2*n-1].ed),1);
        Ans+=abs(ST[1].sum-Lsum);
        printf("%d\n",Ans);


    }
    return 0;


}



输出排序后的index值
-6 -4 0 0 4 8 10 10 14 15 16 20 22 
=============================
输出yline值
(-15,0,10)  (-5,8,25)  (0,-6,4)  (2,15,22)  (5,0,10)  (10,15,22)  (15,-4,14)  (16,-6,4)  (20,8,25)  (24,-4,14)  (30,10,20)  (34,0,16)  (36,10,20)  
===================
输出去重的index值
-6 -4 0 4 8 10 14 15 16 20 22 25 
=============================
输出yline对应的坐标值
(-15,2,5,1)  (-5,4,11,1)  (0,0,3,1)  (2,7,10,1)  (5,2,5,0)  (10,7,10,0)  (15,1,6,1)  (16,0,3,0)  (20,4,11,0)  (24,1,6,0)  (30,5,9,1)  (34,2,8,1)  (36,5,9,0)  
===================
输出建立后的线段树
(0,11,31,0,0,0,0,0)
(0,5,16,0,0,0,0,0)
(5,11,15,0,0,0,0,0)
(0,2,6,0,0,0,0,0)
(2,5,10,0,0,0,0,0)
(5,8,6,0,0,0,0,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
=============================
第1次输出值
(0,11,31,1,0,10,0,0)
(0,5,16,1,0,10,0,1)
(5,11,15,0,0,0,0,0)
(0,2,6,0,0,0,0,0)
(2,5,10,1,1,10,1,1)
(5,8,6,0,0,0,0,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=30;ST[1].sum=10; Lsum=10ST[1].segum=1
=============================
第2次输出值
(0,11,31,1,0,25,0,1)
(0,5,16,1,0,10,0,1)
(5,11,15,1,1,15,1,1)
(0,2,6,0,0,0,0,0)
(2,5,10,1,1,10,1,1)
(5,8,6,0,0,0,0,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,1,0,2,0,1)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=55;ST[1].sum=25; Lsum=25ST[1].segum=1
=============================
第3次输出值
(0,11,31,1,0,31,1,1)
(0,5,16,1,0,16,1,1)
(5,11,15,1,1,15,1,1)
(0,2,6,1,1,6,1,1)
(2,5,10,1,1,10,1,1)
(5,8,6,0,0,0,0,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,1,1,4,1,1)
(3,5,6,1,0,2,0,1)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=65;ST[1].sum=31; Lsum=31ST[1].segum=1
=============================
第4次输出值
(0,11,31,1,0,31,1,1)
(0,5,16,1,0,16,1,1)
(5,11,15,1,1,15,1,1)
(0,2,6,1,1,6,1,1)
(2,5,10,1,1,10,1,1)
(5,8,6,1,0,1,0,1)
(8,11,9,1,0,6,1,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,1,1,4,1,1)
(3,5,6,1,0,2,0,1)
(5,6,4,0,0,0,0,0)
(6,8,2,1,0,1,0,1)
(8,9,4,1,1,4,1,1)
(9,11,5,1,0,2,1,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,1,1,1,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,1,1,2,1,1)
(10,11,3,0,0,0,0,0)
Ans=71;ST[1].sum=31; Lsum=31ST[1].segum=1
=============================
第5次输出值
(0,11,31,2,0,27,1,1)
(0,5,16,2,0,12,1,1)
(5,11,15,1,1,15,1,1)
(0,2,6,1,1,6,1,1)
(2,5,10,2,0,6,1,1)
(5,8,6,1,0,1,0,1)
(8,11,9,1,0,6,1,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,1,1,4,1,1)
(3,5,6,1,0,2,0,1)
(5,6,4,0,0,0,0,0)
(6,8,2,1,0,1,0,1)
(8,9,4,1,1,4,1,1)
(9,11,5,1,0,2,1,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,1,1,1,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,1,1,2,1,1)
(10,11,3,0,0,0,0,0)
Ans=95;ST[1].sum=27; Lsum=27ST[1].segum=2
=============================
第6次输出值
(0,11,31,2,0,27,1,1)
(0,5,16,2,0,12,1,1)
(5,11,15,1,1,15,1,1)
(0,2,6,1,1,6,1,1)
(2,5,10,2,0,6,1,1)
(5,8,6,0,0,0,0,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,1,1,4,1,1)
(3,5,6,1,0,2,0,1)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=115;ST[1].sum=27; Lsum=27ST[1].segum=2
=============================
第7次输出值
(0,11,31,1,0,31,1,1)
(0,5,16,1,0,16,1,1)
(5,11,15,1,1,15,1,1)
(0,2,6,1,1,6,1,1)
(2,5,10,1,1,10,1,1)
(5,8,6,1,0,4,1,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,1,1,4,1,1)
(2,3,4,1,1,4,1,1)
(3,5,6,1,0,2,0,1)
(5,6,4,1,1,4,1,1)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=121;ST[1].sum=31; Lsum=31ST[1].segum=1
=============================
第8次输出值
(0,11,31,1,0,29,0,1)
(0,5,16,1,0,14,0,1)
(5,11,15,1,1,15,1,1)
(0,2,6,1,0,4,0,1)
(2,5,10,1,1,10,1,1)
(5,8,6,1,0,4,1,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,1,1,4,1,1)
(2,3,4,0,0,0,0,0)
(3,5,6,1,0,2,0,1)
(5,6,4,1,1,4,1,1)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,1,1,2,1,1)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=131;ST[1].sum=29; Lsum=29ST[1].segum=1
=============================
第9次输出值
(0,11,31,1,0,18,0,0)
(0,5,16,1,0,14,0,1)
(5,11,15,1,0,4,1,0)
(0,2,6,1,0,4,0,1)
(2,5,10,1,1,10,1,1)
(5,8,6,1,0,4,1,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,1,1,4,1,1)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,1,1,4,1,1)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=150;ST[1].sum=18; Lsum=18ST[1].segum=1
=============================
第10次输出值
(0,11,31,0,0,0,0,0)
(0,5,16,0,0,0,0,0)
(5,11,15,0,0,0,0,0)
(0,2,6,0,0,0,0,0)
(2,5,10,0,0,0,0,0)
(5,8,6,0,0,0,0,0)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=168;ST[1].sum=0; Lsum=0ST[1].segum=0
=============================
第11次输出值
(0,11,31,1,0,10,0,0)
(0,5,16,0,0,0,0,0)
(5,11,15,1,0,10,1,0)
(0,2,6,0,0,0,0,0)
(2,5,10,0,0,0,0,0)
(5,8,6,1,1,6,1,1)
(8,11,9,1,0,4,1,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,1,1,4,1,1)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=186;ST[1].sum=10; Lsum=10ST[1].segum=1
=============================
第12次输出值
(0,11,31,1,0,20,0,0)
(0,5,16,1,0,10,0,1)
(5,11,15,1,0,10,1,0)
(0,2,6,0,0,0,0,0)
(2,5,10,1,1,10,1,1)
(5,8,6,1,2,6,1,1)
(8,11,9,1,0,4,1,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,1,1,4,1,1)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=200;ST[1].sum=20; Lsum=20ST[1].segum=1
=============================
第13次输出值
(0,11,31,1,0,16,0,0)
(0,5,16,1,0,10,0,1)
(5,11,15,1,0,6,1,0)
(0,2,6,0,0,0,0,0)
(2,5,10,1,1,10,1,1)
(5,8,6,1,1,6,1,1)
(8,11,9,0,0,0,0,0)
(0,1,2,0,0,0,0,0)
(1,2,4,0,0,0,0,0)
(2,3,4,0,0,0,0,0)
(3,5,6,0,0,0,0,0)
(5,6,4,0,0,0,0,0)
(6,8,2,0,0,0,0,0)
(8,9,4,0,0,0,0,0)
(9,11,5,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(3,4,4,0,0,0,0,0)
(4,5,2,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(6,7,1,0,0,0,0,0)
(7,8,1,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(0,0,0,0,0,0,0,0)
(9,10,2,0,0,0,0,0)
(10,11,3,0,0,0,0,0)
Ans=212;ST[1].sum=16; Lsum=16ST[1].segum=1
=============================


原创粉丝点击