1. 程式人生 > 其它 >洛谷P4708 畫畫題解

洛谷P4708 畫畫題解

打表經典題。

手算一下:

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;
}