這篇文章主要就是記錄noip的思路和解法,以及設計到的演算法,十分主觀,請勿見怪。(不斷更新中)
t1 排水系統
拓補排序+高精,難度較低
t2 字串匹配
hash+樹狀陣列+字首字尾和+卡常(還沒學拓展kmp)
1.列舉 abab
ab和 i
ii ,hash 判斷字串相同(主要思路)
2.對 f(x
)f(x)
f(x)
函式進行字首和字尾預處理
3.樹狀陣列處理 f(x
)f(x)
f(x)
函式數值字首和
4.就 i
ii 奇偶性討論
這樣就可以做到 o(t
n(ln
n+
log27)
)o( t n (\ln n+ \log 27))
o(tn(ln
n+log27)
) 的時間複雜度,卡卡常數就過了
ps.貌似 o(t
n(ln
n+27)
)o(t n(\ln n+27))
o(tn(ln
n+27
))可以卡常卡過去,但我反正卡不過(orz 卡常大佬們)
**如下:
#include
using
namespace std;
typedef
long
long ll;
typedef
unsigned
long
long ull;
ll read()
while
('0'
<=c && c<=
'9')
return flag?x:
-x;}
const ll n=
1050000+10
,p=1e9+7
;char s[n]
;ll h[n]
,l[n]
;int bar[30]
,n;short suf[n]
,pre[n]
;inline
intlowbit
(int x)
inline
void
add(
int x)
inline
intque
(int x)
intmain()
memset
(bar,0,
sizeof
(bar));
suf[n+1]
=0;for
(register
int i=n;i>=
1;i--
)memset
(bar,0,
sizeof
(bar));
ll ans=0;
for(
register
int i=
2;i<=n;i++)}
printf
("%lld\n"
,ans);}
}
t3 移球遊戲
思維題+spj
40pts 複雜度 o(n
m2
)o(nm^2)
o(nm2)
寫個up函式把某個數從乙個柱子中移到乙個柱子最上面,其他球順序不變。
然後對每種顏色進行以下操作:
1.把每乙個柱子中的該種顏色的球提到最上方
2.把這些同種顏色的球移到右邊空的柱子(稱為a柱)上
3.把a柱左邊的柱子所有球移動到該柱左邊的柱子上的空位上
容易看出,這樣的操作進行n-1次即可滿足題目條件
40pts **如下:
#include
using
namespace std;
typedef
long
long ll;
ll read()
while
('0'
<=c && c<=
'9')
return flag?x:
-x;}
const ll n=
60,m=
410,mx=
820000
+10010
;ll a[n]
[m],topans=
0,n,m;
struct ansoutans[mx]
;ll ano;
void
up(ll num,ll d)
;for
(ll i=d+
1;i<=m;i++
) ans[
++topans]
=(ansout)
; ans[
++topans]
=(ansout)
;for
(ll i=d+
1;i<=m;i++
) ans[
++topans]
=(ansout)
; ans[
++topans]
=(ansout)
; ans[
++topans]
=(ansout);}
else
;for
(ll i=d+
1;i<=m;i++
) ans[
++topans]
=(ansout)
; ans[
++topans]
=(ansout)
;for
(ll i=d+
1;i<=m;i++
) ans[
++topans]
=(ansout)
; ans[
++topans]
=(ansout)
; ans[
++topans]
=(ansout);}
ll x=a[num]
[d];
for(ll i=d;i) a[num]
[i]=a[num]
[i+1];
a[num]
[m]=x;
}ll len[n]
;int
main()
}for
(ll ci=
1;ci}for
(ll i=
1;i<=n-ci+
1;i++);
}for
(ll i=
1;i<=n-ci;i++);
a[i]
[j]=a[n-ci+1]
[len[n-ci+1]
--];}
}}printf
("%lld\n"
,topans)
;for
(ll i=
1;i<=topans;i++)}
//ball
KMP做題記錄
題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...
8 25 9 25 做題記錄
2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...
8 25 9 25 做題記錄
2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...