题目链接  校赛签到

对每个操作之间建立关系。

比较正常的是前$3$种操作,若第$i$个操作属于前$3$种,那么就从操作$i-1$向$i$连一条有向边。

比较特殊的是第$4$种操作,若第$i$个操作属于第$4$种这个时候我们需要从操作$k$向操作$i$连一条有向边。

那么一共有$q+1$个结点,$q$条边,很明显是一个树的结构。$0$号点为根结点。

那么从根结点出发,依次操作就可以了~,遇到操作$3$则打标记

我太懒  用bitset + fread挂过去了。

时间复杂度$O(\frac{mq}{w})$

#include <bits/stdc++.h>

namespace IO{
const int MT = 30 * 1024 * 1024;
char IO_BUF[MT];
int IO_PTR, IO_SZ; void begin(){
IO_PTR = 0;
IO_SZ = fread (IO_BUF, 1, MT, stdin);
}
template<typename T>
inline bool scan_d (T & t){
while (IO_PTR < IO_SZ && IO_BUF[IO_PTR] != '-' && (IO_BUF[IO_PTR] < '0' || IO_BUF[IO_PTR] > '9'))IO_PTR ++;
if (IO_PTR >= IO_SZ) return false;
bool sgn = false;
if (IO_BUF[IO_PTR] == '-') sgn = true, IO_PTR ++;
for (t = 0; IO_PTR < IO_SZ && '0' <= IO_BUF[IO_PTR] && IO_BUF[IO_PTR] <= '9'; IO_PTR ++)
t = t * 10 + IO_BUF[IO_PTR] - '0';
if (sgn) t = -t;
return true; }
}; using namespace std;
using namespace IO; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N = 2e5 + 4;
const int Q = 1e3 + 2;
const LL mod = 100624; vector <int> v[N]; LL p[N]; struct node{ int ty, x, y, z; } op[N]; int T;
int ret[N];
int n, m, q;
int c[N]; bitset <Q> a[Q]; inline int calc(int x){ return (a[x] >> 1).count() - (a[x] >> (m + 1)).count(); } void dfs(int x, int cnt){
ret[x] = cnt;
for (auto u : v[x]){
if (op[u].ty == 1){
int nx = op[u].x, ny = op[u].y, nz = op[u].z;
if (c[nx] == 0){
int z = a[nx][ny], num = calc(nx);
a[nx][ny] = nz;
dfs(u, cnt + calc(nx) - num);
a[nx][ny] = z;
} else{
int z = a[nx][m - ny + 1], num = calc(nx);
a[nx][m - ny + 1] = nz;
dfs(u, cnt + calc(nx) - num);
a[nx][m - ny + 1] = z;
}
} else if (op[u].ty == 2){
int nx = op[u].x;
int num = calc(nx);
a[nx].flip();
dfs(u, cnt + calc(nx) - num);
a[nx].flip();
} else if (op[u].ty == 3){
int nx = op[u].x;
c[nx] ^= 1;
dfs(u, cnt);
c[nx] ^= 1;
} else dfs(u, cnt);
}
} int main(){ begin(); p[0] = 1; rep(i, 1, 2e5 + 1) p[i] = p[i - 1] * 813ll % mod; scan_d(T);
while (T--){
scan_d(n);
scan_d(m);
scan_d(q);
rep(i, 0, q + 1) v[i].clear();
rep(i, 0, n + 1) a[i].reset(); rep(i, 1, q){
int et; scan_d(et);
if (et == 1){
v[i - 1].push_back(i);
int x, y, z;
scan_d(x); scan_d(y); scan_d(z);
op[i].ty = 1;
op[i].x = x;
op[i].y = y;
op[i].z = z;
} else if (et == 2){
v[i - 1].push_back(i);
int x;
scan_d(x);
op[i].ty = 2;
op[i].x = x;
} else if (et == 3){
v[i - 1].push_back(i);
int x;
scan_d(x);
op[i].ty = 3;
op[i].x = x;
} else{
int x;
scan_d(x);
v[x].push_back(i);
op[i].ty = 4;
}
} dfs(0, 0);
LL ans = 0;
rep(i, 1, q) ans = (ans + ret[i] * p[i] % mod) % mod;
printf("%lld\n", ans);
} return 0;
}

  

