H Z 游 记
Day -inf ~ Day -1
各种模你赛
各种暴毙
死的过程太惨,略
Day 1
某巨佬说过,日期没有第零天
十点五十火车开,十点半我才到/kk
路上追番,《约定的梦幻岛》好评
MTR睡得真香
下午到了衡水,直接开始上课《网络流》。。。
吃饭居然餐具自备……
坑了WCR怒刷50元整/kk
晚上
写。挂。调。烦。睡。
Day 2
早上调dinic,发现tot忘赋初始值了。。。
YS:“ZJJ为什么你随时都在笑啊”
中午:
“要不去小卖铺转转?”
two hours later……
“我*他****,怎么热成个****,******"
下午调dinic,发现加边写挂了。。。
预言:晚上调dinic,发现???
写了两道题就一直颓废,期间YS巨佬刷了2147483647道题。
小游戏与ypj的笑脸,永远一起出现 & & 永远一起消失……
Day 3
上午:构造
思维性强,可能是接下来几天唯一能听懂的
听懂了以后就有 ” 水黑 “ 可做了~~
(心声:怎么还不到吃饭时间啊,都颓废得想颓废了)
去恰饭。。。
没带饭卡,明天请YS吃午饭
晚:树形DP:
没有广播的快乐(
痛苦的回忆:《小胖守皇宫》
Day 4
忘了是day 几
spadeA261:“你可以写《Day ?》啊~~~”
Day ?
继续开始模拟赛暴毙
惨挂,T1少考虑半种情况,挂成10 pts ……
T2数据精心构造,放过了没读题就乱搞的大暴力。
(小样例没过,得分 30 pts)
众所周知,每题得分与做题时间成反比
顺一嘴,T2神题:分层图同余最短路
Day ?+1
终于有一天是赛后AK的了。。。
三道题两道都是玄学
T1:各种各样奇奇怪怪的算法都能获得 70~80  pts……
考场写的\(n ^{2} \ log\ n\),估分60~100,实际35……读错题了……出分后1分钟改成75……
T3:奇奇怪怪的不加任何优化的暴力,通过随机数列性质直接就可以A掉……加了个排序反而挂(?)成70……
T2:考场暴搜……一看排行榜人均20……
关于正解:
T1:\(meet \ in \ the \ middle\)
简直是模拟赛的宠儿……
\(2^{\frac{n}{2}}\)枚举并计算左子集,将(并不为零的)两两的差存入map 。
再来一个 \(2^{\frac{n}{2}}\) 枚举右子集,和左边的map配对即可。
记得加 vis 标记子集的并,重复的只算一次。
T2:题意转化很关键……
转化为DAG上拓扑序计数
但千万别往图论上想
直接简单DP即可,\(f _{i,j}\)表示前i个数,第i个数在前i个数中是第j小的。前缀和优化为 \(O(n^{2})\) 。
T3:\(random\_shuffle\)。。。拼阳寿。。。
Day ?+2
日常暴毙
好吧今天暴的更惨
T1 忘了 \(ans+1\) ,考场包另,赛后 \(1min\) 45pts。。。
T2 当你在考场上直接看出了正解,却发现不会正解的板子
于是水了个 \(bitset\) ,打算骗分跑路
但是懒得卡常
于是27pts。。。
考后一看我的测评记录:有输出,但没输出完就TLE了
于是cout    ->    printf
于是27pts  -> 45pts
T3属实降智,入门级部分分直接送掉。。。
整场比赛,算上失智的分,一共挂了80
整整80分啊啊啊
Day ?+3
time : 21:32
状态:困死
T1:二分。函虽单峰,零决策优于前段决策。因此只需后段二分。
T2:dfs序。卡线段树。用区修单查的树数。
T3:类扫描线。枚左右。为去重,算贡时统计纵轴段段之间贡。
总结:我困死了,睁不开眼。
晚安。
Day ?+4
四个小时四道题……
心路历程:
开题。
看T1:显然是大贪心。放着完了再搞。
看T2:哇50分好香,一下就推出了 \(k=1\) 的杨辉三角。。。
看T3:弃。
看T4:觉得是扫描线裸题……
此时过去 \(1h\) ……
搞出了 \(T2\) 的暴力加组合数,然后发现模数不保证质数,写了个 \(n^2\) 递推……
然后发现已经过了 \(2h\) ,心态爆炸。
准备一个小时搞 \(T4\) ,一个小时搞 \(T1\) 。
没想到T4半个小时就弄出来了……
然后觉得手感爆棚,可能会翻盘
至此预估上 \(200pts\) 。
然后一个半小时搞T1贪心
本来极为精妙的一个想法,渐渐的成为了一个长达 \(3.3k\)  的宏篇巨制……
主要是最后 \(10min\) 发现贪错了。
然后觉得裂开。
出分:
T4挂成 \(10pts\) 。
T1有 \(60\) ,并不是很惨(不过据老们纷纷AC)……
T2 \(50pts\) 总算没有挂。
T3 果断 \(0pts\)。
rk8……
可能大家都有挂分吧,我可能已经拿到了能力范围内的所有分数。
贪心,错了就是错了。
扫描线,不会写就是不会写。
题解:
(被T4卡住的盆友萌!!!这篇绝对好写!!!)
大体思路和 ycx&wcr 据老一致……
只不过好写一万倍。
不用push_down!!!只有两个标记!!!
- cv(cover):当前线段树结点被 整个 覆盖过多少次
 - cl(color):当前结点被 整个 覆盖的颜色
 
把扫描线转化为三个基础问题求解:
- \(ask\),查找联通块并连边
 - \(add\)
 - \(del\)
 
关键在于一个 \(ask\) 函数:
因为只要询问区间与当前被覆盖的区间 有交集 就可以连边(而一般线段树回溯条件是当前区间是询问区间的 子集 )
所以就可以不用下传cover标记,因为 和大区间相交 等价于 与大区间的某子区间 相交。
具体看代码。
离散化是白给,请读者自行略过。
code
#include<bits/stdc++.h>
#define int LL
#define LL long long
using namespace std;
const int N=100005;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int n,cnt1,cnt2,qcnt,rcnt,ccnt,ro,co,cnt,ans;
int r1[N],r2[N],c1[N],c2[N];
int r[N<<1],c[N<<1];
int fa[N],vis[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
#define rt 1,1,co+1
#define ls pos<<1,l,mid
#define rs pos<<1|1,mid+1,r
#define mid ((l+r)>>1)
int sum[N<<2],lz[N<<2],cl[N<<2],cv[N<<2];
void add(int pos,int l,int r,int ll,int rr,int num){
	if(ll>r||rr<l)return;
	if(ll<=l&&r<=rr){
		cv[pos]++;
		cl[pos]=num;
		return;
	}
	add(ls,ll,rr,num);add(rs,ll,rr,num);
}
void ask(int pos,int l,int r,int ll,int rr,int &num){
	if(ll>r||rr<l)return;
	if(cv[pos]){
		fa[num]=find(cl[pos]);
		num=fa[num];
		return;
	}
	if(l==r)return;
	ask(ls,ll,rr,num);ask(rs,ll,rr,num);
}
void del(int pos,int l,int r,int ll,int rr){
	if(ll>r||rr<l)return;
	if(ll<=l&&r<=rr&&cv[pos]){
		cv[pos]--;
		if(cv[pos]==0)cl[pos]=0;
		return;
	}
	del(ls,ll,rr);del(rs,ll,rr);
}
struct Q{
	int plc,op,l,r;
}q[N<<1];
bool ccc(Q a,Q b){
	if(a.plc==b.plc){
		if(a.op==1)return 1;
		else return 0;
	}
	return a.plc<b.plc;
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++){
		r[++rcnt]=r1[i]=read();c[++ccnt]=c1[i]=read();r[++rcnt]=r2[i]=read();c[++ccnt]=c2[i]=read();
	}
	sort(r+1,r+1+rcnt);sort(c+1,c+1+ccnt);
	ro=unique(r+1,r+1+rcnt)-r-1;co=unique(c+1,c+1+ccnt)-c-1;
	for(int i=1;i<=n;i++){
		r1[i]=lower_bound(r+1,r+1+ro,r1[i])-r;
		r2[i]=lower_bound(r+1,r+1+ro,r2[i])-r;
		c1[i]=lower_bound(c+1,c+1+co,c1[i])-c;
		c2[i]=lower_bound(c+1,c+1+co,c2[i])-c;
		q[++qcnt].plc=r1[i];
		q[qcnt].op=1;
		q[qcnt].l=c1[i];
		q[qcnt].r=c2[i];
		q[++qcnt].plc=r2[i];
		q[qcnt].op=0;
		q[qcnt].l=c1[i];
		q[qcnt].r=c2[i];
	}
	sort(q+1,q+1+qcnt,ccc);
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	for(int i=1;i<=qcnt;i++){
		int op=q[i].op,ll=q[i].l,rr=q[i].r;
		if(op){
			int num=++cnt;
			ask(rt,ll,rr,num);
			add(rt,ll,rr,num);
		}else{
			del(rt,ll,rr);
		}
	}
	for(int i=1;i<=cnt;i++){
		if(!vis[find(i)]){
			ans++;
			vis[find(i)]=1;
		}
	}
	cout<<ans<<endl;
	return 0;
}
晚上:
众望所归之下,终于迎来了颓废时间!!!!!!!!!!!!!!!!!!!!!!!
许久未见tarraria,再见时仿佛已经历了岁月的轮回。但却是如此熟悉的亲切……
许久未见hollow knight,再见是仿佛……
kao,还说什么说,操起键盘干就完事!!!
入坑星际II。
8、11
考场怒送60分。
\(T1\) max 初始值 && long long 80pts -> 20pts。。。
想起前几天一件事,忘了Day ?了……
episode 1:
wcr滑稽地走过来 : “zjj,写道《游戏》不?二项式繁衍。”
我 : “o。”
(打开洛谷,搜索“游戏”)
我(回头大喊):“WCR!哪个游戏了!!”
cyh经过,笑:“要颓也小声点……”
我:(无辜)“不是不是,我是说哪道题……”
episode 2:
wcr滑稽地走过来 : “zjj,游戏写完没~”
我 : (故作高深地)“wcr,我跟你讲,”
“我这个游戏啊,从\(20\%\)完成度到\(100\%\)完成度,就只加了一个 \(Mod\) 。 ”
指:从 \(\color{red}{WA\ 20pts}\) 到 \(\color{green}{AC\ 100pts}\) ,只多写了一句%=mod
8/12
阳寿爆棚,怒拿 \(rk5\)
不过分数是 \(rk1\) 的\(\frac{1}{2}\) ……
考场
开题迟到。
又是四题同堂……
看T1:哦,数学题,再见。
看T2:哦,原题。
!!!???原题???!!!直接闭眼一通乱打搞上了队长快跑的未优化版。
轻松过掉小样例。
大样例就挂了。
调了半年,一读题: 任意顺序 。
再次崩掉,打了个 \(random\_shuffle\) 跑路(后来竟然有十分)
看T3:哦,原题。
!!!???又是原题???!!!
当年邓姐姐(还是G_keng?)讲的。
忘了一部分,一看题稍稍一想就弄懂了。
于是就切了。
看T4:应该不难。推了推,发现如果把“$”看做隔板,每一段区间都是确定的两种情况。
所以我们就有了一个 \(O(2^{n})\) 的做法。
所以我们考虑预处理加分别判断的形式 \(O(n)\) 处理。
然后写着写着不会了,就写了 \(O(n^2)\) 。。。
另,为了卡常,把 \(cin\) 改成了 \(read()\) 和 \(getchar()\),又调了 \(10 min\) 。
然后搞T1,忘了 恶心gcd exgcd 怎么写。
考虑 \(n^2\) 求扩欧。 为什么会有人考虑这玩意儿
出分。
\(160pts\)
T4 直接抱灵!!!
一看,输入挂了。复制下来测试点,本地是对的。
离谱,测试点里有空行。。。
把cin版代码一交,果然 \(65pts\) 。
T3切了。T1 \(50pts\)。T2 骗了十分。
。。。。。要是没有原题,直接炸开了好吧。。。。。。
而且T4是真的有毒。。。
下午改题倒是很轻松,主要还是因为有网。
有网才会有心情改题嘛。。。
然后发现 B站 上不去。百度图片也上不去(好像前几天还可以)。
求问读到这里的HZ据老:
封网是从多会开始的……
又困了,沽。
8、13?~8、15
三场模拟赛,懒得详细说,瞎写一些东西吧
这两天改题状态很差。\(\color{white}{主要是太颓了23333}\)
也许这两天模拟赛稍有进步?但是这不能说明实力上有了多大的长进。
码力还是不行,多刷刷数据结构题练手。
至于思路,也许确实拓宽了许多,不过还是要见更多的题。
更何况有的时候可以拿码力硬换思维题。。。可是我做不到啊。。。
8、16&&8、17
状态越来越差了。。。
完全不想改题,考试的时候还啥都不会。。。
可能是变懒了吧。。。
希望心情好的时候能高效地改题,低效的时候能干点啥也不好说。。。只要不被gan就好吧。。。
传说中的呼吸回血
8、18
WCR出品的3A大作
历时四个小时良心打造
《双人对战五子棋》,等你来玩!
8、21
吃麻辣烫。
差点吃不了,多亏了“正好下饭”的jc ~~~ :)
关于T2《蛇》的样例点:

zjjjjjjzzjjjjjjzzzzzzzzzjjjjjzzzzzzjjjzzzjjjzzjjzzjjjzzzzjzzzzzjjjjzzjjjjj
不愧是我
8、22
分块和莫队和tetris的一天。
根号算法,不愧是“优雅的暴力”
众所周知,一份暴力可以调一下午
颓,不想改题……
记得luogu上有个帖子,说颓的不行能干点啥
回答有一个是“学习新算法”
嗯,算是把这段时间充分地浪费了……
8、23
发现了新的颓废神器。
也许是暑假最后一次模拟赛了……(好吧并不是)
因为懒,就写写题解吧。
T1 署漱
\(0\ pts\) 做法:在100pts做法里加上freopen。点名WCR。
期望得分:\(100\ pts\)
实际得分:\(0\ pts\)
\(100\ pts\)做法:大力贪心。一道大水题我怎么扯这么多
T2 竖恕
容斥题。
经典套路:
- 转化为容斥方程形式
 - 根据容斥后的式子设计dp状态或思考组合数含义
 - 根据转化后的题意列转移方程
 - 继续想
 - 再想
 - 想
 想nm,下一题。
回到本题。
题目要求“一条都不满足的方案数”,我们就转化成“满足x条的方案数”。
由此设计出dp状态: \(dp_{u,k}\) 表示以u为根的子树內,满足k条边(或不满足k条边)的方案数。
不难发现这是一个树形背包。
然后继续分析题意,突然灵光一闪觉得他不满足的限制之间,是不相交的链的形式
然后感性理解一波,觉得我觉得是对的。
可以根据每条限制的特点,添加一个维度变成类似于插头的玩意儿:
\(dp_{u,k,0}\) 表示u节点不连边
\(dp_{u,k,1}\) 表示u节点连的边向上
\(dp_{u,k,2}\) 表示u节点连的边向下
\(dp_{u,k,3}\) 表示u节点作为一条链的中转点,有连上来的也有连下去的。
然后就可以转移了。
T3 蜀墅
毒瘤题。一堆操作。懒得讲什么的,我又不会。
T4
毒瘤题。一堆式子。懒得讲什么的,我又不会。
8、24
又有比赛。
T1线性筛老是忘记那个保证线性的break条件。。。
if(i%prm[j]==0)break;
T2 dp+前缀和优化+矩阵快速幂优化
(此处和 @yubai 的做法一样)
首先考虑\(O(n)\)求出本质不同子序列的数量
对于每一个字符,接到任意字符串后面都可以构成新的字符串。
但是需要去重,发现当前字符上一次出现位置以前的字符串,再接当前字符都是重复的。
所以列出式子:
其中\(pre_i\)表示i位置的字符上一次出现的位置。
前缀和优化一下,
然后就可以愉快的拿到m=0的部分分。
那么如何构造n+1~m的部分呢?
观察这个式子,可以发现\(pre_i\)越小答案越大。
然后就可以提出一个大胆的猜想:
把k个数按照最后一次出现的位置从小到大排序,从n顺次往后放
通过打表验证,发现是对的。
然后就可以拿到 \(78pts\) 的好成绩。
考虑m=1e18,可能是数学,因为后面\(pre_i\)都等于k。
然后就止步于此了。。。
其实还可能就是递推,不过需要优化成\(\log\)复杂度。
那就矩阵快速幂啊
考虑构造初始矩阵(向量)和转移矩阵。
初始矩阵中需要包含需要转移的全部信息,
这个长为k+1的向量足够。
那么如何转移到
呢?
观察递推式,发现\(f_{i+1}\)只和\(f_i\)、\(f_{i-k-1}\)有关
于是第一行可以轻松搞定:
\(a_{1,1}=2\)
\(a_{1,k+1}=-1\)
至于之后的部分,直接由下一行转移。
\(a_{i,i+1}=1\)
也就是
也就是
然后就可以愉快的RE掉这道题
至今没有发现是哪里挂了
T3咕了,不会
线段树亿生之敌
大概是维护一个\(kx+b\)之类的东西

                
            
        
浙公网安备 33010602011771号