洛谷P4708 畫畫題解
阿新 • • 發佈:2021-08-07
打表經典題。
手算一下:
n | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
ans | 1 | 1 | 2 | 3 | 7 | 16 |
oeis上查一下,表在這裡
這時候輸入表,直接高精取餘即可。
打表程式:
#include<iostream> #include<cstring> using namespace std; long long check(string a){//對998244353取餘 long long ans=0; for(int i=0;i<a.length();i++){ ans=(ans*10+a[i]-'0')%998244353; } return ans; } int main(){ freopen("smal.in","r",stdin);//一定要加,不加複製不了表 freopen("smal.out","w",stdout); long long ans; int bh; string s; for(int i=0;i<50;i++){ cin>>bh>>s; ans=check(s); cout<<ans<<",";//輸出表 } fclose(stdin); fclose(stdout); return 0; }
Code:
#include<iostream> using namespace std; int a[51]={0,1,1,2,3,7,16,54,243,2038,33120,1182004,87723296,907260828,445874017,131059413,750854059,85710140,46269468,106575268,569924828,477980796,853121491,916490672,848722293,179336057,577163661,709912061,916083428,988859367,286999618,29547862,713350279,194424628,553076032,609634772,876525030,182311698,148716617,346128108,650982654,373128192,361260409,524419271,834718796,514750301,478609700,386216865,881562716,715225681,602577017}; int main(){ int n; cin>>n; cout<<a[n]; return 0; }