首页 > 其他分享 >Codeforces Round #154(Div.2)

Codeforces Round #154(Div.2)

时间:2022-11-30 23:35:19浏览次数:43  
标签:10 le 优先级 154 打印 Codeforces 任务 Div.2 题意

C. Text Editor

【题意】
有一篇文章,包含 \(i\) 行,每行有 \(a_i\) 个字母,也就是 \(a_i + 1\) 个放置光标的位置。对于一个位于 \((x,y)\) 光标,每次操作可以上移/下移/左移/右移。其中上移和下移比较特殊,如果移动到的那一行没有 \(y\) 个位置,那么会移动到该行最后一个位置。
\(n \le 100, a_i \le 10^5\)
【分析】
一共 \(10^7\) 个点,每个点最多连四条边,边权都为 \(1\),BFS 求最短路即可。卡空间,不要存图,BFS 的时候现场找边即可。

D. Table with Letters - 2

【题意】
给定一个 \(n \times m\) 的小写字母矩阵。求满足以下条件矩形的个数:

  • 四个顶点字母一样。
  • 矩形的 \(a\) 个数 \(\le k\)。

\(n, m \le 400\)
【分析】
首先暴力是 \(O(n^4)\),我们优化一个维度就差不多了。
考虑固定 \(x_1, x_2\)。然后具有可二分性,而且 \(a\) 的个数也很好记录,使用双指针即可优化一个维度。

E. Printer

【题意】
一台打印机每秒可以打印一页纸张。有 \(n\) 个打印任务,每个任务都有送达时间 \(t_i\),页数 \(s_i\) 和优先级 \(p_i\)。优先级之间互相不同。在任意一秒开始时,打印机会选择已经送达并且还没有打印完毕的任务中优先级最大的一个,并且打印该任务的一页。目前存在一个任务 \(x\),你不知道它的优先级,但是你知道该任务在第 \(T\) 时刻打印完毕,你也知道其他所有信息。求 \(x\) 的优先级和每个任务何时打印完毕。
\(1 \le n \le 50000, 0\le t_i \le 10^9, 1 \le s_i, p_i \le 10^9,1\le T\le 10^{15}\)

要求 \(1 \le p_x \le 10^9, p_x \neq p_i\)。
【分析】
首先,如果知道 \(p_x\),可以利用 set 在 \(O(n \log n)\) 时间内模拟完所有打印操作并且求出每个任务打印完毕的时间。
那么考虑如何计算 \(p_x\)。我们发现,如果 \(p_x\) 最高,那么它应该在第 \(s_x + t_x\) 时间被打印完。如果不是这样,那么一定是有其他比它优先级更高的在它打印的过程中间抢着打印完了。
考虑实际打印完的时间 \(T\) 和 \(s_x + t_x\) 的差值为 \(k\)。由于只有在 \(x\) 之前开始,但是在 \(x\) 任务开始的时候还没打印完的任务和在 \(x\) 之后,但在 \(x\) 任务结束前开始的任务才会影响打印 \(x\) 的进程。并且打印完 \(x\) 之前必然完整打印完所有优先级比 \(x\) 更高的任务。对于上述范围内的任务排序,并且从高到低遍历,打印完某个任务需要花费的时间加起来等于 \(k\) 的话,\(x\) 的优先级就恰好是在该任务的下面。
这样,总时间复杂度是 \(O(n \log n)\)。

需要注意的是,有些任务虽然不影响 \(x\) 任务的执行但是会妨碍 \(x\) 优先级的放置。因此预处理每一个优先级往下第一个可以放置的是多少。但是数据全是随机的,根本没考虑这一点,把直接 \(-1\) 的做法也放过去了。

还有一个做法比较简单,直接暴力二分 \(x\) 的优先级然后模拟,是 \(O(n \log^2 n)\) 的。

标签:10,le,优先级,154,打印,Codeforces,任务,Div.2,题意
From: https://www.cnblogs.com/Zeardoe/p/16940166.html

相关文章

  • Codeforces Global Round 21 E
    E.PlacingJinas题链稍微手写一下发现就是一个杨辉三角然后我们知道杨辉三角第n行第m个是C(m-1,n-1)我们对应转化过来就是C(n+m-2,m-1)然后我们注意处理的组合数到4e5因......
  • cmu15445_lab1_BUFFER POOL
    BufferPoolManager整理一下cmu15445的实验的实现内容,具体实验的代码写的太丑就不公开了。Pagepage:page是一个数据库中存储的最小单位,也是磁盘和内存交换的最小单位,每......
  • Codeforces Round #834 A-C
    Avoids(){stringa;cin>>a;if(a[0]!='Y'&&a[0]!='e'&&a[0]!='s'){cout<<"No\n";return;}for(inti=0;i<a.size()-1;i++){if(a[......
  • Codeforces Round #805 (Div. 3) G2
    G2.PassablePaths(hardversion)题链我们思考一条链的特性发现只要“确定”两端之后就可以用LCA一遍判断是否是一条链的我们如何确定两端首先深度最深的一定是一......
  • Codeforces Round #836 (Div. 2) A-D题解
    比赛链接A、SSeeeeiinnggDDoouubbllee一个字符串的每个字母翻倍,且没有其他限制。所以把字符串正着输一遍,再倒叙输出一遍即可。点击查看代码#include<bits/stdc++.h>......
  • Codeforces Global Round 24 D
    D.Doremy'sPeggingGame题目链接挺难的一道计数计数问题最重要的是考虑如果划分集合然后不重不漏地计算出来我们考虑枚举每一个序列的结束点就是有n个然后这n个显......
  • Codeforces Round #836 (Div. 2)(A~D)
    A每个字符出现次数都是偶数,直接拼接defsolve():s=input()t=sprint(s+t[::-1])t=int(input())foriinrange(t):solve()B奇数个的情况下n个相同的......
  • Codeforces Round #826 (Div. 3) F
    F.Multi-ColoredSegments洛谷最优解显然我们对于每一个线段可以分成左右两端考虑我们先按照lsort一遍然后每次计算与他最近的值我们维护两个最大的r即可然后每次......
  • 「题解」Codeforces 1765L Project Manager
    写了两个小时写吐了,你告诉我这玩意2400?如果不管假期的话,那么每一周必然会有一个项目跟进一次进度。那么答案就是线性的。即使有假期的存在也没关系,每个假期顶多就只会拖......
  • Codeforces Global Round 24(持续更新)
    Preface最近可能中了降智病毒,写什么都写不过下午打的校趣味赛看错题一个爆搜WA了四次,少罚一次时都Rank1了然后晚上CF先是C想半天,然后D作为曾经最擅长的计数题也漏想了一......