我是链接

这次是真的惨,码了将近2hours的可持久化线段树炸掉了!

而且本地拍了一万年也没发现哪里炸了。

T1 压位的入门题,话说这道题能拿个99分就可以了(100分要FFT)

对于暴力,就是暴力找所有不相同的i的个数,但是,我们发现对于这种01串的题目可以很舒服的压一下位

比如对于10011,十进制下就是19

而对于01110,十进制下是14

我们发现两个串的不同之处就是满足a[i]^b[i]=1的数对总数

因此我们可以对十进制数也进行xor,即19^14=31,31在二进制下为:11101,恰好满足以上的性质

所以我们可以直接用压位后的十进制数进行xor操作,最后统计这个数中有几个1即可

对于1的个数,可以做以下递推,对于每一个十进制数i,转化为二进制下1的个数为num[i],则

num[i]=num[i>>1]+(i&1)

然后就是压位+暴力找了

CODE

#include<cstdio>
using namespace std;
const int P=16,N=500005,M=1000005;
bool a[N],b[M];
int bl_a[N],bl_b[M],num[(1<<P)+5],n,m,q,p1,p2,len,ans,last;
char ch;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline void write(int x)
{
if (x/10) write(x/10);
putchar(x%10+'0');
}
int main()
{
register int i,j;
//freopen("A.in","r",stdin); freopen("A.out","w",stdout);
ch=tc(); while (ch=='-'||ch=='\n') ch=tc(); while (ch!=' '&&ch!='\n') a[n++]=ch-'0',ch=tc();
ch=tc(); while (ch=='-'||ch=='\n') ch=tc(); while (ch!=' '&&ch!='\n') b[m++]=ch-'0',ch=tc();
for (i=0;i<(1<<P);++i)
num[i]=num[i>>1]+(i&1);
for (i=0;i<n;++i)
for (j=0;j<P;++j)
{
if (i+j>=n) break;
bl_a[i]=(bl_a[i]<<1)|a[i+j];
}
for (i=0;i<m;++i)
for (j=0;j<P;++j)
{
if (i+j>=m) break;
bl_b[i]=(bl_b[i]<<1)|b[i+j];
}
read(q);
while (q--)
{
read(p1); read(p2); read(len);
p2=(p2^last)%(m-len+1);
i=ans=0;
while (i+P<len) ans+=num[bl_a[i+p1]^bl_b[i+p2]],i+=P;
while (i<len) ans+=a[i+p1]^b[i+p2],++i;
write(last=ans); putchar('\n');
}
return 0;
}

T2 考试的时候看了很久没看懂题意

其实理解了题意还是很可做的狗的

标算也比较难,这里放一个爆搜CODE吧

#include<cstdio>
using namespace std;
const int N=100005,mod=100000007;
bool f[N],t[N];
int n,m,a[N][3],ans;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc(); int flag=1;
while (ch<'0'||ch>'9') { if (ch=='-') flag=-1; ch=tc(); }
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
x*=flag;
}
inline bool get(int x)
{
if (x<0) return !f[-x]; else return f[x];
}
inline void check(void)
{
register int i;
for (i=1;i<=n;++i)
{
t[i]=get(a[i][1]);
if (a[i][0]>1) t[i]|=get(a[i][2]);
}
bool res;
for (res=t[1],i=2;i<=n;++i)
res^=t[i];
if (res) ans=ans==mod-1?0:ans+1;
}
inline void DFS(int now)
{
if (now>m) { check(); return; }
f[now]=1; DFS(now+1); f[now]=0; DFS(now+1);
}
int main()
{
register int i,j;
//freopen("B.in","r",stdin); freopen("B.out","w",stdout);
read(n); read(m);
for (i=1;i<=n;++i)
{
read(a[i][0]);
for (j=1;j<=a[i][0];++j)
read(a[i][j]);
}
DFS(1);
printf("%d",ans);
}

T3 这其实并不是一道大力数据结构题

离线操作,对于所有的操作4,从它的返回点向它连一条边,否则从i-1连一条边给它

然后就组成了一棵树,O(n)DFS即可,注意回溯的时候要反向操作

CODE

#include<cstdio>
#include<cstring>
using namespace std;
const int Q=300005,N=1005;
struct edge
{
int to,next;
}e[Q];
struct data
{
int opt,x,y;
bool vis;
}a[Q];
bool map[N][N],tag[N];
int head[Q],ans[Q],num[N],tot,n,m,q,k;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline void write(int x)
{
if (x/10) write(x/10);
putchar(x%10+'0');
}
inline void add(int x,int y)
{
e[++k].to=y; e[k].next=head[x]; head[x]=k;
}
inline void work(int now)
{
if (a[now].opt==1&&!(tag[a[now].x]^map[a[now].x][a[now].y])) map[a[now].x][a[now].y]^=1,++tot,++num[a[now].x],a[now].vis=1;
if (a[now].opt==2&&tag[a[now].x]^map[a[now].x][a[now].y]) map[a[now].x][a[now].y]^=1,--tot,--num[a[now].x],a[now].vis=1;
if (a[now].opt==3) tag[a[now].x]^=1,tot+=m-num[a[now].x]*2,num[a[now].x]=m-num[a[now].x];
}
inline void replay(int now)
{
if (a[now].opt==1&&a[now].vis) map[a[now].x][a[now].y]^=1,--tot,--num[a[now].x];
if (a[now].opt==2&&a[now].vis) map[a[now].x][a[now].y]^=1,++tot,++num[a[now].x];
if (a[now].opt==3) tag[a[now].x]^=1,tot+=m-num[a[now].x]*2,num[a[now].x]=m-num[a[now].x];
}
inline void DFS(int now)
{
work(now);
ans[now]=tot;
for (register int i=head[now];i!=-1;i=e[i].next)
DFS(e[i].to);
replay(now);
}
int main()
{
register int i;
memset(e,-1,sizeof(e));
memset(head,-1,sizeof(head));
//freopen("C.in","r",stdin); freopen("C.out","w",stdout);
read(n); read(m); read(q);
for (i=1;i<=q;++i)
{
read(a[i].opt); read(a[i].x);
if (a[i].opt<=2) read(a[i].y);
if (a[i].opt!=4) add(i-1,i); else add(a[i].x,i);
}
DFS(0);
for (i=1;i<=q;++i)
write(ans[i]),putchar('\n');
return 0;
}

EZ 2018 04 06 NOIP2018 模拟赛(七)的更多相关文章

  1. EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛

    难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...

  2. EZ 2018 04 21 NOIP2018 模拟赛(九)

    终于停止了掉Rating的浪潮! 猥琐的链接 这次200分才Rank10,而且很多人并列 庆幸T2最后20分钟发现期望的算法打错了,然后拿到了50pts,250收场 T1 水题*1 这道题不仅做过,而 ...

  3. EZ 2018 04 13 NOIP2018 模拟赛(八)

    这次的题目都是什么鬼? 玄学乱搞+肉眼看CODE+倒着搜索? 好吧是我ZZ了 链接在此 T1 玄学乱搞 由于考场上写的部分分做法忘记讨论n<=2000时的情况,少得了30pts 很容易得到一个基 ...

  4. EZ 2018 07 06 NOIP模拟赛

    又是慈溪那边给的题目,这次终于没有像上次那样尴尬了, T1拿到了较高的暴力分,T2没写炸,然后T3写了一个优雅的暴力就203pts,Rank3了. 听说其它学校的分数普遍100+,那我们学校还不是强到 ...

  5. EZ 2018 05 26 NOIP2018 模拟赛(十六)

    这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...

  6. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...

  7. EZ 2018 05 13 NOIP2018 模拟赛(十三)

    这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...

  8. EZ 2018 05 01 NOIP2018 模拟赛(十一)

    莫名其妙暴涨Rating 其实题目都挺好挺简单的,但是越简单就越容易ZZ 不理解问什么第一题这么多人找环 不过T2是真心细节题,T3太难了 题目戳这里 T1 仔细分析题意发现那个交换规则就是废话,如果 ...

  9. EZ 2018 04 01 ZJOI2018模拟赛04.01

    现在开始填以前的坑 这次老叶强制我们打一下这次省选题,然后我已经做好了掉Rating到死的准备 然后考完--莫名涨了 Orz 题目链接 由于很多东西我都不会,所以详细请看:dalao的题解 T1 我T ...

随机推荐

  1. 单元测试(四)-隔离框架NSubstitute

    之前学习了单元测试的基础知识,以及桩对象和模拟对象的不同作用.但在实际应用中,往往不会直接手写桩对象或者模拟对象,而是使用隔离框架动态的创建这些对象,这可以让测试变得更简便.快捷,还可以更好地应对复杂 ...

  2. css字体更小 css比12px更小的方法

    <span style="margin-top: 0;-webkit-transform-origin-x: 0;-webkit-transform: scale(0.90);&quo ...

  3. Android--用Valley框架去上传图片

    1.除了用到了Volley,还用到了一个包httpmime(下载地址:http://download.csdn.net/detail/chequer_lkp/8102751) 2.需要一个工具类,该类 ...

  4. win Server 2008 笔记

    1.开启tsmmc 远程登录连接 需要在入站规则中启用一下规则 远程管理(RPC-EPMAP) 远程管理(RPC) 远程管理(RPCNP-IN) 远程管理(TCP-IN) 远程管理 - RemoteF ...

  5. rsync 数据备份+cron+mailx案例

    大家都知道数据非常重要的,需要经常备份,如果备份了,但无法恢复还原,那就证明你备份的很失败,所有当我们备份了数据需要检查是否备份完整,是否可用可恢复.以下为一个企业案例: 某公司里有一台Web服务器, ...

  6. windows系统显示隐藏文件以及显示文件扩展名

    1.XP系统 打开“我的电脑”,“工具”,“文件夹选项” 勾选如下图 2.win7系统 打开“计算机”,“组织”,“文件夹和搜索选项” 勾选如下图 3.win10系统 打开“此电脑”,“查看”,勾选如 ...

  7. FZU Monthly-201901 获奖名单

    FZU Monthly-201901 获奖名单 冠军: S031702338 郑学贵 一等奖: S031702524 罗继鸿 S031702647 黄海东 二等奖: S031702413 韩洪威 S0 ...

  8. beta冲刺————第三天(3/5)

    完善的具体内容: 前端: (1)可以进行修改文字大小背景 其中,金色的文字个人觉得很好看,点赞.(我很满意啊) (2)可以改变成夜间模式(也很不错啊) 后端: 尝试将本地的后端war文件,以及数据库传 ...

  9. Python3编写网络爬虫03-正则表达式的使用

    一.正则表达式(处理字符串强大的工具,有特定的语法结构)功能:实现字符串的检索,替换,匹配验证实例: 地址:http://tool.oschina.net/regex/ #测试文本Hello,my p ...

  10. zepto.js不支持scrollTop的解决办法

    zepto.js不支持animate({ scrollTop: 100},1000); 可以在移动端使用原生window.scrollTop(x,y);简便