社区讨论
萌新求助,O(nv)的算法T了后4个点
P4933大师参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @locv66wr
- 此快照首次捕获于
- 2023/10/30 20:16 2 年前
- 此快照最后确认于
- 2023/11/05 06:48 2 年前
RT,洛谷的机子 1s 大概跑多少啊,或者我这份代码有没有可以显著优化的地方。(除了改为 的三亚部分
CPP#include<cstdio>
#include<algorithm>
using namespace std;
long long mod=998244353;
long long f[1005][50005],g[200005];//f[i][j]表示到i为止公差为j的方案数。
long long a[1005];
long long max(long long x,long long y)
{
if(x>y)return x;
return y;
}
long long min(long long x,long long y)
{
if(x<y)return x;
return y;
}
inline long long read() {
char ch = getchar(); long long x = 0, f = 1;
while(ch < '0' || ch > '9') {
if(ch == '-') f = -1;
ch = getchar();
} while('0' <= ch && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
} return x * f;
}
int main()
{
int n;
long long tmp=20000;
scanf("%d",&n);
long long Max=0,Min=1000000000;
for(int i=1;i<=n;i++)
{
a[i]=read();
//scanf("%lld",&a[i]);
Max=max(Max,a[i]);
Min=min(Min,a[i]);
//f[i][0]=1;
}
//f[1]=1;
/*for(long long d=-20000;d<=20000;d++)
{
g[d+tmp]=1;
}*/
long long ans=0,qaq,qwq;
long long orz=Max-Min;
for(register long long d=-orz;d<=orz;d++)
{
for(register int i=1;i<=n;i++)
{
g[a[i]+2*tmp]=0;
}
qaq=d+tmp;
for(register int i=1;i<=n;i++)
{
qwq=a[i]+2*tmp;
f[i][qaq]=g[qwq-d];
f[i][qaq]%=mod;
g[qwq]+=f[i][qaq]+1;
g[qwq]%=mod;
ans+=f[i][qaq];
ans%=mod;
}
}
/*long long ans=0;
for(long long d=-20000;d<=20000;d++)
{
ans+=f[d];
ans=ans%mod;
}*/
printf("%lld\n",(ans+n)%mod);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...