Subarray XOR Solution Codechef
Mary loves binary strings. Given a binary string S, she defines the beauty of the string as the bitwise XOR of decimal representations of all substrings of S.
Find the beauty of string S. Since the answer can be huge, print it modulo 998244353.
For example, the decimal representation of binary string 1101 is 1⋅23+1⋅22+0⋅21+1⋅20=8+4+0+1=13. Kindly refer sample explanation for more such examples.
A string A is a substring of a string B if A can be obtained from B by deleting several (possibly zero) characters from the beginning and several (possibly zero) characters from the end.
Input Format
- The first line of input contains a single integer T, denoting the number of test cases. The description of test cases follow.
- First line of each test case contains one integer N – the length of the binary string.
- Second line of each test case contains the binary string S.
Output Format
For each test case, output in a single line, beauty of the string modulo 998244353.
Constraints
- 1≤T≤100
- 1≤N≤105
- Sum of N over all test cases does not exceed 2⋅105
Sample Input 1
3
2
10
3
101
4
1111
Sample Output 1
3
6
12
Explanation
- Test Case 1: All substrings of the string S=10 are [1,0,10]. The decimal representation of these substrings is denoted by the array [1,0,2]. Bitwise XOR of all these values is 1⊕0⊕2=3.
- Test Case 2: All substrings of the string S=101 are [1,0,1,10,01,101]. The decimal representation of these substrings is denoted by the array [1,0,1,2,1,5]. Bitwise XOR of all these values is: 1⊕0⊕1⊕2⊕1⊕5=6.
- Test Case 3: All substrings of the string S=1111 are [1,1,1,1,11,11,11,111,111,1111]. The decimal representation of these substrings is denoted by the array [1,1,1,1,3,3,3,7,7,15]. Bitwise XOR of all these values is: 1⊕1⊕1⊕1⊕3⊕3⊕3⊕7⊕7⊕15=12.
SOLUTION
Program: Subarray XOR Solution Codechef in Python
mod=998244353
for i in range(int(input())):
n=int(input())
l=list(map(int,input()))
temp=[0 for i in range(n)]
ans=[0 for i in range(n)]
for i in range(n):
if l[i]==0 or i%2==1:
continue
temp[i]+=1
ans[0]=temp[0]
for i in range(1,n):
ans[i]=(temp[i]+ans[i-1])%2
mul=1
out=0
for i in range(n-1,-1,-1):
if ans[i]==0:
mul*=2
mul%=mod
continue
out+=mul
out%=mod
mul*=2
mul%=mod
print(out)
Program: Subarray XOR Solution Codechef in C++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long n;
cin>>n;
string s;
cin>>s;
long long result[n]={0};
if(s[0]=='1')
{
result[0]=1;
}
long long prev=result[0];
for(int i=1;i<n;i++)
{
if(s[i]=='1')
{
prev+=(i+1);
}
result[i]=prev;
result[i]=result[i]%2;
}
long long ans=0,power=1;
for(int i=n-1;i>=0;i--)
{
if(result[i])
{
ans+=power;
ans%=998244353;
}
power*=2;
power%=998244353;
}
cout<<ans%998244353<<endl;
}
}
Program: Subarray XOR Solution Codechef in Java
import java.util.*;
import java.lang.*;
import java.io.*;
class Codechef
{
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(rd.readLine());
int mod = 998244353;
while(t--!=0){
int n = Integer.parseInt(rd.readLine());
StringBuilder s = new StringBuilder(rd.readLine());
long[] arr = new long[n];
arr[0] = (s.charAt(0)=='1') ? 1 : 0;
int noOf1s = (int)arr[0];
if(arr[0]==1){
s.setCharAt(0, '1');
}
else s.setCharAt(0, '0');
for (int i = 1; i < n; i++){
if(s.charAt(i)=='1') noOf1s++;
arr[i] = arr[i-1] + noOf1s;
long temp = (i+1)*(arr[i]-arr[i-1]) - arr[i-1];
if(temp%2==1){
s.setCharAt(i, '1');
}
else{
s.setCharAt(i, '0');
}
}
int pwrTwo[] = new int[n];
pwrTwo[0] = 1;
for (int i = 1; i < n; i++){
pwrTwo[i] = (pwrTwo[i-1]*2)%mod;
}
int res = 0;
int i = 0;
int j = n-1;
while(i < n){
if(s.charAt(j)=='1'){
res+=(pwrTwo[i]);
res%=mod;
}
i++;
j--;
}
System.out.println(res);
}
}
}
Codechef March Long Challenge 2022 Solutions
- Bath in Winters Solution Codechef
- Discus Throw Solution Codechef
- Count the Ones Solution Codechef
- MEX on Trees Solution Codechef
- Subarray XOR Solution Codechef
- Substring of a Substring Solution Codechef
- Exact Marks Solution Codechef
- Akash and Function Solution Codechef
- Akash and Missing Class Solution Codechef
- Wordle Solution Codechef