P1018,0pts,AC#14
查看原帖
P1018,0pts,AC#14
169594
Heart_Of_Iron_4楼主2023/7/14 18:21

rt

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define FOR(qw,we,er) for(int qw=we;qw<=er;++qw)
const short wrnmb=45,fuck=8;
struct gjd
{
	int q[50],len;
	bool operator >(gjd qw)
	{
		if(len!=qw.len)return len>qw.len;
		else
		{
			FOR(i,-len,-1)
			{
				if(q[-i]!=qw.q[-i])return q[-i]>qw.q[-i];
			}
			return 114514;
		}
	}
}f[wrnmb][fuck];
int n,k,a[114][114];
gjd int2gjd(int qw)
{
	gjd temp1;
	temp1.len=0;
	while(qw)
	{
		temp1.q[++temp1.len]=qw%10;
		qw/=10;
	}
	return temp1;
}
gjd clean(gjd qwer)
{
	while(qwer.q[qwer.len]==0)qwer.len--;
	return qwer;
}
gjd operator *(gjd qw,gjd we)
{
	if(qw.len==0&&we.len==0)return qw;
	gjd temp;
	temp.len=qw.len+we.len-1;
	temp.q[temp.len+1]=0;
	int jw=0;
	FOR(i,1,qw.len)
	{
		jw=0;
		FOR(j,1,we.len)
		{
			temp.q[i+j-1]=qw.q[i]*we.q[j]+jw;
			if(temp.q[i+j-1]>=10)jw=temp.q[i+j-1]/10,temp.q[i+j-1]%=10;
		}
		if(jw>0)temp.q[i+we.len]=jw;
	}
	if(temp.q[temp.len+1]!=0)temp.len++;
	clean(temp);
	return temp;
}
gjd operator *(gjd qw,int we)
{
	gjd temp1=int2gjd(we);
	temp1=qw*temp1;
	return temp1;
}
int print(gjd qwer)
{
	FOR(i,-qwer.len,-1)putchar(qwer.q[-i]+'0');
	return 114514;
}
bool operator <(gjd qw,gjd we)
{
	return !(qw>we);
}
signed main()
{
	scanf("%lld%lld",&n,&k);
	FOR(i,1,n)
	{
		scanf("%1lld",&a[i][i]);
	}
	FOR(i,2,n)
	FOR(j,1,n-i+1)
	{
		a[j][j+i-1]=a[j][j+i-2]*10+a[j+i-1][j+i-1];
	}
	FOR(i,1,n)f[i][0]=int2gjd(a[1][i]);
	FOR(i,1,n-1)FOR(j,0,k-1)FOR(l,1,n-i)
	{
		f[i+l][j+1]=max(f[i+l][j+1],f[i][j]*a[i+1][i+l]);
		clean(f[i+l][j+1]);
		/*printf("%lld %lld\n",i+l,j+1);
		print(f[i+l][j+1]);
		printf("\n");*/
	}
	clean(f[n][k]);
	print(f[n][k]);
	return 0;
}
2023/7/14 18:21
加载中...