NOIP2018游記
似乎是一些奇怪的東西
沒想到我竟然更博了!雖然今天是\(11.20\)了。
emmmm,為啥是今天呢?因為咕咕F本來說昨天出成績的,所以本來是昨天更的,然而咕咕F咕了,所以我也咕了,所以就今天更了。
然而NOIP似乎也已經過去了\(10\)天了,所以可能記憶會有些混亂了,就不要太在意了QwQ。
Day-3~Day0
\(Day-4\)考了大聚聚cx233666的題目,因為他的題目有着種種奇奇怪怪的各種各樣的神仙部分,所以我就懶得說了,只在這里說一句cx233666吃棗葯丸。
因為大聚聚的題目就是最后一場考試了,所以從\(Day-3\)到\(Day0\)這段時間我決定把\(NOIP\)從\(10\)年開始的題目重新做一遍,然后\(mona\)發現了就和我一起做了一遍。
然后感覺?意外的不難,似乎去年做了很久的,或者很讓我崩潰的題目都很快就過了?
這樣子翻過一年再看總能看出自己有很大的進步呢QwQ。
\(Day0\)下午放學之后就回家了,晚上\(11\)點就睡了,期望明天能夠考一個好成績吧QaQ。
Day1
\(7:20\)在校門口集合,我踩着時間到的,似乎我都是最后一個了。坐下來之后從包里翻出了\(ipad\),然后一群人就借過去打卡了,然后不出所料的“宜:參加NOIP”,無論怎么樣,至少洛谷的迷信還是做的很好的(逃
路上跟周圍的同學聊了會兒天,也就到了考場。考點永遠都是理工大學,熟悉的考點,總讓人回想起過去,也讓我想到了去年聯賽的失利,總是讓我心中充斥着一種說不清道不明的小緊張。
下了車,天空中飄落着小雨,不像以往來的時候都出了太陽。考場的外面的那片空地也似乎在修理,拉上了線,總覺得,今年有些不同呢?或許是高一到高二不能再失敗的心態的變化,身份的轉變必定會帶來心態上的轉變啊。深吸了一口氣,放空了自我,把雜念拋到腦后,既然來了,那就只能全力以赴了。大概到了\(8:15\)就跟着大部隊走上了\(4\)樓。
不得不承認所有的這一切咕咕F還是越做越好了,今年進場還要安檢?進來考場,我坐第一排?左邊是過道,右邊是一個一中的小哥。再仔細看了看這個機房,總覺得很熟悉呢!突然想起來省選的時候也是在這個機房頒獎,卻突然發現這都是\(7\)個月前的事情了。兩個監考老師也很眼熟,似乎是我省選的時候的監考老師。恩,不管啦,沉住氣,把分數拿穩就好了。
誒?說好了不能動鍵盤呢?然而老師讓我們自己檢查一下電腦有沒有什么問題,那就對不起啦,把\(emacs\)的配置打完,寫了一份簡單的模板,望着\(home\)下的\(day1\)發着呆。沒多久屏幕上就公布了密碼,解壓完了就開始看題。
先把題目讀一遍,再把暴力寫了,再開正解。我在心里想着。
\(\mbox{T1?}\)你確定這玩意不是“積木大賽”那道原題?我抄我自己?不管了,先看遍題再說。
\(\mbox{T2?}\)看了一眼感覺一定是選擇給定集合的子集,再稍微想想發現顯然是這個樣子的,數據范圍這么小?那不是直接暴力跑一遍背包就做完了?
那不今天就只要想想\(T3\)怎么做了?這才過去\(5\)分鍾啊。
\(\mbox{T3?}\)看一眼題目凸優化?假的!二分之后直接設\(f_i\)表示\(i\)這個點能夠往上延伸的最大長度,每次貪心的匹配每個點的子樹延伸上來的鏈,再把剩下的最長的那根接上去就好了。
行?我今天能\(AK\)?
\(T1,T2\)順手寫完了,代碼都是\(15\)行以內,大樣例也沒問題。這才過去\(15\)分鍾?逗我呢?這么簡單嗎?
開始碼\(T3\),二分、\(dfs\)、排序、貪心。\(30min\)的時候碼完了,小樣例沒鍋,大樣例....誒\(WA\)了,怎么小了啊。emmmm,程序沒有問題啊。
仔細想了想,忽然發現我貪心策略假了,怎么能拿最大值去匹配較小的值啊?顯然拿較小值去往大的匹配啊!排個序,把指針改成並查集,\(multiset\)太丑了,隨便貪心一下,跑小樣例,過了,大樣例,過了。
行,那我今天不是\(AK\)了?這才\(1\)個小時啊。一定是假的,檢查檢查。
\(T1\)不會假裝是一個原題實際上是坑你的吧,不會是一個環吧?手玩了一下環,發現小樣例都是假的,那題目沒看錯啊,不會真的是原題吧。沒錯啊,恐怕真的是原題吧。。。真的。。。真的沒錯啊,那就是原題吧。題目應該沒看錯,行,來拍一下,寫了一個按照最小值的分治做法,一下就拍上了。
\(T2\)做法應該是對的吧,仔細想了想似乎沒有錯,發現我不會寫暴力,咕了,不拍了,自信點。
\(T3\)似乎也沒法拍啊,寫了一個求樹的直徑拍上了,再寫了一個求最小邊也拍上了。
這才\(1.5h\)啊。
行,睡覺吧。
菊開\(12:00\)就走了,然而我接着趴在桌上。
中間重復了若干遍看題——不會真的是原題吧——真的是原題啊的過程,就不寫了。
考完出來似乎大家都\(AK\)了,他們跟我說\(T3\)是菊開講過的題目?想了想似乎還真是這么一回事,反正做出來了,無所謂啦。
老鄔在考完之后關切的問了一下我們怎么樣,zsy說:“Day1沒有AK的人都退役了”
中午大家一起吃了飯,中間看各個群里面開噴原題大賽,洛谷甚至把積木大賽那題直接加上了一個\(2018\)的\(tag\)。
下午在家里睡覺,起來之后拿着數據全身發抖的交到了洛谷上,看到了滿屏的綠色就安心多了。晚上隨便翻了翻博客也就睡了。希望\(Day2\)也能這么順利吧。
Day2
比昨天早點到了車上,一路上大家似乎都有點心事,車上很安靜。
中間的過程似乎也沒有什么好說的了。
還是比\(30\)早了一會兒還是寫配置,\(30\)就開始了。
先大概把題目看了一遍,感覺今天比昨天難多了。
先開\(T1\),首先一棵樹的直接貪心就好了,肯定沒錯。基環樹呢?手玩了一下樣例,再深思熟慮了一波,覺得應該只需要選一條環邊斷開再跑樹就行了,這樣子復雜度也是\(5000\)能夠跑的。寫完之后看了一眼時間,已經過去\(30min\)了,還有兩題!
\(T2\),看了看\(2\ 2\)的樣例,感覺按照副對角線分層之后,只需要保證一個副對角線上的格子從下往上保證是一個先是一段\(1\)再全是\(0\)的序列就好了。
這樣子手玩一下發現\(2\ 2\)全是沒錯。再手算了一下\(3\ 3\),發現算出來是\(144\)?比答案大了。卡住了,先跳。
\(T3\)看了一眼,這不是\(ddp\)嗎?我曾經無數次點開\(ddp\)想學一學,\(dkw\)也問過我洛谷上有沒有\(ddp\)的題目,然后洛谷上的那道模板題也是\(dkw\)上傳的,然而我卻並不會\(ddp\)。印象里?似乎是把轉移寫成矩陣,然后樹鏈剖分之后輕鏈的貢獻直接計算,重鏈從下往上因為\(dfs\)序連續,所以只需要用線段樹維護就好了?似乎是這樣子的,但是——我!不!會!啊!
順手打了\(44\)分的暴力,推了推矩陣,發現我還是不會\(ddp\)。不行啊,\(zsy\)一定切了這題了,我怎么說今天也要切兩題吧。於是決定棄掉這題開\(T2\)。
\(T2\)先想了想為啥我的想法跑出來比答案大了,突然發現這個東西並不具有階段性,一旦兩條沒有比出大小的路徑相交了,就會影響后面的所有部分。
想清楚了之后寫了個爆搜,用前面的\(01\)段的想法剪枝,跑出來\(3\ 3\)果然是\(112\)。
看了看部分分,首先\(2\)的因為即使相交了也對於后面沒有影響,所以只需要不斷乘\(3\)就好了。
那么\(3\)呢?\(3\ 3\)是\(112\),\(3\ 4\)是\(336\),那不會也是乘三吧?爆搜跑了跑果然是這樣子,於是把\(n=3\)的寫完了。
那是不是只要乘三就好了啊?
跑了跑\(4\ 4\),\(4\ 5\),不是乘\(3\)?完了,今天要涼了。不行不行,深吸了一口氣,拋開一些奇怪的想法,繼續分析。
怎么樣把\(8\ 8\)以內的寫完就有很多分了,先把表打完。
一打\(4\ 6,4\ 7,4\ 8\)似乎又變成乘\(3\)了,有點意思了。
跑了跑\(5\ 5,5\ 6,5\ 7,5\ 8\),發現除了\(m=5,6\)之間不是乘三,其他的都是乘三。
誒,沒問題了,那就是這樣子了。
打表打了\(6\ 6,6\ 7,6\ 8\),果然除了\(m=6,7\)之間不會乘三,其他的都是乘三。
然后跑\(7\ 7\)......卡死了,前面跑\(n=6\)的時候\(m\)大,也跑得很慢,那么是不是\(n\)和\(n+1\)之間也有規律啊。
看了看,似乎都是\(n\)從\(n-1\)大概乘了一個\(8\)倍再減了一個什么數,拿計算器算了算這個差,誒?\(160,320,640...\),於是我大膽的猜了一下\(7\ 7\)的值,然而爆搜還是沒有跑出來。
再看了看\(m=n,n+1\)之間雖然不是三倍,但是是三倍差了一點。
我又拿出了計算器做了個差,誒\(48,96,192......\),妙啊。
這個時候\(7\ 7\)跑了出來了,果然和我推的值是一樣的。woc,那我是不是這題切了啊?打表大法好啊!
把\(T2\)寫完了,趕緊看看\(T3\)的部分分,是一條鏈?似乎可以寫,維護前綴后綴合並一下就好了。
還有高度小於\(100\),不是只修改鏈就好了嗎?
看了一眼時間,還有\(10min\)。恩,我\(NOI\)的時候\(10min\)都能\(Rush20pts\)出來,再試一次。
然而到了下考前\(1min\)高度小於\(100\)都還沒有調出來。
嘆了口氣,搖了搖頭,今天要被吊打了。
問了問\(zsy\),他果然切了\(T3\),果然是\(ddp\),誒,要是我會\(ddp\)多好啊。然后\(Despair\)也切了\(T3\),看起來我要被吊打了。
出門之后李姐姐問我們今天寫了多少,我說\(244\),\(zsy\)說\(265\),果然技不如人,只能被吊打啊。
中午還是一起吃了個飯,下午回去睡覺。
晚自習就到教室補語文課去了QwQ。
Ending
今天出結果了。看這樣子\(zsy\)是\(565pts,HN-01\)了,雞賊是\(552pts,HN-02\)了。我們學校似乎這次考得意外的好?

不管結果如何,也只能再接再厲,繼續往前看了。
大家加油吧!
upd:
行吧,把我\(D2T2\)代碼放這里,一些注釋掉的東西就刪掉了。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define MOD 1000000007
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
int n,m,ans,sum;
int main()
{
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);
if(n==1)
{
ans=1;
for(int i=1;i<=m;++i)ans=(ans+ans)%MOD;
printf("%d\n",ans);return 0;
}
if(n==2)
{
ans=4;
for(int i=1;i<m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
else if(n==3)
{
ans=112;
for(int i=4;i<=m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
else if(n==4)
{
if(m==4)ans=912;else ans=2688;
for(int i=6;i<=m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
else if(n==5)
{
if(m==5)ans=7136;else ans=21312;
for(int i=7;i<=m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
else if(n==6)
{
if(m==6)ans=56768;else ans=170112;
for(int i=8;i<=m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
else if(n==7)
{
if(m==7)ans=453504;else ans=1360128;
for(int i=9;i<=m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
else if(n==8)
{
if(m==8)ans=3626752;else ans=10879488;
for(int i=10;i<=m;++i)ans=3ll*ans%MOD;
printf("%d\n",ans);return 0;
}
return 0;
}
