Скоро Codeforces Round 1133 (Div. 1, Div. 2)! Регистрация здесь. ×

Блог пользователя longyitongxue

Автор longyitongxue, история, 2 недели назад, По-английски

A

Convert the value of $$$A+B$$$ to a string, and output the length of the string.

Code

B

Determine whether $$$k$$$ belongs to $$$(\min(a_i, a_{i+1}), \max(a_i, a_{i+1}))$$$ or $$$a_{i+1}$$$.

Code

C

Just simulate the process of assigning IDs as required by the problem.

Code

D

After the transformation, we can see that it is Dijkstra. We only need to sort the vertices connected to the current vertex by their indices, then assign the edge connecting the smallest-indexed vertex to $$$0$$$ and the remaining edges to $$$1$$$, and finally run the template.

Code

E

We can solve this efficiently by finding the maximum number of points contained within a half-plane. To completely avoid precision issues and TLE, we use strictly integer operations, specifically long long cross products, instead of atan2 or floating-point math. We first sort the points by their polar angle using a custom comparator based on quadrants and cross products. To handle circular wraparound smoothly, we duplicate the sorted array. Finally, we use a two-pointer sliding window to find the maximum valid window. We move the right pointer forward as long as the cross product between the left point $$$A$$$ and the candidate right point $$$B$$$, calculated as $$$A_x \times B_y - A_y \times B_x$$$, is positive, which guarantees the angular span is strictly less than $$$180^\circ$$$.

Code

Полный текст и комментарии »

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

Автор longyitongxue, история, 3 недели назад, По-английски

2274B - Prefix

Problem statement: Let $$$s=\sum\limits_{j=1}^{i-1} a_j$$$, and update $$$a_i$$$ to $$$a_i-s$$$, $$$a_i$$$, or $$$a_i+s$$$. Find the largest possible value of $$$\max\limits_{i=1}^n a_i$$$ at the end.

We observe that when $$$s$$$ is positive, it is obvious that we choose to set $$$a_i\gets a_i+s$$$, and when $$$s$$$ is negative, we can choose to set $$$a_i\gets a_i-s$$$ ($$$a_i\gets a_i+(-s)$$$) so that the contribution is positive. Therefore $$$a_i$$$ will ultimately be assigned the value $$$a_i+|s|$$$. To make the contribution larger, we need $$$|s|$$$ to be larger, which means we need $$$s$$$ to be very large or very small (i.e., a large absolute value). At this point we can use two variables $$$l,h$$$ (corresponding to minn and maxn in the code) to denote the smallest and largest prefix sums achievable so far, respectively. Putting this together, we update our answer as $$$\text{ans}\gets \max{\text{ans},|l|,|h|}$$$, and finally output $$$\text{ans}$$$.

So how do we maintain this maximum and minimum? Consider the current position $$$i$$$; the newly updated prefix sum $$$s'$$$ has three possibilities: $$$s\in{s+(a_i-s),s+a_i,s+(a_i+s)}$$$, i.e. $$$s\in{a_i,a_i+s,a_i+2s}$$$. Therefore we update $$$l'\gets \min{a_i,a_i+l,a_i+2l}$$$ and $$$h'\gets \max{a_i,a_i+h,a_i+2h}$$$. Since $$$l$$$, whether positive or negative, can never be smaller than $$$a_i$$$ or $$$a_i+2l$$$, and similarly for $$$h$$$, the two expressions can be rewritten as $$$l'\gets a_i+\min(0,2l)$$$ and $$$h'\gets a_i+\max(0,2h)$$$.

And with that, we are done with this problem.

[AC Code](https://codeforces.me/contest/2274/submission/394678152)

Полный текст и комментарии »

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится