public override void Solve(IOManager io) { const int MaxDigit = 28; var n = io.ReadInt(); var a = io.ReadIntArray(n); var b = io.ReadIntArray(n); var bWork = new int[n]; var result = 0; for (int digit = 0; digit <= MaxDigit; digit++) { var highest = 1 << digit; var mask = (1 << (digit + 1)) - 1; for (int i = 0; i < b.Length; i++) { bWork[i] = b[i] & mask; } bWork.Sort(); long count = 0; foreach (var ai in a) { var currentA = ai & mask; var zero = SearchExtensions.GetGreaterEqualIndex(bWork, highest - currentA); var one = SearchExtensions.GetGreaterEqualIndex(bWork, highest * 2 - currentA); var two = SearchExtensions.GetGreaterEqualIndex(bWork, highest * 3 - currentA); count += bWork.Length - two + one - zero; } result |= (int)(count & 1) << digit; } io.WriteLine(result); }
public override void Solve(IOManager io) { var n = io.ReadInt(); var m = io.ReadInt(); var children = io.ReadIntArray(n); var mines = io.ReadIntArray(m); children.Sort(); mines.Sort(); var evens = new long[n / 2 + 1]; var odds = new long[n / 2 + 1]; for (int i = 0; i + 1 < evens.Length; i++) { var even = children[i * 2 + 1] - children[i * 2]; var odd = children[i * 2 + 2] - children[i * 2 + 1]; evens[i + 1] = evens[i] + even; odds[i + 1] = odds[i] + odd; } long min = long.MaxValue; foreach (var mine in mines) { var index = SearchExtensions.GetGreaterThanIndex(children, mine); long sum = 0; if (index % 2 == 0) { sum += Math.Abs(mine - children[index]); index /= 2; index++; sum += evens[index - 1] + odds[^ 1] - odds[index - 1];
public override IEnumerable <object> Solve(TextReader inputStream) { var(cars, mechanics) = inputStream.ReadValue <long, int>(); var initialPositions = new int[mechanics]; for (int i = 0; i < initialPositions.Length; i++) { initialPositions[i] = inputStream.ReadInt(); } bool CanCheckAll(long minutes) { long seen = 0; foreach (var x in initialPositions) { var distance = x - (seen + 1); if (distance > minutes) { return(false); } else if (distance > 0) { seen = Math.Max(x + minutes - distance * 2, x + (minutes - distance) / 2); } else { seen = x + minutes; } } return(seen >= cars); } yield return(SearchExtensions.BoundaryBinarySearch(CanCheckAll, cars * 2, -1)); }
/// <summary> /// 百度编辑器的文件列表管理 /// </summary> /// <param name="pathToList">文件列表目录</param> /// <param name="searchExtensions">扩展名</param> /// <returns></returns> public ActionResult ListFileManager(string pathToList, string[] searchExtensions) { int Start; int Size; int Total; String[] FileList; String[] SearchExtensions; SearchExtensions = searchExtensions.Select(x => x.ToLower()).ToArray(); try { Start = String.IsNullOrEmpty(Request["start"]) ? 0 : Convert.ToInt32(Request["start"]); Size = String.IsNullOrEmpty(Request["size"]) ? UeditorConfig.GetInt("imageManagerListSize") : Convert.ToInt32(Request["size"]); } catch (FormatException) { return(Content(new { state = "参数不正确", start = 0, size = 0, total = 0 }.ToJson())); } var buildingList = new List <String>(); try { var localPath = Server.MapPath(pathToList).Replace("\\Utility\\", "\\ueditor\\"); buildingList.AddRange(Directory.GetFiles(localPath, "*", SearchOption.AllDirectories) .Where(x => SearchExtensions.Contains(Path.GetExtension(x).ToLower())) .Select(x => pathToList + x.Substring(localPath.Length).Replace("\\", "/"))); Total = buildingList.Count; FileList = buildingList.OrderBy(x => x).Skip(Start).Take(Size).ToArray(); } catch (UnauthorizedAccessException) { return(Content(new { state = "文件系统权限不足", start = 0, size = 0, total = 0 }.ToJson())); } catch (DirectoryNotFoundException) { return(Content(new { state = "路径不存在", start = 0, size = 0, total = 0 }.ToJson())); } catch (IOException) { return(Content(new { state = "文件系统读取错误", start = 0, size = 0, total = 0 }.ToJson())); } return(Content(new { state = "SUCCESS", list = FileList == null ? null : FileList.Select(x => new { url = x }), start = Start, size = Size, total = Total }.ToJson())); }
public override IEnumerable <object> Solve(TextReader inputStream) { _ = inputStream.ReadInt(); var a = inputStream.ReadIntArray(); var b = inputStream.ReadIntArray(); var c = inputStream.ReadIntArray(); Array.Sort(a); Array.Sort(b); Array.Sort(c); long result = 0; foreach (var bi in b) { result += (long)(SearchExtensions.GetLessThanIndex(a, bi) + 1) * (c.Length - SearchExtensions.GetGreaterThanIndex(c, bi)); } yield return(result); }
public override ITypeSearch <T> Facet <T>(ITypeSearch <T> query, Filter filter) => SearchExtensions.TermsFacetFor(query, FieldName, null, filter);
public override IEnumerable <object> Solve(TextReader inputStream) { var n = inputStream.ReadInt(); var x = inputStream.ReadIntArray(); var l = inputStream.ReadInt(); var reachableHotels = new List <List <int> >(); var listIndexes = Enumerable.Repeat(-1, n).ToArray(); for (int start = 0; start < listIndexes.Length; start++) { if (listIndexes[start] != -1) { continue; } var listIndex = reachableHotels.Count; listIndexes[start] = listIndex; var currentReachableHotels = new List <int>(); reachableHotels.Add(currentReachableHotels); int current = start; currentReachableHotels.Add(current); while (current < n - 1) { current = SearchExtensions.GetLessEqualIndex(x, x[current] + l); currentReachableHotels.Add(current); if (listIndexes[current] != -1) { break; } listIndexes[current] = listIndex; } } var queries = inputStream.ReadInt(); for (int q = 0; q < queries; q++) { var(from, to) = inputStream.ReadValue <int, int>(); from--; to--; if (from > to) { (from, to) = (to, from); } var days = 0; var current = from; while (current < to) { var listIndex = listIndexes[current]; var currentList = reachableHotels[listIndex]; var currentIndex = currentList.BinarySearch(current); var nextIndex = SearchExtensions.BoundaryBinarySearch(i => currentList[i] >= to, currentList.Count - 1, currentIndex); days += nextIndex - currentIndex; current = currentList[nextIndex]; } yield return(days); } }
private static long GetHandshakeCount(long minPow, long otherPow, long[] a) => SearchExtensions.BoundaryBinarySearch(myPowIndex => otherPow + a[myPowIndex] >= minPow, -1, a.Length) + 1;
public override IEnumerable <object> Solve(TextReader inputStream) { var(a, b, x) = inputStream.ReadValue <long, long, long>(); yield return(SearchExtensions.BoundaryBinarySearch(n => a * n + b * GetMaxDigit(n) <= x, 0, 1_000_000_001)); }
public virtual IEnumerable <SearchData> Search(string value) { return(SearchExtensions.Search(ResultKind.Name, _name, value)); }
public void BisectionDoubleTest() { var answer = SearchExtensions.Bisection(x => Math.Log(x), 1e-8, 1e18); Assert.InRange(Math.Abs(1 - answer), 0, 1e-9); }
public void BisectionIntTest() { var answer = SearchExtensions.BoundaryBinarySearch(n => n * n >= 64, 100, 0); Assert.Equal(8, answer); }
public override void Solve(IOManager io) { var n = io.ReadInt(); var queryCount = io.ReadInt(); var s = io.ReadString(); var queries = new Query[queryCount]; for (int i = 0; i < queries.Length; i++) { var t = io.ReadString()[0]; var d = io.ReadString()[0]; queries[i] = new Query(t, d == 'L' ? Direction.Left : Direction.Right); } var left = SearchExtensions.BoundaryBinarySearch(FallsLeft, -1, s.Length); var right = SearchExtensions.BoundaryBinarySearch(FallsRight, s.Length, -1); io.WriteLine(s.Length - (left + 1) - (s.Length - right)); bool FallsLeft(int index) { foreach (var query in queries) { if (s[index] == query.Char) { if (query.Direction == Direction.Left) { index--; } else { index++; } } if (index < 0) { return(true); } else if (index >= s.Length) { return(false); } } return(false); } bool FallsRight(int index) { foreach (var query in queries) { if (s[index] == query.Char) { if (query.Direction == Direction.Left) { index--; } else { index++; } } if (index < 0) { return(false); } else if (index >= s.Length) { return(true); } } return(false); } }