JZOJ 4807 【NOIP2016提高A组五校联考3】破解

来源:互联网 发布:工业软件的前景 编辑:程序博客网 时间:2024/05/07 21:39

破解

题目大意

这里写图片描述
这里写图片描述

问:

这里写图片描述这里写图片描述

答案对109+7取模

题解

首先做差分。
每一位上的数变为和前面的那个数的异或值。做完差分后的数组每一种不同的情况都对应着原串的每一种不同的情况。
然后每个区间对应的操作只会改变查分数组的两个位置,分别为LiRi+1
对于每个区间,我们把LiRi+1连一条无向边。
考虑连边。
如果一条边连接了两个不同的联通块,那么这个区间选将会导致当前全部方案都变成新的方案,所以此时答案翻倍(乘2)。如果两个点本来就处于同一个联通块内,那么很显然,连了等于没连,对答案没有影响,如此这般把每一条边都连上就可以算出答案了。
连边操作以及联通块的维护可以用并查集。

Code(Pascal)

const    mo=1000000007;var    fa:array[0..300000] of int64;    qq:array[0..300000,1..3] of int64;    qz:array[0..120000,1..2] of int64;    t,y,i,j,k,kk,l,n,m,o:longint;    ans:int64;procedure qsort(l,r:longint);    var        i,j,m:longint;    begin        i:=l;        j:=r;        m:=qq[(l+r) div 2,1];        repeat            while qq[i,1]<m do inc(i);            while qq[j,1]>m do dec(j);            if i<=j then            begin                qq[0]:=qq[i];                qq[i]:=qq[j];                qq[j]:=qq[0];                inc(i);                dec(j);            end;        until i>j;        if l<j then qsort(l,j);        if i<r then qsort(i,r);    end;function gf(o:longint):longint;    begin        if fa[o]=o then exit(o);        fa[o]:=gf(fa[o]);         exit(fa[o]);    end;begin    readln(t);    for y:=1 to t do    begin        o:=0;        readln(n,m);        for i:=1 to m do        begin            readln(qz[i,1],qz[i,2]);            inc(o);            qq[o,1]:=qz[i,1];            qq[o,2]:=i;            qq[o,3]:=1;            inc(o);            qq[o,1]:=qz[i,2]+1;            qq[o,2]:=i;            qq[o,3]:=2;        end;        qsort(1,o);        k:=0;        kk:=0;        for i:=1 to o do        begin            if k<>qq[i,1] then            begin                inc(kk);                k:=qq[i,1];            end;            qz[qq[i,2],qq[i,3]]:=kk;        end;        j:=0;        for i:=1 to kk do        fa[i]:=i;        for i:=1 to m do        if gf(qz[i,1])<>gf(qz[i,2]) then        begin            inc(j);            fa[fa[qz[i,1]]]:=fa[qz[i,2]];        end;        ans:=1;        for i:=1 to j do        ans:=(ans*2) mod mo;        writeln(ans);    end;
2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 11个月宝宝吃盐怎么办 1岁半宝宝长牙慢怎么办 小孩里面的牙黑怎么办 7个半月宝宝便秘怎么办 2个月婴幼儿便秘怎么办 3个月宝宝不消化怎么办 一天大便二三次不消化怎么办 不消化没胃口几天不大便怎么办? 两个月的宝宝拉绿屎怎么办 肠胃不好消化功能差怎么办 2岁宝宝消化不好怎么办 5天新生儿不拉大便怎么办 七个月宝宝一周不拉屎怎么办 七个月的宝宝消化不良怎么办 七个月宝宝消化不良拉肚子怎么办 宝宝六个月了便秘怎么办 宝宝拉水酸臭味怎么办 50天婴儿不拉屎怎么办 六个月宝宝吃米粉便秘怎么办 纯母乳喂养的宝宝便秘了怎么办 换奶粉拉绿色是怎么办 2个月宝宝发烧怎么办 小宝绿色稀大便怎么办 新生儿吃奶粉大便干燥怎么办 婴儿拉绿色奶瓣怎么办 宝宝吃奶粉大便干燥怎么办 婴儿吃奶粉不大便怎么办 孩子喝奶粉拉大便干怎么办 吃奶粉拉不出来怎么办 一岁半宝宝睡觉抱着睡放不下怎么办 3月大婴儿拉奶瓣怎么办 70多天宝宝便秘怎么办 宝宝喝奶粉上火便秘怎么办 a2奶粉吃了便秘怎么办 两个月宝宝两天没有大便怎么办 婴儿一直拉肚子吃药也不好怎么办 吃奶粉的婴儿便秘怎么办 一个多月小狗便便不成形怎么办 3个月宝宝不拉屎怎么办 好几天不拉大便怎么办 20个月宝宝大便干燥怎么办