CF 515 DIV3 E

ポータル:http://codeforces.com/contest/1066/problem/E

質問の意味:2つの2進数、B、右1 B&Bの加算の結果は、A、B == 0になるまで&Bの結果を合計し続けるたびに

          、Bの長さ<= 2E5、モジュロ998 244 353結果

この質問アイデアや特定の質問ブラシと一致アイデア、すぐに考え、

A&B、ビット単位と、場合[I] == 1件の&& B [j]が2のビット重みの電力の印加時== 1

たとえば、  

     543210

100101

B 10111

年+ = 2 ^ 0 + 2 ^ 2

B右1

   543210

100101

B 1011

   ......

 

0からの「1」ビットのそれぞれに「1」に対応するビット、B、統計の数に、固定された、2のべき乗を乗じ、対応するビットが友人とすることができることを見出しました

接尾辞aとbに従事するために、横断、統計を要約することができます

書式#include <アルゴリズム> 
書式#include <iostreamの> 
の#include <cstdioを> 
する#include <cstdlib> 
書式#include <cmath> 
の#include <CStringの> 
の#include < 文字列 > 
の#include <マップ> 
書式#include <キュー> 
の#include <スタック> 
書式#include <リスト> 
の#include < 設定 >
 使用して 名前空間はstdを、
typedefの長い 長いLL。
typedefの対 <-1,11,11-> P。
typedefの長い ダブルLD;
MEM(X)のmemset(X、0、はsizeof(x))を
 #defineする私(X)のmemset(x、-1、はsizeof(X))
 の#define(I = 0(I、n)をFOと、iがn < ; I ++)
 の#define SC(X)のscanf( "%I64d"、およびX)
 の#define SCA(N、M)のscanf( "%のLLDの%のLLD"、&N、&M)
 の#define PR(X)のprintf( "%I64d \ n」、X)
 の#define PRI(X)のprintf( "%のLLD"、X)
 の#define lowbit(x)はxおよび-x
 CONST LL MOD = 998244353 constの LLのOO = 1E18;
CONST LL N = 2E6 + 5 
LL和[N]。
INT メイン()
{ 
    LL I、J、K。
    LL N、M、T。メートル;
    文字列S、P。
    CIN >> S >> P;
    (i = M- 1 ; I> = 0 ; i-- 
    { 
        場合(P [I] == ' 1 ')は、k = 1 のk = 0 ; 
        和[I] =和[I + 1 ] + K。
    } 
    K = 1 
    LL ANS = 0 以下のための(I = N- 1、J = M- 1 ; iは> = MAX(0LL、NM)、I - 、j-- 
    { 
        もし(S [I] == ' 1 ' 
        ANS + =(和[ 0 ] -sum [J + 1 ])* K、ANS%= MOD。
        K * = 2 ; K%= MOD。
    } 
    COUT << ANS << ENDL。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/op-z/p/11345901.html