学军中学第三届“图灵杯”趣味网络邀请赛——中级T4.欧拉回路 (图论,哈希)
题面
7
5 6 7 1 2 3 3

13

5
30 50 10 30 70

8

题解
存在欧拉回路的条件是:1. 每个点的度数都是偶数。2. 有边的连通块最多一个。
数据范围是允许我们
n
2
n^2
n2 枚举的,因此我们看怎么均摊
O
(
1
)
O(1)
O(1) 解决上面的两个判断。
首先,每个点的度数都是偶数。我们预处理两个 0/1 数组,
p
r
e
[
i
]
[
j
]
pre[i][j]
pre[i][j] 表示只考虑前
i
i
i 个数,第
j
j
j 个数向后连边个数取模 2 的结果,
s
u
f
[
i
]
[
j
]
suf[i][j]
suf[i][j] 表示只考虑后
n
−
i
+
1
n-i+1
n−i+1 个数,第
j
j
j 个数向前连边个数取模 2 的结果。
这两个数组都可以
O
(
n
2
)
O(n^2)
O(n2) 预处理出来,用 bitset 可以省点空间。然后,一个区间
[
l
,
r
]
[l,r]
[l,r] 满足度数需求,当且仅当数列
p
r
e
[
r
]
pre[r]
pre[r] 异或数列
s
u
f
[
l
]
suf[l]
suf[l] 后,
[
l
,
r
]
[l,r]
[l,r] 以内全为 0 。异或后为 0,等价于相等。因此我们分别把
p
r
e
[
r
]
pre[r]
pre[r] 和
s
u
f
[
l
]
suf[l]
suf[l] 的
[
l
,
r
]
[l,r]
[l,r] 区间子序列哈希下来,
O
(
1
)
O(1)
O(1) 比较。安排一下枚举顺序,处理全部可以达到
O
(
n
2
)
O(n^2)
O(n2) 。
第二个条件,不太好办。但是我们可以发现一个规律:
- 只要存在两条边
a
−
c
,
b
−
d
a-c~,~b-d
a−c , b−d ,且满足
a
<
b
<
c
<
d
a<b<c<d
a<b<c<d ,那么
a
,
b
,
c
,
d
a,b,c,d
a,b,c,d 一定是连通的。
证明很简单,归纳
b
b
b 和
c
c
c 数字的大小关系,会发现不论如何
a
−
b
a-b
a−b 和
b
−
c
b-c
b−c 中有至少一条边存在。
所以,一段区间
[
l
,
r
]
[l,r]
[l,r] 不满足第二个条件,当且仅当存在一个分界点
i
∈
[
l
,
r
)
i\in [l,r)
i∈[l,r) ,满足点
i
i
i 前面有边,后面有边,但没有边跨过
i
i
i 和
i
+
1
i+1
i+1 的中间线。
我们固定左端点,右端点往右枚举,大力讨论,维护最靠左的一个最大区间
[
L
,
R
]
⊆
[
l
,
r
]
[L,R]\sube [l,r]
[L,R]⊆[l,r] ,满足
[
L
,
R
]
[L,R]
[L,R] 以内都是分界点(暂假设后面都有边)。我们得提前处理出
p
t
[
i
]
[
j
]
pt[i][j]
pt[i][j] ,表示
[
j
,
i
)
[j,i)
[j,i) 以内最靠左的位置,满足与
i
i
i 有边相连,没有则为
+
∞
+\infty
+∞。这个可以
O
(
n
2
)
O(n^2)
O(n2) 预处理。
维护
[
L
,
R
]
[L,R]
[L,R] 讨论如下:当枚举到
r
r
r 时,令
l
f
=
p
t
[
r
]
[
l
]
lf=pt[r][l]
lf=pt[r][l]
- l
f
>
r
lf>r
lf>r ,若区间为空,且前面出现过边,则赋值
[
L
,
R
]
:
=
[
r
−
1
,
r
]
[L,R]:=[r-1,r]
[L,R]:=[r−1,r],否则如果
R
=
r
−
1
R=r-1
R=r−1 ,则
R
:
=
R
+
1
R:=R+1
R:=R+1 。
- l
f
<
r
lf<r
lf<r ,将右端点
R
R
R 尽量左移,
R
:
=
min
(
R
,
l
f
−
1
)
R:=\min(R,lf-1)
R:=min(R,lf−1) ,此时若
L
>
R
L>R
L>R(即区间为空),则赋值
[
L
,
R
]
:
=
[
r
,
r
]
[L,R]:=[r,r]
[L,R]:=[r,r] 。
如果
[
L
,
R
]
[L,R]
[L,R] 为空,或者
R
=
r
R=r
R=r ,则子序列
[
l
,
r
]
[l,r]
[l,r] 满足第二个条件。时间复杂度
O
(
n
2
)
O(n^2)
O(n2) 。
CODE
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<ctime>
#include<queue>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 8005
#define LL long long
#define DB double
#define ENDL putchar('\n')
#define lowbit(x) (-(x) & (x))
#define FI first
#define SE second
#define SI(x) set<x>::iterator
#define BI bitset<MAXN>
#define eps (1e-9)
LL read() {
LL f=1,x=0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f*x;
}
void putpos(LL x) {
if(!x) return ;
putpos(x/10); putchar('0'+(x%10));
}
void putnum(LL x) {
if(!x) putchar('0');
else if(x < 0) putchar('-'),putpos(-x);
else putpos(x);
}
const int MOD = 998344353;
const int bt = 23;
int n,m,s,o,k;
int a[MAXN];
BI pre[MAXN],suf[MAXN],f1[MAXN];
int pt[MAXN][MAXN];
int hs[MAXN],po[MAXN];
int main() {
n = read();
po[0] = 1;
for(int i = 1;i <= n;i ++) {
a[i] = read();
po[i] = po[i-1] *1ll* bt % MOD;
}
for(int i = 1;i <= n;i ++) {
pt[i][i+1] = n+2;
for(int j = i;j > 0;j --) {
pt[i][j] = pt[i][j+1];
if(a[j] < a[i]) pt[i][j] = j,pre[i][j] = 1;
}
pre[i] ^= pre[i-1];
}
for(int i = n;i > 0;i --) {
for(int j = i;j <= n;j ++) {
if(a[j] > a[i]) {
suf[i][j] = 1;
}
hs[j] = (hs[j] *1ll* bt % MOD + (int)pre[j][i]+2) % MOD;
}
suf[i] ^= suf[i+1];
int has = 0;
for(int j = i;j <= n;j ++) {
(has += ((int)suf[i][j]+2) *1ll* po[j-i] % MOD) %= MOD;
if(has == hs[j]) f1[i][j] = 1;
}
}
int ans = 0;
for(int i = 1;i <= n;i ++) {
int l = n+3,r = n+2;
for(int j = i;j <= n;j ++) {
int lf = pt[j][i];
if(lf > j) {
if(l > r || (l == i-1 && r != j-1)) l = j-1,r = j;
else if(r == j-1) r = j;
}
else {
r = min(r,lf-1);
if(l > r || l == i-1) l = r = j;
}
if(l > r || r == j || l < i) {
ans += (int)f1[i][j];
}
}
}
printf("%d\n",ans);
return 0;
}
后记
好家伙,居然是普及组比赛

