Codeforces D.インター旅行

件名の説明:

旅行D.インター

テストあたりの時間制限

1.5秒

テストごとのメモリ制限

256メガバイト

入力

標準入力

出力

標準出力

LEHAはモスクワからサラトフへの彼の旅を計画しています。彼は列車を嫌って、彼は車で別の都市から取得することを決定しました。

モスクワからサラトフへのパスは、直線(まあ、それはまっすぐに現実にはいないのですが、この問題では、我々はそれがまっすぐであることを考慮します)のように表すことができ、そしてモスクワとサラトフとの間の距離であるn個

キロ。のは、モスクワを座標キロでポイントに位置しているとしましょう、とサラトフ-座標でのnを

長時間の運転は本当に難しいかもしれません。正式には、LEHAは既にカバーされている場合は、私を

彼は残りの部分を持っているために停止して以来、彼のように覆っ番目キロの難しさを考慮キロメートル* ** I * + 1

旅の難しさは、旅の各キロの難しさの和として表されます。

幸いなことに、モスクワとサラトフの間にいくつかの休憩所があるかもしれません。1からすべての整数点

残りの部位を含んでいてもよいです。LEHAは、残りのサイトに入ると、彼は残りの部分を有していてもよく、そして次のキロは困難を持っています1

、 等々。

例えば、もしN = 5

座標における残りの部位があり、旅の難しさは2になります1 + 2 2+ - 3、第1 - 2、第四の場合:2.別の例のn = 7,5

LEHAは整数点が残り部位を含んでいるかを知りません。そこで彼は、あらゆる状況を考慮しなければなりません。明らかに、2があるnが -1

休憩所の異なる分布(それはこれらの分布の正確に一つで、残りの部位を含むように、いくつかの点が存在する場合には二つの分布が異なっています)。LEHAは、すべてのこれらの分布は等確率であると考えています。彼は計算したいのpを

もちろん、P ⋅2 N -1

整数です。あなたはそれを計算する必要がモジュロ

入力

最初の行は、一の番号含有Nを

) - モスクワからサラトフまでの距離。

2行目は含まNを

整数、2(1≦ 1≦ 2≦⋯≤* ** N ≤106はの難しさである I *

出力

1つの番号印刷する- pは ⋅2 N -1

、撮影した剰余

入力

コピー

21 2

出力

コピー

5

入力

コピー

41 3 3 7

出力

コピー

60

アイデア:

(血を吐くください食べ物は本質であります要求が権利であることを特徴とする\(P * 1-N-2 ^ {} \) および可能なケースとの合計であるため、(1-N-2 ^ {} \)\このような場合には、実際に確立するために必要とされるすべての休憩難易度、すなわち、いくつかのケースA1 + A2 + ... +いくつかのいくつかと。

反射に、私たちは、このような事実を見つけることができます:a1が発生する可能性が最も高いとの少なくとも傾向がある、実際には、Aに発生しないことがあります。何の休憩を。A1、残りの部分は、単位長さを持っているバックスタンドする必要が表示されるように、A2表示されるように、その上の2つの背もたれ停止部の長さを持っている必要があり、かつます。我々は、n == 4の例を取ることができるように:

A1:0 ---- 1 ---- 2 ---- 3 ---- 4

A1:| ---- |、このセグメントはユニットインターバルの長さを表します。ブレークポイントの範囲のセグメントの前のA1表示されるように、残りの停止を持っている必要がありますが、駅の確立が構築できるの後ろにない、駅の設立の背後にある点は、1,2,3,2 ^ 3可能性を持つことができます

----------- | ---- |、セグメントがこのセクションに移動され、同一のフロントエンド構成は、ステーションを確認する必要があり、2 ^ 2 2,3合計可能続いて、A1が表示され

---------------- | ---- |、ここでは、ステーション3、1駅の目の前に現れることができるかもしれ前項の駅の設立の背後にある事情は^ 2の2種類の、いくつかの違いがありますされています可能

--------------------- | ---- |、1、2はフロントステーション、可能な2 ^ 2の合計であってもよいです

A1のために表示されるように、存在する可能の場合^ 3 + 3 * 2 ^ 2 ^ 2 =(4-1)+(4-1)×2 ^(4-1-1)2

A2:0 ---- 1 ---- 2 ---- 3 ---- 4

A2:| ---------- |、ここでステーションを確保する間隔フロントエンドは、それがA2表示されることがあり、後端が2 ^ 2,3 2の可能な合計を有します

A2:------ | ---------- |、ステーション3の背後にあるフロントエンド・ステーションは、時間から2 ^ 1可能性の合計を構築すること

A2:----------- | ----------- |、ここで、1時間、駅、2 ^ 1可能性の合計缶

A2のために表示されるように、そこに(2 ^ 2 ^ 2 + 2 * 1 = ^ 2} + {4-2(4-2)4-2-1 * 2 ^ {} \)\可能な場合は

同様に、あります

AI、そこ\(2 ^ {NI} + (NI)* 2 ^ {NI-1} \) 可能

最終的な答えが必要\(\ sum_ {i = 1 } ^ {n}は[I] * S [I] \) 値。S [i]は[i]の場合に可能な多数の対応しています

注(特定の)LONGLONGを破裂することが、引き継ぐために常に慎重に、私は+ = ...それを引き継ぐことを忘れて、最終的な合計を書きます、そしてあなたは惨め

だけでなく、ビッグデータを読みますか?同様に、プラス素早く理解することなく、それに読み込ま?ブログの記事を見てください(喜喜)

この問題は、実際には、オペレータ毎に2つの高速電力のないパワー、時間的に考慮することが、O、続いて前処置の配列に直接O(n)は、(1)ライン上で使用することができます

コード:

#include <iostream>
#include <cstdio>
#define max_n 1000005
#define mod 998244353
using namespace std;
int n;
long long a[max_n];
long long s[max_n];
long long mi[max_n] = {1,2,4,8,16,32};
void generator(int n)
{
    for(int i = 6;i<=n;i++)
    {
        mi[i] = (mi[i-1]*2)%mod;
    }
}
inline int read()//整数输入模板
{
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
#pragma optimize(2)
int main()
{
    n = read();
    for(int i = 1;i<=n;i++)
    {
        a[i] = read();
    }
    //s[1] = 1;
    //s[2] = 3;
    //s[3] = 8;
    //s[4] = 20;
    generator(n);
    long long sum = 0;
    for(int i = 1;i<=n;i++)
    {
        s[i] = (mi[n-i]+(mi[n-i-1]*(n-i)))%mod;
        sum = (sum%mod+(s[i]%mod*a[i]%mod)%mod)%mod;
    }
    //cout << "len " << endl;
    /*for(int i = 1;i<=n;i++)
    {
        cout << s[i] << " ";
    }
    cout << endl;*/
    printf("%I64d\n",sum);
    return 0;
}

参考記事:

アイデアは、タイムアウトチャットため(qwq)、コード基準の下で、所有しています

luyehao1、(DIV2 E CFを導出するための数式を)旅行インター、https://blog.csdn.net/luyehao1/article/details/81080860

おすすめ

転載: www.cnblogs.com/zhanhonhao/p/11285549.html