hustoj problem:5434配列和(付加題)

1039 ワード

タイトルリンク
ProblemO:配列加算(付加題)Time Limit:1 Sec Memory Limit:128 MB Submit:224 Solved:17[Submit][Status][Web Board]Descriptionは1次元配列a[]を与え,その完全値を要求する.各a[i]*a[i]*a[i+1]+a[i]*a[i+2]+a[i]*a[i+3]+…+a[i]*a[n]を求める値はTOT[i],パーフェクト値はTOT[i]の和となる.しかし、完璧な値は大きいかもしれません.難易度を下げるために、完璧な値を10007に対して型を取った結果Inputの最初の行:配列長Nを出力します.
次に、N個の整数(保証はいずれも10000未満)が配列aである.Outputパーフェクト値.Sample Input 5 5 4 3 2 1 Sample Output 85【サンプル説明】Tot[1]=54+53+52+51=50;Tot[2]=43+42+41=24; Tot[3]=32+31=9; Tot[4]=21=2; Tot[5]=0; 完璧な値は50+24+9+2+0=85です.85 mod 10007=85【データ範囲】上位30%データ:N<=100配列要素の値<=500上位70%データ:N<=10000配列要素の値<=10000対100%データ:N<=100,000配列要素の値<=10000
題目分析:この問題は乗算分配法則で解決することができて、配列を逆さまにして、5,4,3,2,1で、結果が0の1段をスキップして、分配法則の括弧の部分は毎回循環してtot[i-1]を増加して、コードは以下の通りです:
#include
using namespace std;
long long ans;
int sum;
int main()
{
    int n;
    scanf("%d",&n);
    long long tot[n];
    for(int i=n-1;i>=0;i--)
        scanf("%lld",&tot[i]);
    for(int i=1;i