1. 程式人生 > >CodeForces ~ 998D ~ Roman Digits (打表找規律)

CodeForces ~ 998D ~ Roman Digits (打表找規律)

題意

四個羅馬數字'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;
}