hdu(4655-打表找规律)

来源:互联网 发布:linux route写入配置 编辑:程序博客网 时间:2024/06/06 19:02
#include<cstdio>#include<iostream>#include<cstdlib>#include<algorithm>#include<cmath>#include<string>#include<cstring>#include<set>#include<map>#include<list>#include<queue>#include<vector>#define tree int o,int l,int r#define lson o<<1,l,mid#define rson o<<1|1,mid+1,r#define lo o<<1#define ro o<<1|1#define LL long long#define UI unsigned int#define inf 0x7fffffff#define eps 1e-7#define M 1000000007#define N 1000009using namespace std;int T,n;LL a[N],b[N],c[N],num[N],ji[N];LL ans;LL fun(){    num[0]=b[0];    ji[0]=b[0];    for (int i=1; i<n; ++i )    {        num[i]=(b[i]*num[i-1])%M;        if(i==1)        {            num[i]=(num[i]+(min(b[i],b[i-1])*(b[i-1]-1)%M))%M;            if(b[i]>b[i-1])                num[i]=(num[i]+((b[i]-b[i-1])*(b[i-1])%M))%M;        }        else        {            num[i]=(num[i]+(((min(b[i],b[i-1])*(b[i-1]-1))%M)*ji[i-2]%M))%M;            if(b[i]>b[i-1])                num[i]=(num[i]+((((b[i]-b[i-1])*(b[i-1]))%M)*ji[i-2]%M))%M;        }        ji[i]=(ji[i-1]*b[i])%M;    }    return num[n-1];}int main(){#ifndef ONLINE_JUDGE    freopen("ex.in","r",stdin);#endif    int ncase=0;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        for (int i=0; i<n; ++i )            scanf("%I64d",&a[i]);        sort(a,a+n);        int l=0,r=n-1;        for (int i=0;i<n;++i )        b[i]=(i&1)?a[r--]:a[l++];//        int j=0,i=0;//打表找规律!//        for(; j<n; i++)//        {//            b[j]=a[i];//            j+=2;//        }//        if(n%2==0)//        {//            b[n-1]=a[i++];//            j=1;//            for(; i<n; i++)//            {//                b[j]=a[i];//                j+=2;//            }//        }//        else//        {//            j=1;//            for(; i<n; i++)//            {//                b[j]=a[i];//                j+=2;//            }//        }        printf("%I64d\n",fun());    }    return 0;}

原创粉丝点击