HDU 5269 字典树

来源:互联网 发布:java把两个数组合并 编辑:程序博客网 时间:2024/05/29 16:38
<pre class="problem-content" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13px; padding: 9.5px; margin-top: 0px; margin-bottom: 10px; line-height: 1.42857143; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word; border: 1px solid rgb(204, 204, 204); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; background-color: rgb(245, 245, 245);">ZYB喜欢研究Xor,现在他得到了一个长度为<span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-1-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-1" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0.635em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0.575em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.571em 1000em 2.455em -0.626em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-2" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mi" id="MathJax-Span-3" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">n</span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.089em; overflow: hidden; width: 0px; height: 0.639em;"></span></span></nobr></span>的数组A。于是他想知道:对于所有数对<span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-2-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-4" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 10.942em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 10.208em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.263em 1000em 2.694em -0.553em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-5" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mo" id="MathJax-Span-6" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">(</span><span class="mi" id="MathJax-Span-7" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">i</span><span class="mo" id="MathJax-Span-8" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-9" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.167em; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">j</span><span class="mo" id="MathJax-Span-10" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">)</span><span class="mo" id="MathJax-Span-11" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">(</span><span class="mi" id="MathJax-Span-12" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">i</span><span class="mo" id="MathJax-Span-13" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.278em; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">∈</span><span class="mo" id="MathJax-Span-14" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.278em; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">[</span><span class="mn" id="MathJax-Span-15" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-16" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-17" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.167em; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">n</span><span class="mo" id="MathJax-Span-18" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">]</span><span class="mo" id="MathJax-Span-19" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-20" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.167em; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">j</span><span class="mo" id="MathJax-Span-21" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.278em; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">∈</span><span class="mo" id="MathJax-Span-22" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.278em; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">[</span><span class="mn" id="MathJax-Span-23" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-24" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-25" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.167em; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">n</span><span class="mo" id="MathJax-Span-26" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">]</span><span class="mo" id="MathJax-Span-27" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">)</span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.344em; overflow: hidden; width: 0px; height: 1.224em;"></span></span></nobr></span>,<span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-3-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-28" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 7.865em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 7.333em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.263em 1000em 2.739em -0.609em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-29" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mi" id="MathJax-Span-30" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">l</span><span class="mi" id="MathJax-Span-31" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">o</span><span class="mi" id="MathJax-Span-32" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">w</span><span class="mi" id="MathJax-Span-33" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">b</span><span class="mi" id="MathJax-Span-34" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">i</span><span class="mi" id="MathJax-Span-35" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">t</span><span class="mo" id="MathJax-Span-36" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">(</span><span class="msubsup" id="MathJax-Span-37" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.153em; height: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.297em 1000em 2.444em -0.612em); top: -2.229em; left: 0em;"><span class="mi" id="MathJax-Span-38" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">A</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; top: -2.079em; left: 0.791em;"><span class="mi" id="MathJax-Span-39" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12px; font-family: MathJax_Math; font-style: italic;">i</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span></span><span class="mi" id="MathJax-Span-40" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">x</span><span class="mi" id="MathJax-Span-41" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">o</span><span class="mi" id="MathJax-Span-42" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">r</span><span class="msubsup" id="MathJax-Span-43" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.225em; height: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.297em 1000em 2.444em -0.612em); top: -2.229em; left: 0em;"><span class="mi" id="MathJax-Span-44" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">A</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; top: -2.079em; left: 0.791em;"><span class="mi" id="MathJax-Span-45" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12px; font-family: MathJax_Math; font-style: italic;">j</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span></span><span class="mo" id="MathJax-Span-46" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">)</span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.392em; overflow: hidden; width: 0px; height: 1.271em;"></span></span></nobr></span>之和为多少.由于答案可能过大,你需要输出答案对998244353取模后的值定义lowbit(x)=<span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-4-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-47" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.173em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.078em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.129em 1000em 2.444em -0.597em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-48" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="msubsup" id="MathJax-Span-49" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.01em; height: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.347em 1000em 2.444em -0.597em); top: -2.229em; left: 0em;"><span class="mn" id="MathJax-Span-50" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">2</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; top: -2.622em; left: 0.503em;"><span class="mi" id="MathJax-Span-51" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12px; font-family: MathJax_Math; font-style: italic;">k</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.077em; overflow: hidden; width: 0px; height: 1.099em;"></span></span></nobr></span>,其中k是最小的满足(<span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-5-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-52" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0.635em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0.575em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.571em 1000em 2.455em -0.612em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-53" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mi" id="MathJax-Span-54" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">x</span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.089em; overflow: hidden; width: 0px; height: 0.639em;"></span></span></nobr></span> <span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-6-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-55" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.788em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.653em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.319em 1000em 2.455em -0.614em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-56" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mi" id="MathJax-Span-57" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">a</span><span class="mi" id="MathJax-Span-58" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">n</span><span class="mi" id="MathJax-Span-59" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math; font-style: italic;">d<span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; overflow: hidden; height: 1px; width: 0.003em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.089em; overflow: hidden; width: 0px; height: 0.908em;"></span></span></nobr></span> <span class="MathJax_Preview" style="box-sizing: border-box; color: rgb(136, 136, 136);"></span><span class="MathJax" id="MathJax-Element-7-Frame" role="textbox" aria-readonly="true" style="box-sizing: border-box; display: inline; line-height: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;"><nobr style="box-sizing: border-box; transition: none; -webkit-transition: none; border: 0px; padding: 0px; margin: 0px; max-width: 5000em; max-height: 5000em; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-60" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 3.404em;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 3.163em; height: 0px; font-size: 14px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.129em 1000em 2.694em -0.597em); top: -2.229em; left: 0em;"><span class="mrow" id="MathJax-Span-61" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="msubsup" id="MathJax-Span-62" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 1.01em; height: 0px;"><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.347em 1000em 2.444em -0.597em); top: -2.229em; left: 0em;"><span class="mn" id="MathJax-Span-63" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">2</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; top: -2.622em; left: 0.503em;"><span class="mi" id="MathJax-Span-64" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12px; font-family: MathJax_Math; font-style: italic;">k</span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span></span><span class="mo" id="MathJax-Span-65" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">)</span><span class="mo" id="MathJax-Span-66" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.278em; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">></span><span class="mn" id="MathJax-Span-67" style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.278em; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">0</span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.229em;"></span></span></span><span style="box-sizing: border-box; transition: none; -webkit-transition: none; display: inline-block; position: static; border-width: 0px 0px 0px 0em; border-left-style: solid; padding: 0px; margin: 0px; vertical-align: -0.344em; overflow: hidden; width: 0px; height: 1.367em;"></span></span></nobr></span>的数特别地:lowbit(0)=0
输入描述
一共T(T10)组数据,对于每组数据:第一行一个正整数n,表示数组长度第二行n个非负整数,第i个整数为Ain[1,5104]Ai[0,229]
输出描述
每组数据输出一行Case #x: ans。x表示组数编号,从1开始。ans为所求值。
解题思路:
 建立字典树,每输入一个数对其做一次计算,加上之前的和他不同的个数,因为是无序的,最后乘以2.
