Codeforces 997B Roman Digits【暴力】【枚舉】
阿新 • • 發佈:2018-07-02
printf https urn lse ans def can eight png
缺欠的是做題的思路,當看到這道題發現n是10^9級別,第一反應是得找到一個公式。但怎麽找沒想出來。
滿足i+j+k+p = n (i,j,k,p分別是1,5,10,50取的個數),我們可以用n^3代價(枚舉i,j,k)n比較小的時候的答案,並試著從枚舉得到的答案裏找到規律。
事實也確實能從中找到規律,n從12開始就是等差數列了,方差49。
這題說難不難,但當時卡了很多人。
缺少的是一種思路吧。
也確實第一道遇到的半打表ac的題
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long n,z,ans; 4 longlong dfs(int x) 5 { 6 map<long long,int>ma; 7 ma.clear(); 8 long long num=0; 9 for(int i=0;i<=x;i++) 10 for(int j=0;j+i<=x;j++) 11 for(int k=0;k+i+j<=x;k++) 12 { 13 z=i+j*5+k*10+(x-i-j-k)*50; 14 if(!ma[z]) {ma[z]=1;num++;} 15 } 16 returnnum; 17 } 18 int main() 19 { 20 scanf("%lld",&n); 21 if(n<=20) ans=dfs(n); 22 else ans=dfs(20)+(n-20)*49; 23 printf("%lld\n",ans); 24 return 0; 25 }
代碼是從這裏摘的,沒有自己寫了
https://blog.csdn.net/qq_37868325/article/details/80879686
Codeforces 997B Roman Digits【暴力】【枚舉】