3:18:51 过 T3,我还有救吗
学军中学第三届“图灵杯”趣味网络邀请赛——中级T4.欧拉回路 (图论,哈希)的更多相关文章
- NOIP2018学军中学游记(11.09~11.11)
前言 这篇博客记录的是我在\(NOIP2018\)提高组比赛中的经历. 这一次的\(NOIP\)是在学军中学举办的, 莫名感到一阵慌张. 但愿能有一个好成绩,不然就要\(AFO\)了... ... 说 ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作
[从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 目录 [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 0x00 摘要 0x01 业务领域 1.1 SOFARegis ...
- 给大一的学弟学妹们培训java web的后台开发讨论班计划
蓝旭工作室5月大一讨论班课程计划 课时 讨论班性质 讨论班名称 主要内容 主讲人 第一讲 先导课 后台开发工具的使用与MySQL数据库基础 后台开发工具的基本使用方法与工程的创建,MySQL数 ...
- Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)A蔡老板的会议
题目描述 图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会.综合楼有N (1<=N<=1000)间办公室,编号1~N每个办公室有一个部长在工(mo)作(yu),其中X号是蔡老板的办 ...
- 第三届蓝桥杯 c/c++真题
第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...
- 11th 回忆整个学期——告学弟学妹
告诉后来的学弟学妹,不要因为艰难而却步,坚持下去才知道,山的对面是什么.很多东西或许一开始看起来是无用,甚至无意义的,但是努力去做,你才知道价值所在.不要等一切结束了,才懂得自己错过了什么.
- 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈
2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&源码
Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...
随机推荐
- CabloyJS的微信API对接模块:当前支持微信公众号和微信小程序
Cabloy-微信是什么 Cabloy-微信是基于CabloyJS全栈业务开发框架开发的微信接口模块,当前整合了微信公众号和微信小程序的接口,达到开箱即用的使用效果.在Cabloy-微信的基础上,可以 ...
- MAUI模板项目闪退问题
MAUI模板项目闪退问题 在MAUI最初发布的时候就曾创建过几个模板项目进行体验过,没遇到什么坑.由于最近需要开发针对餐饮行业的收银机(安卓系统)开发一款应用,这种收银机一般配置不咋滴,系统版本和性能 ...
- CSCMS代码审计
很久之前审的了. 文章首发于奇安信攻防社区 https://forum.butian.net/share/1626 0x00 前言 CSCMS是一款强大的多功能内容管理系统,采用php5+mysql进 ...
- Sublime Text 新建代码片段(图解)
新建代码片段 1.打开NEW Snippet- 2.编辑代码片段 3.设置快捷键,按tab键执行 更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_4451949 ...
- 关于个人全栈项目【臻美IT】博客类出现的问题以及解决方法
每做一个项目,要记得写下心得哦,别偷懒啊!先上网址:https://www.maomin.club/ 这个项目属于博客类的,因为百度审核的问题就大体做了下,就当来练练手,里面文章链接的是CSDN的博客 ...
- 合宙Air32F103CBT6开发板上手报告
2022年6月初合宙新上市了 Air32F103 系列 MCU, 市面上 STM32F103 的克隆军队又增加了新的一员. 这次不知道是哪家的贴牌, 分 Air32F103CBT6 和 Air32F1 ...
- linux函数与数组
1. 函数的定义 方法1: function_name () { statement } 方法2: function function_name () { statement } --先定义后使用 例 ...
- 几百行代码实现一个 JSON 解析器
前言 之前在写 gscript时我就在想有没有利用编译原理实现一个更实际工具?毕竟真写一个语言的难度不低,并且也很难真的应用起来. 一次无意间看到有人提起 JSON 解析器,这类工具充斥着我们的日常开 ...
- 图文带你看懂JavaScritpt引擎V8与JS执行过程
浏览器原理 浏览器内核与js引擎 浏览器内核又称"排版引擎","渲染引擎","浏览器引擎",叫法很多,简单来说干的活就是将代码(HTML,X ...
- 让你的Nginx支持分布式追踪
Background NGINX 是一个通用且流行的应用程序.也是最流行的 Web 服务器,它可用于提供静态文件内容,但也通常与其他服务一起用作分布式系统中的组件,在其中它用作反向代理.负载均衡 或 ...
