I need an XOR one integer aversus an array of integers q(max 100,000). that is, if I go in cycles, I will
a XOR q [0]
a XOR q [1]
.....
a XOR q [100000]
(100,000 times)
I will have a series of such afor XORed.
I am writing a console application that will pass the required input.
I use the built-in C # operator ^to perform the XOR operation. Is there another way?
Would converting an integer to an array of bytes and then XORing each bit and determining the final result is a good idea?
Input (do not keep spaces between two lines)
1
15 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 6 10
1023 7 7
33 5 8
182 5 10
181 1 13
5 10 15
99 8 9
33 10 14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XOR
{
class Solution
{
static void Main(string[] args)
{
List<TestCase> testCases = ReadLine();
CalculationManager calculationManager = new CalculationManager();
foreach (var testCase in testCases)
{
var ints = testCase.Queries.AsParallel().Select(query => calculationManager.Calculate(query, testCase.SequenceOfIntegers)).ToList();
ints.ForEach(Console.WriteLine);
}
}
private static List<TestCase> ReadLine()
{
int noOfTestCases = Convert.ToInt32(Console.ReadLine());
var testCases = new List<TestCase>();
for (int i = 0; i < noOfTestCases; i++)
{
string firstLine = Console.ReadLine();
string[] firstLineSplit = firstLine.Split(' ');
int N = Convert.ToInt32(firstLineSplit[0]);
int Q = Convert.ToInt32(firstLineSplit[1]);
var testCase = new TestCase
{
Queries = new List<Query>(),
SequenceOfIntegers = ReadLineAndGetSequenceOfIntegers()
};
for (int j = 0; j < Q; j++)
{
var buildQuery = ReadLineAndBuildQuery();
testCase.Queries.Add(buildQuery);
}
testCases.Add(testCase);
}
return testCases;
}
private static List<int> ReadLineAndGetSequenceOfIntegers()
{
string secondLine = Console.ReadLine();
List<int> sequenceOfIntegers = secondLine.Split(' ').ToArray().Select(x => Convert.ToInt32(x)).ToList();
return sequenceOfIntegers;
}
private static Query ReadLineAndBuildQuery()
{
var query = Console.ReadLine();
List<int> queryIntegers = query.Split(' ').ToArray().Select(x => Convert.ToInt32(x)).ToList();
Query buildQuery = ReadLineAndBuildQuery(queryIntegers[0], queryIntegers[1], queryIntegers[2]);
return buildQuery;
}
private static Query ReadLineAndBuildQuery(int a, int p, int q)
{
return new Query { a = a, p = p, q = q };
}
}
class CalculationManager
{
public int Calculate(Query query, List<int> sequenceOfIntegers)
{
var possibleIntegersToCalculate = FindPossibleIntegersToCalculate(sequenceOfIntegers, query.p, query.q);
int maxXorValue = possibleIntegersToCalculate.AsParallel().Max(x => x ^ query.a);
return maxXorValue;
}
private IEnumerable<int> FindPossibleIntegersToCalculate(List<int> sequenceOfIntegers, int p, int q)
{
return sequenceOfIntegers.GetRange(p - 1, (q - p) + 1).Distinct().ToArray();
}
}
class TestCase
{
public List<int> SequenceOfIntegers { get; set; }
public List<Query> Queries { get; set; }
}
class Query
{
public int a { get; set; }
public int p { get; set; }
public int q { get; set; }
}
}
Miral source