CF997B Roman Digits-這很規律!
阿新 • • 發佈:2018-12-24
題目連結
我們在研究羅馬數字。羅馬數字只有4個字元,I,V,X,L分別代表1,5,10,100。一個羅馬數字的值為該數字包含的字元代表數字的和,而與字元的順序無關。例如XXXV=35,IXI=12.
現在求問一個長度為 nn 的羅馬數字可以有多少種不同的值。( n \leq 10^9n≤1e9 )
思路:
其實沒什麼思路,就是到前面的13個開始忽然有了規律,後面的,+49即可,
不附加AC程式碼了,給一個打表的三重迴圈吧,
AC 程式碼的話,可以前面的暴力出結果後面的就可以等差了
#include <bits/stdc++.h> using namespace std ; long long ans,n ; long long dfs(int x) { map<long long,int> a ; a.clear() ; long long sum=0 ; for (int i=0; i<=x; i++) for (int j=0; i+j<=x; j++) for (int k=0; i+j+k<=x; k++) { long long t=i+j*5+k*10+(x-i-j-k)*50 ; if (!a[t]) { a[t]=1 ; sum++ ; } } return sum ; } int main() { cin>>n; for(int i=1;i<=n;i++) { cout<<dfs(i)<<" "; if(i%5==0) cout<<endl; } return 0; }