题目大意
给定一个 的网格字符矩阵。对于每个 (),将以 为左上角、 为右下角的正方形区域顺时针旋转 90 度。求最终的网格状态。

这题其实纯模拟是做不出来的,需要一些小的优化技巧(如上图)
更加具象化一点是这样

AC代码
1 |
|
纯模拟的TLE代码
1 |
|
给定一个 N×N 的网格字符矩阵。对于每个 i (1leileN/2),将以 (i,i) 为左上角、(N+1−i,N+1−i) 为右下角的正方形区域顺时针旋转 90 度。求最终的网格状态。

这题其实纯模拟是做不出来的,需要一些小的优化技巧(如上图)
更加具象化一点是这样

AC代码
1 | #include <iostream> |
纯模拟的TLE代码
1 | #include <iostream> |
给定一个图,边有权值。在节点上每经过 k 条边必须休息一次(或者说每走 k 步必须停顿)。求从起点到终点的最短时间(或路径权值和),考虑休息带来的限制/代价。
参考了官方题解思路,就是在分层图上跑最短路

相比于TLE代码,只加了个这个优化
while(!q.empty() && dist[n+1]==INF)
如果dist[n+1]已经确定,那就不用再跑了。
然后代码实现上有比较多的细节,主要是在初始化方面,比如说vis[i][0]也要清理什么的
1 | // https://ac.nowcoder.com/acm/contest/91355/D |
过了40% TLE https://ac.nowcoder.com/acm/contest/view-submission?submissionId=72128029
1 | // https://ac.nowcoder.com/acm/contest/91355/D |
求解无限连分数 x = a + 1/(a + 1/(a + …)) 的值。即求解方程 x = a + 1/x 的正根。
AC代码 牛顿迭代法
x=a+a+a+a+⋯111
因为是无限的递归,可以把a下面的看成一个整体,其实也是x,然后你就把这个问题转化成了求一元二次方程。
x=a+x1
1 | #include <iostream> |
有 N 个候选人争夺 M 个席位,共有 K 张票。目前已知每个候选人已获得的票数,以及剩余未投的票数。对于每个候选人,判断在最坏情况下(即剩余票数的分配对他最不利时),他是否还能通过获得一定数量的剩余票数来确保当选(进入前 M 名)。如果是,求出他至少需要再获得多少票;否则输出 -1。
二分答案,检查器的设计重点在于
// 防止选用自己作为自己的竞争对手
1 | if(idx-needOver-rectifyIdx<0) // <0 说明人不够了,一共就没那么多人(n=m) |
https://atcoder.jp/contests/abc373/submissions/58823933
二分检查器的核心行(加粗行)思路

1 | #include <iostream> |
我现在的想法就是我认为这就是博弈论,就是我投的票要竭力使这个人掉出m人的队列,而然后剩余的票一定是投在这个人身上
ans[i]=ceil((remain-diff)*1.0/(cnt+1));的来历

半成品代码
1 | #include <iostream> |
https://atcoder.jp/contests/abc373/submissions/58808859
五彩缤纷的提交
我做着做着发现完全不需要分两种情况,这个提交是分两种情况的。
然后check()可以用前缀和优化
1 | #include <iostream> |
给定一棵树,边有边权。需要在树上选一条长度不超过 s 的路径(核心路径),使得树上所有点到这条路径的距离的最大值最小。
https://www.luogu.com.cn/record/178248030 50pts TLE
1 | #include <iostream> |