社区讨论
40分求组
P1043[NOIP 2003 普及组] 数字游戏参与者 7已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mi7crkn7
- 此快照首次捕获于
- 2025/11/20 19:33 4 个月前
- 此快照最后确认于
- 2025/11/20 19:33 4 个月前
CPP
#include<bits/stdc++.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
#define ll long long
#define mod 10
ll a[205],sum[205];
ll Max[205][205][15];
ll Min[205][205][15];
inline ll read() {
ll f = 1, x = 0; char ch;
do { ch = getchar(); if (ch == '-')f = -1; } while (ch<'0' || ch>'9');
do { x = x * 10 + ch - '0'; ch = getchar(); } while (ch >= '0'&&ch <= '9');
return f * x;
}
ll calc(ll x){
return (x%10+10)%10;
}
int main()
{
ll n,m;scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++)
a[i]=a[i+n]=read();
for(ll i=1;i<=n*2;i++)
sum[i]=sum[i-1]+a[i];
memset(Min,0x7f,sizeof(Min));
for(ll i=1;i<=n*2;i++)
for(ll j=i;j<=n*2;j++)
Max[i][j][1]=Min[i][j][1]=calc(sum[j]-sum[i-1]);
for(ll len=2;len<=m;len++)
for(ll i=1;i<=2*n-len+1;i++)
for(ll j=i+len-1;j<=2*n;j++)
for(ll k=i+len-1;k<j;k++)
{
ll h=calc(sum[j]-sum[k-1]);
Max[i][j][len]=max(Max[i][j][len],Max[i][k-1][len-1]*h);
Min[i][j][len]=min(Min[i][j][len],Min[i][k-1][len-1]*h);
}
ll ans1=0x7ffffff,ans2=0;
for(ll i=1;i<=n;i++)
{
ans1=min(ans1,Min[i][i+n-1][m]);
ans2=max(ans2,Max[i][i+n-1][m]);
}
printf("%lld\n%lld",ans1,ans2);
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...