求助,PE与WA之间反复横跳
查看原帖
求助,PE与WA之间反复横跳
456724
2020kanade楼主2022/4/8 18:19
#include<bits/stdc++.h>
using namespace std;
typedef int LL;
const LL N=1010,mod=1e9+7;
LL C[N],n,m;
inline LL lbit(LL x) {return x&-x;}
inline void cha(LL x,LL k) {k%=mod;while(x<=n+1 && x>=0) C[x]=(C[x]+k)%mod,x+=lbit(x);}
inline LL sum(LL x) {LL ans=0;while(x) ans=(C[x]+ans%mod)%mod,x-=lbit(x);return ans%mod;}
LL a[N],dp[N][N],T,drc[N],len,ans;
inline LL qidx(LL x) {return lower_bound(drc+1,drc+len+1,x)-drc;}
inline LL qread()
{
    LL a=0,f=1;char ch=getchar();
    while(ch<'0' || ch>'9') {if(ch=='-') f*=-1;ch=getchar();}
    while(ch>='0' && ch<='9') {a=a*10+ch-'0';ch=getchar();}
    return a*f;
}
int main()
{
    T=qread();
    for(LL fuck=1;fuck<=T;++fuck)
    {
        ans=0;
        n=qread(),m=qread();
        for(LL i=1;i<=n;++i) drc[i]=a[i]=qread();
        sort(drc+1,drc+n+1);len=unique(drc+1,drc+n+1)-drc-1;
        for(LL i=1;i<=n;++i) dp[1][i]=1;
        for(LL i=2;i<=m;++i) 
        {
            memset(C,0,sizeof(C));
            for(LL j=1;j<=n;++j)
            {
                LL k=qidx(a[j]);
                dp[i][j]=sum(k-1)%mod,cha(k,dp[i-1][j]);
            }
        }
        for(LL i=1;i<=n;++i) (ans+=dp[m][i])%=mod;
        printf("Case #%I64d: %I64d",fuck,ans);if(fuck!=T) putchar('\n');
    }
    return 0;
}

以上代码在UvaOJ发送测试结果的邮箱中显示为WA,而如果把数据处理部分最后一行改成直接在printf中输出换行符,并不特判最后一行不进行换行则是显示PE(格式错误)。

不知道UvaOJ的输出格式是否先于答案正确性判断......个人感觉没写假啊?

实在不行处理的时候换一种方式再写一遍

2022/4/8 18:19
加载中...