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\)之類的東西