第十三届北航程序设计竞赛决赛网络同步赛 B题 校赛签到(建树 + 打标记)的更多相关文章

  1. 第十二届北航程序设计竞赛决赛网络同步赛 B题 前前前世(数论推导 + DP)

    题目链接  2016 BUAA-Final Problem B 考虑一对可行的点$(x, y)$ 根据题意,设$x = ak + 1,y = bk + 1$ 又因为$x$是$y$的祖先的祖先的祖先,所 ...

  2. 第十二届北航程序设计竞赛决赛网络同步赛 J题 两点之间

    题目链接  Problem J 这道题思路还是很直观的,但是有两个难点: 1.题目中说$1<=NM<=10^{6}$,但没具体说明$N$和$M$的值,也就是可能出现: $N = 1, M ...

  3. B P5 第十三届北航程序设计竞赛预赛

    https://buaacoding.cn/contest-ng/index.html#/188/problems 其实这题挺简单的. 注意到答案的大小最多是22 二分,check长度是mid的不同子 ...

  4. A. Srdce and Triangle--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)

    如下图这是“今日头条杯”首届湖北省大学程序设计竞赛的第一题,作为赛后补题 题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 Let  be a regualr tr ...

  5. 《内蒙古自治区第十三届大学生程序设计竞赛试题_H 公孙玉龙》

    这个题有点小坑,最坑的地方就是  输入的b 变量  有可能 是  负数  !   负数 !  负数!    对 ,你没有看错,就是负数,坑死我了, 一直都是  content.charAt(0) 判断 ...

  6. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 A noj 2073 FFF [ 二分图最大权匹配 || 最大费用最大流 ]

    传送门 FFF 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 145            测试通过 : 13 ...

  7. 2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)

    D题:小z与他的袜子 描述 小z每天会穿一双新袜子. 开始他的衣柜里有n双袜子,袜子会从1-n进行编号.每天早上他都会从衣柜里拿编号最小的袜子来穿.每天晚上他会把今天穿的袜子扔进篮子里,如果篮子里有n ...

  8. “今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛 )--E. DoveCCL and Resistance

    题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 链接:https://www.nowcoder.com/acm/contest/104/D来源:牛客网 题目描述 ...

  9. I. Five Day Couple--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)

    题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 链接:https://www.nowcoder.com/acm/contest/104/H来源:牛客网 题目描述 ...

随机推荐

  1. Android如何添加多张引导页

    摘要:项目需要添加多张引导页,所以在网上搜集了一些资料并整理好. Step1 添加一个GuideActivity. 其实这个引导页无非就是一个Activity,里面有一个ViewPager而已.多张图 ...

  2. 慢慢琢磨JVM

    1 JVM简介 JVM是一个Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibe ...

  3. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  4. 谋哥:转型之痒与App推广之痛

    昨天<重庆今日教育>的副主编汪熙坤老师先加我微信,谋哥的微信每天有几十个不同领域的朋友加.几句客套后,他马上就直奔主题了.为什么这么着急呢?是因为危机感,是因为感受到了互联网给传统纸媒带来 ...

  5. php代码审计 strcmp和MD5函数漏洞

    通过get得到三个值,v1,v2,v3. if第一层判断,v1和v2得到的值不一样,但是对它们进行md5加密后的值得相等. if第二层判断,v3得到的值得和$flag的值相等,满足这两个条件输出fla ...

  6. Python-S9——Day83-ORM项目实战

    01 上节回顾 02 后台管理布局 03 按钮权限控制的简单形式 04 修改表结构 05 重构数据结构 06 限制权限颗粒度 01 上节回顾 1.1 项目的组织架构: 1.2 项目组件的版本说明: 使 ...

  7. Python学习-day14-CSS

    前端二:CSS   CSS: 一:介绍:学名层叠样式表(Cading Style Sheets)是一种用来表现HTML或者XML等文件的样式的计算机语言.让HTML和XML看起来更加美观. 语法:&l ...

  8. CSU-2221 假装是区间众数(ST表模版题)

    题目链接 题目 Description 给定一个非递减数列Ai,你只需要支持一个操作:求一段区间内出现最多的数字的出现次数. Input 第一行两个整数N,Q 接下来一行有N个整数,表示这个序列. 接 ...

  9. winform DataGridView添加合计行

    使用方法 /* DataTable dt= DBUtility.DB.FromSql(sql).ToDataTable(); DataGridViewAddSumRow sumRow = new Da ...

  10. [ecmagnet][python基础]有关git那些事

    #1 git教程 # 注册git服务器用户,权限-- 注意这个和客户端用户不是一样 # 客户端(linux)提交代码到本地仓库(简单版,了解原理) a.安装git sudo apt-get insta ...