两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
2020-2021:teams:manespace:2020_07_25-2020_07_31周报_week12 [2020/07/31 14:01] intouchables |
2020-2021:teams:manespace:2020_07_25-2020_07_31周报_week12 [2020/07/31 17:04] (当前版本) iuiou |
||
---|---|---|---|
行 3: | 行 3: | ||
=====本周推荐===== | =====本周推荐===== | ||
====by iuiou==== | ====by iuiou==== | ||
- | * **题源**: | + | * **题源**:[[https://codeforces.com/contest/1384/problem/B1]]&&[[https://codeforces.com/contest/1384/problem/B2]] |
- | * **题意**: | + | * **题意**:一个人要从0号沙滩到n+1号岛屿,中间有n片海,每片海都有一个深度$d_i$,还存在潮汐的作用,潮汐在呈$[0,1,2,……,k-1,k,k-1,……,1]$的规律按照时间循环变化,在一个时刻海域的深度为潮汐高度加深度,有一个安全深度$l$,而且他移动一次需要时间$1$,它可以在任何一个海域停留任何一个时间。问他能否安全的到达目标岛屿? |
- | + | ||
- | ***知识点**: | + | * **知识点**: dp,思维,构造 |
* **题解**: | * **题解**: | ||
- | =====团队训练===== | + | * **题解1**:对于简单的版本,考虑使用$dp$的思想,用$dp[i][j]$表示在时间为$j$时在第$i$个海域的可能性,转移时考虑,dp[i][j-1]与dp[i-1][j-1]有没有存在一个1,有就可以转移,时间总量可以开大一点,开$2*k*n$,最后遍历$dp[n][j]$存找是否存在$1$即可,至于判断单个状态是否成立,这很简单。 |
- | 2020.7.25 [[牛客多校第六场]] | + | * **题解2**:上面那种比较暴力得做法,明显过不了大样例,所以要想一个$O(n)$的想法,其实就是设计一个无论在那种情况都能占优的策略,可以发现,在降潮的时候走是有优势的,如果这时候到$i+1$,会有危险,那就等到$i+1$没有危险时再走,二长时间呆在原地,潮水只会往下跌,所以只会越来越“安全”,所以只要找可以等到涨潮的点即可,即满足$k+d_i≤l$的点,在这个点等到潮水涨到最高,然后再开始继续走,当然,一开始要判断不成立,两种情况,一种是已经涨潮,而对面已经过不去了,还有就是存在一片海域,$d_i>l$,那么也一定不成立。时间复杂度$O(N)$ |
- | + | * **总结**:这种题目有时候还是束手无测啊,但是又学到了一种暴力方法,dp暴力,感觉很有用啊,其实看见这种一个一个状态划分的非常清楚地题,怎么会想不到dp呢,<del>爬</del> | |
- | 2020.7.27 [[牛客多校第七场]] | + | |
- | + | ||
- | =====范泽恒===== | + | |
- | + | ||
- | ====专题==== | + | |
- | * 无 | + | |
- | + | ||
- | ====比赛==== | + | |
- | * [[codeforces round 656(div3)]] | + | |
- | + | ||
- | * [[codeforces round 657(div2)]] | + | |
- | + | ||
- | * [[codeforces round 658(div2)]] | + | |
- | ====题目==== | + | |
- | * **题源**:[[https://codeforces.com/contest/1385/problem/G]] | + | |
- | + | ||
- | * **题意**:给定两排数,每排都有$n$个数,每次操作可以交换一列的两个数,问能否存在一个最少的交换方案,使操作之后每一行都是$1$到$n$的一个排列。 | + | |
- | + | ||
- | ***知识点**:dfs | + | |
- | + | ||
- | * **题解**:这题有点难想,大致是一个二分图的问题。首先遍历两行数,如果一个数的出现次数超过了2次,那么肯定不成立。如果所有数出现次数都是两次,那么一定有一种方案满足。现定四个数组$r1[n],r2[n],b1[n],b2[n],b$数组用于存放列数,$r$数组用于存放行数,如果对于一个数$i$,$b_{1i}=b_{2i}$,则不考虑这个点,因为肯定不会动这个点的。接下来对点染色,如果$b_{1i}≠b_{2i}$,考虑$r$数组,如果$r_{1i}≠r_{2i}$,则在$b_{1i}$和$b_{2i}$之间连一条权为0的边表示,两点染的色必须相同。反之,连一条权为$1$的边,表示两个点颜色相反,最后从每个点开始$dfs$经行染色即可,注意每次比对将开头的那个点染成$1$还是$0$,最后的结果会最优(即最少)。 | + | |
- | + | ||
- | + | ||
- | + | ||
- | =====恭天祥===== | + | |
- | + | ||
- | ====专题==== | + | |
- | * 无 | + | |
- | + | ||
- | ====比赛==== | + | |
- | + | ||
- | * [[cf 659 div.2]] | + | |
- | * [[cf 658 div.2]] | + | |
- | + | ||
- | ====题目==== | + | |
- | * | + | ====by QuantumBolt==== |
- | ===== 题意 ===== | + | |
* **题源**:[[https://codeforces.com/contest/1384/problem/D]] | * **题源**:[[https://codeforces.com/contest/1384/problem/D]] | ||
行 77: | 行 41: | ||
先手第一步选一个0,然后将状态转为$2|n=1$的局面,且轮到后手先选择,上面已经证明,这种局面先选择的必输。 | 先手第一步选一个0,然后将状态转为$2|n=1$的局面,且轮到后手先选择,上面已经证明,这种局面先选择的必输。 | ||
+ | =====团队训练===== | ||
+ | 2020.7.25 牛客多校第六场 | ||
+ | 2020.7.27 牛客多校第七场 | ||
+ | =====范泽恒===== | ||
+ | ====专题==== | ||
+ | * 无 | ||
+ | |||
+ | ====比赛==== | ||
+ | * [[codeforces round 659(div2)]] | ||
+ | * [[Educational Codeforces Round 92 (Rated for Div. 2)]] | ||
+ | |||
+ | * [[codeforces round 660(div2)]] | ||
+ | ====题目==== | ||
+ | |||
+ | =====恭天祥===== | ||
+ | |||
+ | ====专题==== | ||
+ | * 无 | ||
+ | |||
+ | ====比赛==== | ||
+ | |||
+ | * [[cf 659 div.2]] | ||
+ | * [[cf 658 div.2]] | ||
+ | |||
+ | ====题目==== | ||