社区讨论
什么情况!!!
P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi4f3sol
- 此快照首次捕获于
- 2025/11/18 18:15 4 个月前
- 此快照最后确认于
- 2025/11/18 18:15 4 个月前
我的代码在自己电脑上十个点全过了,可是交上来只有30分!
[codec]
CPP#include<cstdio>
#include<cstring>
int d[85][85][5],a[85][50],t[50],d2[85][50];
int main()
{
int m,n,i,j,k,l,x,temp1[50],temp2[50],o,p,q,max[50],b;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
scanf("%d",&x);
while (x>0)
{
d[i][j][++d[i][j][0]]=x%10;
x/=10;
}
}
d2[0][0]=d2[0][1]=1;
for (i=1;i<=m;i++)
{
x=0;
for (j=1;j<=d2[i-1][0]+1;j++)
{
d2[i][j]=d2[i-1][j]*2+x;
x=d2[i][j]/10;
d2[i][j]%=10;
}
if (d2[i][--j]>0)
d2[i][0]=j;
else
d2[i][0]=j-1;
}
for (i=1;i<=n;i++)
{
memset(a,0,sizeof(a));
for (j=1;j<=m;j++)
for (k=j;k>=0;k--)
{
memset(temp1,0,sizeof(temp1));
memset(temp2,0,sizeof(temp2));
for (l=1;l<=d2[j][0];l++)
for (o=1;o<=d[i][m-j+k+1][0];o++)
temp1[l+o-1]+=d2[j][l]*d[i][m-j+k+1][o];
x=0;
for (l=1;l<=d2[j][0]+d[i][m-j+k+1][0];l++)
{
temp1[l]+=x;
x=temp1[l]/10;
temp1[l]%=10;
}
if (temp1[--l]>0)
temp1[0]=l;
else
temp1[0]=l-1;
x=0;
for (l=1;l<=temp1[0]+1||l<=a[k][0]+1;l++)
{
temp1[l]+=a[k][l]+x;
x=temp1[l]/10;
temp1[l]%=10;
}
if (temp1[--l]>0)
temp1[0]=l;
else
temp1[0]=l-1;//temp1
for (l=1;l<=d2[j][0];l++)
for (o=1;o<=d[i][k][0];o++)
temp2[l+o-1]+=d2[j][l]*d[i][k][o];
x=0;
for (l=1;l<=d2[j][0]+d[i][k][0];l++)
{
temp2[l]+=x;
x=temp2[l]/10;
temp2[l]%=10;
}
if (temp2[--l]>0)
temp2[0]=l;
else
temp2[0]=l-1;
x=0;
for (l=1;l<=temp2[0]+1||l<=a[k-1][0]+1;l++)
{
temp2[l]+=a[k-1][l]+x;
x=temp2[l]/10;
temp2[l]%=10;
}
if (temp2[--l]>0)
temp2[0]=l;
else
temp2[0]=l-1;//temp2
if (temp1[0]>temp2[0])
{
for (l=0;l<=temp1[0];l++)
a[k][l]=temp1[l];
continue;
}
if (temp1[0]<temp2[0])
{
for (l=0;l<=temp2[0];l++)
a[k][l]=temp2[l];
continue;
}
b=0;
for (l=temp1[0];l>=1;l--)
{
if (temp1[l]>temp2[l])
{
b=1;
for (o=0;o<=temp1[0];o++)
a[k][o]=temp1[o];
break;
}
if (temp1[l]<temp2[l])
{
b=1;
for (o=0;o<=temp2[0];o++)
a[k][o]=temp2[o];
break;
}
}
if (!b)
for (l=0;l<=temp1[0];l++)
a[k][l]=temp1[l];
}
memset(max,0,sizeof(max));
for (j=0;j<=m;j++)
{
if (a[j][0]>max[0])
{
for (k=0;k<=a[j][0];k++)
max[k]=a[j][k];
continue;
}
if (max[0]>a[j][0])
continue;
for (k=max[0];k>=1;k--)
{
if (a[j][k]>max[k])
{
for (l=0;l<=a[j][0];l++)
max[l]=a[j][l];
break;
}
if (max[k]>a[j][k])
break;
}
}
x=0;
for (j=1;j<=t[0]+1||j<=max[0]+1;j++)
{
t[j]+=x+max[j];
x=t[j]/10;
t[j]%=10;
}
if (t[--j]>0) t[0]=j;
else t[0]=j-1;
}
for (i=t[0];i>=1;i--)
printf("%d",t[i]);
if (t[0]==0) printf("0");
printf("\n");
}
[/codec]
回复
共 2 条回复,欢迎继续交流。
正在加载回复...