关于更新了一些数据点
查看原帖
关于更新了一些数据点
761743
Pentatonic_Vi0lin楼主2023/7/30 18:31

在用小号切水题时意外发现以前AC的代码过不了后几个点,虽然还是100pts但是显示unaccept

浪费使用了一次下载数据点,发现是结果为零时代码没有输出,去题解区看了一眼,发现还是有不少代码没考虑到这一点 (如果有大佬之前就想到了这一点,当我没说),补了一个特判又A掉了,弱弱地出来说句话,,,,,

#include<bits/stdc++.h>
using namespace std;
string s1;
int m[1001],n[1001],N[200],s[80],K;
struct data {
	int num[100];
} f[60][60],ans,a[50][50];
bool cmp(int x[],int y[]) {
	if(x[0]!=y[0])
		return x[0]>y[0];
	for(int p=x[0]; p>=1; p--) {
		if(x[p]>y[p]) {
			return 1;
		}
		if(x[p]<y[p]) {
			return 0;
		}
	}
	return 0;
}
void mul(int n[],int m[]) {
	int j1,j2;
	memset(s,0,sizeof(s));
	s[0]=n[0]+m[0];
	for(j1=1; j1<=n[0]; j1++) {
		for(j2=1; j2<=m[0]; j2++) {
			s[j1+j2-1]+=n[j1]*m[j2];
			s[j1+j2]+=s[j1+j2-1]/10;
			s[j1+j2-1]%=10;
		}
	}
	while(!s[s[0]])
	{
		s[0]--;
	}
}
void record(int p1,int p2)
{
	int i,j=0;
	a[p1][p2].num[0]=p2-p1+1;
	for(i=p1;i<=p2;i++)
	{
		a[p1][p2].num[++j]=N[i];
	}
}
int main() {
	cin>>N[0]>>K;
	int i,j,k;
	cin>>s1;
	for(i=N[0],j=0;i>=1;i--,j++)
	{
		N[i]=int(s1[j]-'0');
	}
	for(i=1;i<=N[0];i++)
	{
		for(j=i;j<=N[0];j++)
		{
			record(i,j);
		}
	}
	for(i=1;i<=N[0];i++)
	{
		memcpy(f[i][0].num,a[1][i].num,sizeof(a[1][i].num));
	}
	for(k=1;k<=K;k++)
	{
		for(i=k+1;i<=N[0];i++)
		{
			for(j=k;j<i;j++)
			{
				memset(s,0,sizeof(s));
				mul(f[j][k-1].num,a[j+1][i].num);
				bool flag=cmp(s,f[i][k].num);
				if(flag)
					memcpy(f[i][k].num,s,sizeof(s));
			}
		}
	}
	for(i=f[N[0]][K].num[0];i>=1;i--)
	{
		cout<<f[N[0]][K].num[i];
	}
	if(f[N[0]][K].num[0]<1)cout<<0;//新加上这一句
	return 0;
}

2023/7/30 18:31
加载中...