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!!!只有兩個標記!!!

  1. cv(cover):當前線段樹結點被 整個 覆蓋過多少次
  2. cl(color):當前結點被 整個 覆蓋的顏色

把掃描線轉化為三個基礎問題求解:

  1. \(ask\),查找聯通塊並連邊
  2. \(add\)
  3. \(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 豎恕

容斥題。

經典套路:

  1. 轉化為容斥方程形式
  2. 根據容斥后的式子設計dp狀態或思考組合數含義
  3. 根據轉化后的題意列轉移方程
  4. 繼續想
  5. 再想
  6. 想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)\)求出本質不同子序列的數量

對於每一個字符,接到任意字符串后面都可以構成新的字符串。

但是需要去重,發現當前字符上一次出現位置以前的字符串,再接當前字符都是重復的。

所以列出式子:

\[dp_x=\sum_{i=pre_{x}}^{x-1} dp_i \]

其中\(pre_i\)表示i位置的字符上一次出現的位置。

前綴和優化一下,

\[dp_x=2*dp_{x-1}-dp_{pre_x-1} \]

然后就可以愉快的拿到m=0的部分分。

那么如何構造n+1~m的部分呢?

觀察這個式子,可以發現\(pre_i\)越小答案越大。
然后就可以提出一個大膽的猜想:
把k個數按照最后一次出現的位置從小到大排序,從n順次往后放
通過打表驗證,發現是對的。
然后就可以拿到 \(78pts\) 的好成績。

考慮m=1e18,可能是數學,因為后面\(pre_i\)都等於k。
然后就止步於此了。。。

其實還可能就是遞推,不過需要優化成\(\log\)復雜度。
那就矩陣快速冪啊

考慮構造初始矩陣(向量)和轉移矩陣。

初始矩陣中需要包含需要轉移的全部信息,

\[\begin{bmatrix} f_{i}\\ f_{i-1}\\ ...\\ f_{i-k-1}\\ \end{bmatrix}\]

這個長為k+1的向量足夠。

那么如何轉移到

\[\begin{bmatrix} f_{i+1}\\ f_{i}\\ ...\\ f_{i-k}\\ \end{bmatrix}\]

呢?
觀察遞推式,發現\(f_{i+1}\)只和\(f_i\)\(f_{i-k-1}\)有關
於是第一行可以輕松搞定:
\(a_{1,1}=2\)
\(a_{1,k+1}=-1\)
至於之后的部分,直接由下一行轉移。
\(a_{i,i+1}=1\)
也就是

\[\begin{bmatrix} 2& 0& 0& -1\\ 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1&0 \end{bmatrix}\]

也就是

\[\begin{bmatrix} f_{i}\\ f_{i-1}\\ ...\\ f_{i-k-1}\\ \end{bmatrix} \times \begin{bmatrix} 2& 0& 0& -1\\ 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1&0 \end{bmatrix} =\begin{bmatrix} f_{i+1}\\ f_{i}\\ ...\\ f_{i-k}\\ \end{bmatrix} \]

然后就可以愉快的RE掉這道題
至今沒有發現是哪里掛了

T3咕了,不會
線段樹億生之敵
大概是維護一個\(kx+b\)之類的東西


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM