#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的输出格式是否先于答案正确性判断......个人感觉没写假啊?
实在不行处理的时候换一种方式再写一遍