สมมติว่าเรามีตัวเลข d พิจารณาว่ามีจำนวนไม่สิ้นสุดของแผ่นสี่เหลี่ยมจัตุรัสและกระเบื้องสามเหลี่ยมปกติที่มีความยาวด้าน 1 เราต้องค้นหาว่าเราสามารถสร้างรูปหลายเหลี่ยมปกติ (รูปหลายเหลี่ยม 12 ด้าน) ที่มีด้าน d โดยใช้กระเบื้องเหล่านี้ได้หลายวิธี หากคำตอบมีขนาดใหญ่เกินไป ให้คืนค่า mod ผลลัพธ์ 998244353
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้-
b := floor of d/2 - 1 c := 1 for initialize i := 2, when i < d, update (increase i by 1), do: b := b * (floor of d/2) c := c * i return (b / c)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; int solve(int d){ int b = ((d << 1) - 1); int c = 1; for (int i = 2; i < d; i++){ b *= (d << 1) - i; c *= i; } return (b / c); } int main(){ int d = 1; cout << solve(d) << endl; }
อินพุต
1
ผลลัพธ์
1