生活随笔
收集整理的這篇文章主要介紹了
8.11模拟:数据结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 考場
- 復盤
- T1 forward
- T2 basket
- T4 square
- 總結
前言
320分
還不錯啦
沒有掛分還是很可貴的
(暴力TLE就不怪我了)
T4反過來想其實就很可做了
逆向的思想需要培養(今天T1、昨天T2也是)
說實話今天早上狀態不太好
特困生
不過T1成了一個很好的激勵劑
考場
(不分題講了,有些亂)
先看了一下題,真就和zld的提示一樣,T1水的不行,后面的思路不太明顯(但是相對感覺T3可做)
本來應該先寫個T3的暴力穩一穩什么的
但是鑒于T1水的太厲害了
我基本還是有自信不會把鏈表的板子寫掛的
所以還是先把T1正解寫了(10min,心態就好起來了)
然后是T2和T4的暴力
T2的暴力還是有了一些技巧,用鏈表插入代替排序可以到n2(70pts)
T4怎么想各種思路都是n3的,50分之外不太能奢求太多了
回頭看相對感覺可做的T3
(gg誠不欺我,先把暴力寫了心態穩了很多)
(尤其是還剩兩個多小時的時候)
然后聽naonao的預言嘗試了離線然后發現就非常可做
然后不著急細細寫就把它切掉了(這題沒掛還是挺不容易的)
此時大概是10:20,還有80分鐘
時間的利用效率開始直線下滑
先把每道題瞅了一遍確保沒有腦殘bug
然后我想到T2n=2000的70分似乎n2logn也能過
又因為覺得鏈表很容易掛
所以反向優化加了個log變成無腦代碼
(然后就T了10分…事實是我那個鏈表并沒有寫掛…)
然后還有60min的樣子
開始摳分最不滿的T4
沒有摳出來,其實就是反著想沒有想到
然后開始寫玄學常數級優化…
(包括特殊數據就上下左右翻折等詭異操作)
然后就過了60!
針不戳
(996OJ的機子測甚至可以到80)
然后就又檢查了檢查,就結束了
復盤
T1 forward
缺乏逆向思維
反著想甚至比鏈表還好做
T2 basket
爆肝題
主要是set用的不熟練
std那樣把新元素insert進去再刪點會好做很多
而且還加了兩個上下界防止溢出值得學習
我的代碼:
#include<bits/stdc++.h>
using namespace std
;
#define ll long long
const int N
=2e5+100;
int n
,m
,q
,t
;
int nxt
[N
],jd
[N
];
struct node{ll a
,b
,c
,id
;bool operator < (const node y
)const{if(b
!=y
.b
)return b
<y
.b
;else return c
>y
.c
;}
}p
[N
];
bool cmp(node x
,node y
){return x
.a
>y
.a
;
}
struct node0{ll v
,id
;bool operator < (const node0 y
)const{return v
<y
.v
;}
};
set
<node
>s
;
set
<node
>:: iterator it
;
multiset
<node0
>s0
;
multiset
<node0
>:: iterator it0
;
ll ans
,A
,B
,C
;
void insert(node o
){it
=s
.upper_bound(o
);if(it
!=s
.end()&&(*it
).c
>=o
.c
) return;jd
[o
.id
]=1;while(it
!=s
.begin()&&!s
.empty()){it
--;if((*it
).c
<=o
.c
){jd
[(*it
).id
]=0;s
.erase(it
);it
=s
.upper_bound(o
);}else{nxt
[(*it
).id
]=o
.c
;s0
.insert((node0
){(*it
).b
+nxt
[(*it
).id
],(*it
).id
});break;}}it
=s
.upper_bound(o
);if(it
!=s
.end()){nxt
[o
.id
]=(*it
).c
;}else nxt
[o
.id
]=0;s0
.insert((node0
){o
.b
+nxt
[o
.id
],o
.id
});s
.insert(o
);return;}
int main(){scanf("%d",&t
);while(t
--){memset(nxt
,0,sizeof(nxt
));s
.clear();s0
.clear();scanf("%d",&n
);for(int i
=1;i
<=n
;i
++){scanf("%lld%lld%lld",&p
[i
].a
,&p
[i
].b
,&p
[i
].c
);}sort(p
+1,p
+1+n
,cmp
);for(int i
=1;i
<=n
;i
++) p
[i
].id
=i
;ans
=p
[1].a
;for(int i
=1;i
<=n
;i
++){A
=i
==n
?0:p
[i
+1].a
;insert(p
[i
]);ll now
;while(1){node0 o
=*s0
.begin();if(jd
[o
.id
]&&o
.v
==p
[o
.id
].b
+nxt
[o
.id
]){now
=o
.v
;break;}else s0
.erase(s0
.begin());}ans
=min(ans
,A
+now
);ans
=min(ans
,A
+(*s
.begin()).c
);}printf("%lld\n",ans
);}
}
T4 square
代碼細節挺多的
不太好調
尤其是復制粘貼一定要改干凈!
總結
今天不錯啦
但是晚上T2調了太久了
抵制特困生,我需要早睡qwq
明天:動態規劃,加油!
總結
以上是生活随笔為你收集整理的8.11模拟:数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。