CodeForces ~ 998D ~ Roman Digits (打表找規律)
阿新 • • 發佈:2018-12-24
題意
四個羅馬數字'I','V','X','L'分別表示1,5,10,50,問用這四個羅馬數字組成一個長度為n的串能夠表示多少個數字?“XI”和“IX”相等都表示的是11。
題解
當時沒做出來,後來補的。暴力計算前面一小部分資料,可以發現從11往後是等差數列,公差為49。注意開long long即可
AC程式碼:
#include <bits/stdc++.h> using namespace std; const int MAXN = 505; const int a[12] = {0,4,10,20,35,56,83,116,155,198,244,292}; long long n, ans; int main() { scanf("%lld", &n); if (n <= 11) ans = a[n]; else ans = a[11]+(n-11)*49; printf("%lld", ans); return 0; }
打表程式:
#include <bits/stdc++.h> using namespace std; const int MAXN = 505; set<int> s, t; int main() { s.insert(1); s.insert(5); s.insert(10); s.insert(50); printf("1 4\n"); for (int i = 2; i <= 20; i++) { t.clear(); for (auto i: s) { t.insert(i+1); t.insert(i+5); t.insert(i+10); t.insert(i+50); } s = t; printf("%d %d\n", i, s.size()); } return 0; }