#include<cstdio>#include<cstdlib>#include<cstring>#include<string.h>#include<algorithm>#define mod 998244353using namespace std;int ans; const int maxt=30*51000;int bit[35];int tree[maxt][2];int num[maxt];struct trie{    int tot;    void init()    {        tot=1;        memset(tree,0,sizeof(tree));        memset(num,0,sizeof(num));    }    int  newnode()    {        num[++tot]=0;        tree[tot][0]=tree[tot][1]=0;        return tot;    }    void insert(int val)    {        int p=1;int temp;        for(int i=0;i<=29;i++)        {            ++num[p];            if((val>>i)&1) temp=1;else temp=0;//            cout<<p<<" "<<temp<<" "<<tree[p][temp]<<" "<<num[tree[p][temp^1]]<<endl;            if(tree[p][temp]!=0)            {                ans+=bit[i]*num[tree[p][temp^1]];//                cout<<bit[i]<<" "<<num[tree[p][temp^1]]<<endl;                ans%=mod;            }            else            {                tree[p][temp]=newnode();                tree[p][temp^1]=newnode();            }            p=tree[p][temp];        }    }};int main(){    int cas;//    freopen("102.txt","r",stdin);    scanf("%d",&cas);//    cout<<cas<<endl;    bit[0]=1;    for(int i=1;i<=30;i++)        bit[i]=2*bit[i-1];    int n,a;    for(int ca=1;ca<=cas;ca++)    {        trie sov;        sov.init();        scanf("%d",&n);        ans=0;        for(int i=1;i<=n;i++)        scanf("%d",&a),sov.insert(a);//        cout<<ans<<endl;        ans=ans*2%mod;        printf("Case #%d: %d\n",ca,ans);    }}

0 0
原创粉丝点击