QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 1024 MB Total points: 100 Hackable ✓

#17537. Thread

Statistics

Trong bối cảnh AI đang càn quét thế giới, LG Electronics đang dồn toàn lực để tạo ra các thiết bị điện tử thế hệ tiếp theo sử dụng AI, chẳng hạn như máy tính xách tay LG Gram được trang bị CPU AI và máy điều hòa Whisen AI AIR có khả năng tự điều chỉnh môi trường trong phòng.

Đa luồng (multithreading) là một công nghệ không thể thiếu để hiện thực hóa các phép tính AI hiệu năng cao này. Luồng (thread) là một đường dẫn thực thi chạy song song trong chương trình, thông qua đó máy tính có thể thực hiện nhiều tác vụ cùng lúc để nâng cao hiệu quả. Tuy nhiên, khi có các tài nguyên được chia sẻ giữa các luồng, việc đồng bộ hóa cần phải được thực hiện một cách cẩn thận.

Lập trình viên OO, người vừa mới học về luồng, đã mở chiếc LG Gram của mình, khai báo một biến số nguyên x và viết một chương trình trong đó $N$ luồng cùng thực hiện câu lệnh x = x + 1. Để thực hiện câu lệnh cộng thêm $1$ vào x này, cần có thao tác đọc x và thao tác ghi x. Trên thực tế, hai thao tác này không xảy ra đồng thời mà diễn ra theo trình tự sau:

  • Bước 1: Luồng đọc và ghi nhớ giá trị của x.
  • Bước 2: Luồng cộng thêm $1$ vào giá trị đã ghi nhớ và ghi đè kết quả đó vào x.

Vấn đề nằm ở chỗ một luồng khác có thể can thiệp vào giữa Bước 1 và Bước 2 của một luồng đầu tiên. Giả sử giá trị ban đầu của x là $0$, nếu luồng A và B cùng thực hiện Bước 1, cả hai đều đọc và ghi nhớ giá trị $0$. Sau đó, nếu cả A và B cùng thực hiện Bước 2, cả hai đều ghi $1$ vào x, do đó giá trị của x trở thành $1$. Ngay cả khi lệnh tăng x thêm $1$ được thực hiện hai lần, x có thể không tăng thêm $2$. Vì vậy, OO đã rất ngạc nhiên khi chạy chương trình và thấy giá trị của x không phải là $N$ mà là một số khác.

Bây giờ, hãy giả sử chúng ta trở thành chiếc LG Gram và có thể thực hiện $N$ luồng theo bất kỳ thứ tự nào chúng ta muốn. Mỗi luồng phải được thực hiện chính xác hai lần. Lần đầu tiên luồng được thực hiện, nó sẽ tiến hành Bước 1, và lần thứ hai được thực hiện, nó sẽ tiến hành Bước 2. Số cách thực hiện các luồng như vậy là $\frac{(2N)!}{2^N}$. Vậy, nếu giá trị ban đầu của x là $0$, phân phối các giá trị x có thể nhận được sau khi $N$ luồng kết thúc thực thi là gì?

Dữ liệu vào

Dòng đầu tiên chứa số nguyên $N$. ($1 \leq N \leq 200000$)

Dữ liệu ra

Dòng đầu tiên in ra số lượng $M$ các giá trị x có thể đạt được.

Từ dòng tiếp theo, in ra $M$ dòng, mỗi dòng chứa một giá trị x có thể đạt được và số cách thực hiện các luồng để thu được giá trị x đó, lấy phần dư cho $998244353$. Nếu có nhiều giá trị x khả thi, hãy in tất cả theo thứ tự tăng dần của x.

$998\,244\,353 = 119 \times 2^{23} + 1$ là một số nguyên tố.

Ví dụ

Dữ liệu vào 1

2

Dữ liệu ra 1

2
1 4
2 2

Dữ liệu vào 2

100

Dữ liệu ra 2

100
... [89 more lines] ...
90 729889561
91 145721628
92 477239109
... [8 more lines] ...

Ghi chú

Gọi hai luồng là A và B, các bước của mỗi luồng lần lượt là A1, A2 và B1, B2. Giá trị của x theo thứ tự thực thi luồng như sau:

  • A1 A2 B1 B2: $x = 2$
  • A1 B1 A2 B2: $x = 1$ (Ví dụ này đã được sử dụng trong bài toán)
  • A1 B1 B2 A2: $x = 1$
  • B1 A1 A2 B2: $x = 1$
  • B1 A1 B2 A2: $x = 1$
  • B1 B2 A1 A2: $x = 2$

Ví dụ 2 có kết quả quá dài nên chỉ hiển thị một phần. Trên thực tế, bạn phải in ra đầy đủ tất cả các dòng mà không được lược bỏ.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.