QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Hackable ✓

#4658. นำก้อนหินออก

Statistics

คุณกำลังเล่นเกมเล็ก ๆ ชื่อ “นำก้อนหินออก”

มีกองหิน $n$ กองเรียงเป็นแถว กองที่ $i$ มีหิน $a_i$ ก้อน งานของคุณคือนำหินทั้งหมดออกด้วยการดำเนินการต่อไปนี้:

  • การดำเนินการที่หนึ่ง: เลือกกองหินหนึ่งกอง แล้วนำหินออกจากกองนั้นอย่างน้อย 2 ก้อน
  • การดำเนินการที่สอง: เลือกช่วงหมายเลขที่ต่อเนื่องกัน $[l,r]$ ($1 \le l \le r \le n$) โดยต้องมี $r-l \ge 2$ แล้วนำหินออกจากทุกกองในช่วงนั้นกองละ 1 ก้อนพอดี

คุณดำเนินการทั้งสองชนิดข้างต้นได้กี่ครั้งก็ได้และในลำดับใดก็ได้ จนไม่สามารถดำเนินการต่อได้ หากสุดท้ายนำหินทั้งหมดออกได้ คุณจะชนะ

คุณอาจเริ่มคำนวณคำถามอย่าง “มีวิธีดำเนินการที่แตกต่างกันโดยเนื้อแท้กี่วิธี” ไปแล้ว แต่เมื่อเล่นจริงกลับพบว่าตนเองแพ้เสมอ ดังนั้นคุณจึงคิดจะใช้ลูกเล่นเล็กน้อย: ตอนเริ่มเกมคุณแอบซ่อนหิน $k$ ก้อนไว้ในมือ ก่อนดำเนินการใด ๆ คุณสามารถและต้องใส่หินเหล่านี้ลงในกองหินหนึ่งกองหรือหลายกอง คุณคาดว่าจะช่วยเพิ่มโอกาสชนะ แต่ก็รู้ว่าอาจทำให้แพ้เกมที่เดิมมีโอกาสชนะได้เช่นกัน

ขณะนี้คุณเลือกสถานะเริ่มต้นเพื่อเล่นได้อย่างอิสระ กล่าวคือ $a_i$ แต่ละค่าจะเลือกเป็นจำนวนเต็มใด ๆ ในช่วง $[l_i,r_i]$ ก็ได้ คุณต้องการคำนวณว่ามีสถานะเริ่มต้นกี่แบบที่คุณมีวิธีชนะอย่างน้อยหนึ่งวิธี เนื่องจากคำตอบมีค่ามาก ให้พิมพ์เพียงเศษเมื่อหารด้วย $10^9+7$ สถานะเริ่มต้นสองสถานะแตกต่างกันก็ต่อเมื่อมีอย่างน้อยหนึ่ง $1 \le i \le n$ ซึ่งค่า $a_i$ ของทั้งสองสถานะไม่เท่ากัน โปรดทราบว่า “สถานะเริ่มต้น” ในที่นี้หมายถึงสถานะก่อนคุณใส่หิน $k$ ก้อนลงไป

ข้อมูลนำเข้า

อ่านข้อมูลจากไฟล์ stone.in

โจทย์นี้มีข้อมูลทดสอบหลายชุด บรรทัดแรกมีจำนวนเต็มบวก $T$ แทนจำนวนชุดข้อมูล จากนั้นให้ข้อมูลแต่ละชุดตามลำดับ

สำหรับแต่ละชุด บรรทัดแรกมีจำนวนเต็มสองจำนวน $n,k$ แทนจำนวนกองหินและจำนวนหินที่เพิ่มตามลำดับ อีก $n$ บรรทัดถัดมา แต่ละบรรทัดมีจำนวนเต็มไม่เป็นลบสองจำนวน $l_i,r_i$ แทนช่วงจำนวนหินเริ่มต้นของแต่ละกอง

ข้อมูลส่งออก

เขียนผลลัพธ์ลงไฟล์ stone.out

สำหรับแต่ละชุดข้อมูล พิมพ์จำนวนเต็มหนึ่งจำนวนในหนึ่งบรรทัด แทนจำนวนสถานะที่อาจชนะได้ หารเอาเศษด้วย $10^9+7$

ตัวอย่าง

ข้อมูลนำเข้า 1

1
4 1
0 1
0 1
0 1
0 1

ข้อมูลส่งออก 1

14

หมายเหตุ

มีสถานะเริ่มต้นที่เป็นไปได้ทั้งหมด $2^4=16$ แบบ พิสูจน์ได้ว่านอกจาก $(0\ 0\ 0\ 0)$ และ $(1\ 0\ 0\ 1)$ ที่ไม่อาจชนะได้แล้ว สถานะเริ่มต้นอื่นล้วนมีวิธีชนะ ตัวอย่างเช่น หากสถานะเริ่มต้นเป็น $(1\ 0\ 1\ 0)$ คุณใส่หิน 1 ก้อนในมือลงในกองที่ $2$ ให้สถานะกลายเป็น $(1\ 1\ 1\ 0)$ แล้วใช้การดำเนินการที่สองกับช่วง $[1,3]$ หนึ่งครั้งก็พอ

ตัวอย่าง 2

ดูไฟล์ stone/stone2.in และ stone/stone2.ans ในไดเรกทอรีของผู้เข้าแข่งขัน

ตัวอย่าง 3

ดูไฟล์ stone/stone3.in และ stone/stone3.ans ในไดเรกทอรีของผู้เข้าแข่งขัน

ตัวอย่าง 4

ดูไฟล์ stone/stone4.in และ stone/stone4.ans ในไดเรกทอรีของผู้เข้าแข่งขัน

ข้อจำกัด

สำหรับข้อมูล $100\%$ รับประกันว่า $T \le 10$, $3 \le n \le 1000$, $0 \le l_i \le r_i \le 10^9$, $0 \le k \le 100$

หมายเลขกรณีทดสอบ $n \le$ $k \le$ เงื่อนไขพิเศษ
$1$–$3$ $5$ $2$ $r_i \le 5$
$4$–$5$ $1000$ $0$ $l_i=r_i$
$6$–$8$ $1000$ $100$ $l_i=r_i$
$9$–$11$ $1000$ $0$ ไม่มี
$12$–$13$ $1000$ $2$ ไม่มี
$14$–$15$ $1000$ $100$ $r_i \le 10$
$16$–$20$ $1000$ $100$ ไม่มี

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#1306EditorialOpenkawaii rainstopqwqGotoHiotoriView

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.