| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:公式数学推导In Reply To:公式数学推导 Posted by:CSUST_14 at 2013-04-20 11:03:03 #include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N =10005;
typedef __int64 LL;
LL C[N],T[N],H[N],M[N],S[N],sum[N];
LL Sum;
LL ar[N];
LL a,b;
int n;
void getsum()
{
sum[1] = ar[1];
for(int i=2;i<=n;i++)
sum[i] = sum[i-1] + ar[i];
Sum = sum[n];
}
void getTH()
{
T[1] = b*ar[1];
H[1] = 0;
for(int i=2;i<=n;i++)
T[i] = T[i-1] + b*ar[i], H[i] = H[i-1] + sum[i-1];
}
void getMS()
{
M[n] = 0;
S[n] = 0;
for(int i=n-1;i>=1;i--)
M[i] = M[i+1] + (1-a)*ar[i+1],S[i] = S[i+1] + Sum - sum[i];
}
void getczero()
{
C[1] = 0;
for(int i=2;i<=n;i++)
C[1] += ar[i] * (a*(i-1) + (i-1)*(i-2)/2);
}
void getC()
{
for(int i=2;i<=n;i++)
C[i] = C[i-1] + T[i-1] + H[i-1] + M[i-1] -S[i-1];
}
int getMin()
{
LL Min = C[1];
int index = 1;
for(int i=2;i<=n;i++)
if(Min>C[i]) Min = C[i],index = i;
return index;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%I64d%I64d",&n,&a,&b);
for(int i=1;i<=n;i++)
scanf("%I64d",&ar[i]);
getsum();
getTH();
getMS();
getczero();
getC();
printf("%d\n",getMin());
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator