ポータル: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 ; }