就……挺暴力的模擬賽。
題意:求乙個單詞串的最大單詞長度,空格用下劃線代替。
暴力跑一遍,每次掃到下劃線都更新最大值 \(ans\) 並重置 \(cnt\),注意最後乙個單詞也要在迴圈之後更新最大值。
乙個標準的 \(bfs\),無腦搜就可以了。
對於傳送門,可以發現,有傳送門一定要傳送,設一組傳送門 \(d_1,d_2\),不難發現,當 \(d_2\) 周圍有空地可以去時,是能夠回到 \(d_1\) 的,所以標記時,只標記進入傳送門的點,不標記離開傳送門的點。
int n,m;
char mp[305][305];
bool vis[305][305];
struct gategt[30];
struct node
};int sx,sy,ex,ey;
queueq;
int ans=0x3f3f3f3f;
int dx[4]=,dy[4]=;
inline void bfs()
for(int i=0;i<4;i++)
else
}else}}
}if(ans==0x3f3f3f3f)
else
return;
}int main()
for(int i=1;i<=n;i++)
else
}else if(mp[i][j]=='@')
else if(mp[i][j]=='=')}}
bfs();
return 0;
}
賽時的另乙個想法通過大力模擬可以發現,從一點去傳送門且仍留在傳送門當地的代價為 \(3\),即進入傳送門——離開另一傳送門——進入另一傳送門,綜上,可以把兩個地點都放入佇列並且都標記上。
然而,實際是錯誤的,還需要去特判是否能傳回來。
其實是有動態規劃的影子的,不過核心演算法是差分。
先考慮乙個問題,最終一致的紙牌個數有影響嗎?有,但不完全有,因為如果我們以任意乙個牌堆初始紙牌個數為基準,其方案數是不會改變的,因為相對增加減少是可以抵消的,例如 \(\) 這一組數,以 \(1\) 為基準和以 \(2\) 為基準是等價的。
那麼以 \(3\) 為基準呢?不難發現還需要在整體上加上 \(1\) 或 \(2\),因此得出本題的第乙個結論:最終形成的紙牌數量必須是初始數量中的任意乙個。那就讓其都為 \(a_1\) 吧。
接著我們考慮差分陣列 \(b\),令 \(b_i=a_i-a_\),特別地 \(b_1=0\),之後我們讓所有的 \(a_i\) 都等於原數與 \(a_1\) 之差。
不難發現的是,如果出現牌數多於基準的,單調不上公升序列 \([i,j]\),其需要的運算元就是最多牌堆此時的 \(a_i\),同理也有如果出現少於基準的,單調不下降序列 \([i,j]\),其需要的地運算元為最少牌堆此時的 \(a_i\)。
既然如此就可以在 \(o(n)\) 的複雜度內更新答案。方案如下:
這裡大家可以發現,我們實際上每次更新到 \(a_i\) 時,是保證前 \(i\) 個都為基準的方案數。
int n;
int a[maxn],b[maxn];
int ans;
int main()
b[1]=0;
for(int i=2;i<=n;i++)
for(int i=2;i<=n;i++)
a[1]=0;
for(int i=2;i<=n;i++)
}else
}else if(a[i]<0)
}else}}
printf("%d\n",ans);
return 0;
}
然而,有乙個更好的解法。
考慮如下的乙個陣列 \(a=\\),差分之後就有 \(b=\\),我們可以發現,如果修改乙個區間 \([l,r]\),差分陣列是在 \(l\) 與 \(r+1\) 的數值會改變。例如我們在 \([2,3]\) 位置 \(-1\),得到的陣列 \(a'=\\),差分陣列 \(b'=\\)。若將 \(4\) 單點 \(+1\),同理差分陣列變作 \(b''=\\)。
總結一下上述操作得出的結論:一次修改可以將任意一正一負的差分數值分別 \(-1\)、\(+1\)。也就是說,實際上修改次數實際為正數之和與負數之和的絕對值較大值,我們設 \(cnt1=\sum_^n [b_i>0],cnt2=\sum_^n [b_i<0]\)。這樣我們操作的次數 \(ans1\) 應當為:
\[\operatorname=\max(cnt1,cnt2)
\]
int n;
int a[maxn],b[maxn];
int cnt1,cnt2;
int main()
for(int i=2;i<=n;i++)
else
}printf("%d %d\n",max(cnt1,cnt2),abs(cnt1-cnt2)+1);
return 0;
}
20181010模擬賽 賽後處刑
黃題第五套 問題描述 ufo 在樓下的花園裡種了棵樹,這棵樹上有 k 朵花。他還在樹上的某節點 上藏了封密信。有n只 lzl從密信的位置出發,經過不超過 d 段樹枝,可 以到達的範圍內包含所有的花。可以到達的範圍 如果從 a 出發,經過不超過 d 段樹枝,可以到達 b,則 b 屬於到達的範圍,否則不...
2 8模擬賽 賽後題解
難度排序 t4最高得分 前5名 t4由題意不難知道,每次選擇拔高的區間的右端點一定是 n 具體證明大家意會一下.考慮 f i j 表示當前選擇的左區間最右不超過 i 且拔高了 j 次的答案 則 f i j max 1 x二位樹狀陣列維護一下即可 看!樹套樹!時間複雜度 o nk cdot lognl...
2021 5 23模擬賽賽後總結
其實這次考試題目還是很水的 首先這次考試題目的資料範圍都很不對勁,動不動就 1e9 1e8 的,看著嚇人極了。可是沒想到,這題非常不講武德 上來直接給 1e9 套個 log 我全都防出去了啊,直接 給 1e9 的 log 來個三次方,也卡過去了啊 可是沒想到,他這 t2 又給我來乙個 1e9 我大意...