結果
| 問題 | 
                            No.1952 xooooooooooor
                             | 
                    
| コンテスト | |
| ユーザー | 
                             titia
                         | 
                    
| 提出日時 | 2022-05-20 22:59:01 | 
| 言語 | Python3  (3.13.1 + numpy 2.2.1 + scipy 1.14.1)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 33 ms / 2,000 ms | 
| コード長 | 624 bytes | 
| コンパイル時間 | 87 ms | 
| コンパイル使用メモリ | 12,672 KB | 
| 実行使用メモリ | 10,752 KB | 
| 最終ジャッジ日時 | 2024-09-20 09:21:37 | 
| 合計ジャッジ時間 | 2,445 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 39 | 
ソースコード
import sys
input = sys.stdin.readline
N,M=map(int,input().split())
mod=998244353
if M<=100:
    ANS=0
    for i in range(M):
        ANS^=N*(1<<i)
    #print(ANS)
    print(ANS%mod)
    exit()
S=list(map(int,list(bin(N)[2:])))
A=[S[0]]
for i in range(1,len(S)):
    A.append(A[-1]+S[i])
B=[0]*len(S)
B[-1]=S[-1]
for i in range(len(S)-2,-1,-1):
    B[i]=B[i+1]+S[i]
ANS=0
#print(S)
#print(A)
#print(B)
for i in range(len(S)):
    ANS+=pow(2,i,mod)*(B[-1-i]%2)
    #print(bin(ANS))
    ANS+=pow(2,i+M-1,mod)*(A[-1-i]%2)
#print(ANS)
if B[0]%2==1:
    ANS+=pow(2,M-1,mod)-pow(2,len(S),mod)
print(ANS%mod)
            
            
            
        
            
titia