其實這次考試的題目並不難,但是卻考得比較崩。總結下原因有這麼些:
詳細請戳鏈結!
偷個懶應該沒人會發現吧
第一眼就是線段樹,這不明擺著嘛,利用最長連續零的套路,維護左右區間的顏色狀態(雜色/ci色),還有區間最左邊最右邊的顏色,順便計數即可。然而,這種輕輕鬆鬆就ac的想法還是too *****了。但因為n,
m<=
200000
,建樹,加更新經常需要遞迴至最下層,效率比線段樹低了很多,而且這題的常數比較大。
後來打完了,回來看這道題,發現可以優化,但是時間不夠,開始打對拍。
我想的優化是,因為修改和查詢都是對於全區間而言,那麼顏色種類數k經過修改只可能變得更少,因為同種顏色必定會同時修改,不可能分為兩種或多種顏色。而且既然線段樹有較大的可能性要遞迴到最底層,那麼就可以用zkw線段樹優化,直接採用鏈式前向星的思想,修改特定顏色的時候,直接可以查詢,並且把修改當做單點修改。
然後蒟蒻就想不到有什麼比較好的優化方法了……然後在下考前幾分鐘草率地打了個對拍,拍了幾百組就草率地交了。
期望得分:70 實際得分:50
考後,打了優化的思想,發現也是50分,資料一點梯度都沒有啊喂
事實上,我從第一眼就被誤導了,打線段樹真個錯誤的決定。正解要用鍊錶優化和啟發式合併。
也就是,修改的時候,並不實際去進行修改,而是做標記,用nc[i]陣列表示第i個現在是什麼顏色,在讀入的時候,就先處理出ans,修改時維護即可。在合併時,將元素較少的顏色合併到元素較多的顏色上。和題目中要求的反了?沒關係,標記一下就好了。
#include
#include
#include
using
namespace
std;
template
inline
void read(tp &x)
const
int size=1000010;
int n,m,ans,c[size],nc[size],head[size],tail[size],nxt[size],cnt[size];
void merge(int a,int b)
for(int i=head[a];~i;i=nxt[i])
c[i]=b;
nxt[tail[b]]=head[a];//接起來
tail[b]=tail[a];
head[a]=tail[a]=-1;//將a顏色清空
cnt[a]=0;
}int main()
while(m--)
}return
0;}
詳細請戳鏈結!
再偷個懶應該還是沒人會發現吧
考試的時候想複雜了,看了很久,覺得有點像組合數學+容斥原理,然後就需要知道連續兩次的,減去連續三次,加上連續四次……但是這個常數不好推啊,我暴力+手推,推了兩次公式,均被自己推翻。當時內心是崩潰的,而且心態又不是很好,因為先做了第三題(欲知有多慘,見下)……所以推了好久,沒推出來,就去打對拍了,沒救了,放棄**qwq
期望得分:0 實際得分:(已和諧)
事實上,第二題是最水的……看來只有我沒有推出來,被各位神犇暴踩qaq
考慮補集,首先所有方案是mn
,如若要沒有任意兩個相鄰方塊顏色相同,顯然我們有m∗
(m−1
)n−1
,那麼答案就是兩者的差了,注意開long long,打個快速冪再%一下。
#include
#include
using
namespace
std;
typedef
long
long ll;
const ll mod=100003;
ll n,m;
ll power(ll a,ll b)
return res;
}int main()
沒找到原題,偷不了懶了……
給你一張含有 n 個點 m 條邊的聯通無向圖,記錄 1 號點到每個點的最短路長度,詢問
去掉與 i 號相鄰的所有邊後,1 號點到多少個點的最短路長度改變,若不連通則也視為改
變。第一行兩個正整數 n,m,
接下來 m 行,每行三個正整數數 i,j,k,表示一條邊
n 行,第 i 行表示去掉與 i 號相鄰的所有邊後,1 號點到多少個點的最短路長度改變。
2 1
1 2 11 1
30% :
n<=
100,
m<=
300
100% :
n<=
5000,m
<=
20000
,邊權均為不超過 100 的正整數。
草率地看完題目後,我聯想到了noip2013貨車運輸。剛開始的想法(錯的!)是找一棵最小生成樹,然後進行一次樹形dp,找到每個節點的兒子節點並統計個數cnt,則刪去該節點之後最短路徑長發生改變的就是cnt。舉了乙個例子,掛了,發現當產生了有多條路徑到x點均為最小權值時會掛,於是又做了各種麻煩的操作改……然而,打了一發對拍,慘烈地掛了。誰說最短路徑的路徑一定在最小生成樹上的……
期望得分:0 實際得分:(已和諧)
正解需要先跑一邊spfa跑出單源最短路,然後再以每個點檢查,找出作為最短路徑的邊,並重新建圖,然後對於每乙個刪去的節點,bfs一下,檢視能訪問到多少節點,未訪問到的就是改變的節點數。
這叫做建最短路圖。貌似還是很有用的。
吐槽:重新建圖超級麻煩,還要寫兩個不同的鏈式前向星,陣列開到手抖
#include
#include
#include
#include
using
namespace
std;
template
inline
void read(tp &x)
const
int maxn=5010,maxm=20010;
int p,head[maxn],to[maxm<<1],w[maxm<<1],nxt[maxm<<1];
int n,m,dis[maxn],que[maxn],p2,h2[maxn],t2[maxm<<1],n2[maxm<<1];
bool inq[maxn],vis[maxn];
queue
q;void insert(int u,int v,int tw)
void insert2(int u,int v)
void input()
}void spfa()
}for(int i=1;i<=n;i++)
}}void work(int k)
for(int i=1;i<=n;i++)
if(!vis[i])
ans++;
printf("%d\n",ans);
}int main()
20171025 迷戀小概率事件
有一次,乙個朋友去買雙色球,我沒買過,所以好奇,也就跟過去看看怎麼買。他在投注的時候,我說 你買這幹嘛呢,又中不了,還不如買棒棒糖。聽到這話店員不樂意了,回敬說 你吃棒棒糖能吃出500萬嗎?我一想也是啊,兩塊錢又不多,萬一呢?新聞裡不也經常報道,某某一不小心買一張彩票就中了。或許下乙個就是我。於是鬼...
考試總結 CQOI2017 考試總結
再奮鬥一年,爭取ak noip2016 cqoi2017 這是去年我立的flag。看考場,電腦挺快,而且配置和評測機一樣,可以放心的在自己的電腦上卡常測試啦,好評。碼了一道fft的題,沒網只好拷著回家交,鍵盤蜜汁小,enter佔據了兩行,旁邊還有關機按鈕。座位安排奧妙重重,和巴蜀dyf大神坐在一起。...
MBA考試總結
終於考完了 mba入學統考,兩年來參加了兩次,感覺還是挺辛苦和有壓力的。第一年沒有通過是因為之前了解太遲,大概準備了 20天左右,最後還是功成垂敗。09年其實也一直沒有心情複習的,逼到最後的 20天,狠了一把勁,還是狠狠的複習了幾天,貌似今年應該可以通過了。總結經驗如下 1 如果你決定去做一件事,請...