Skip to content

Instantly share code, notes, and snippets.

@ailinykh
Last active June 13, 2023 10:24
Show Gist options
  • Save ailinykh/88bb283d213771b62dcd3aebe27d4246 to your computer and use it in GitHub Desktop.
Save ailinykh/88bb283d213771b62dcd3aebe27d4246 to your computer and use it in GitHub Desktop.
Yandex Contest
// let str = readLine(strippingNewline: true)!
// let arr = str.split(separator: " ")
// print(Int64(arr[0])! + Int64(arr[1])!)
// import Foundation
// var text = try! String(contentsOfFile: "input.txt")
// _ = text.popLast()
// let arr = text.split(separator: " ")
// try! "\(Int64(arr[0])! + Int64(arr[1])!)".write(to: URL(fileURLWithPath: "output.txt"), atomically: true, encoding: .utf8)
let jewels = readLine()!
let stones = readLine()!
var count = 0
for s in stones {
if jewels.contains(s) {
count += 1
}
}
print(count)%
// swiftc -O -module-cache-path . -o main main.swift
func check(_ diff: Int, _ arr: [Int]) -> Int {
return arr.contains(diff / 2) ? 1 : 0
}
func calculate(_ s1: String, _ s2: String) -> Int {
let arr1 = s1.split(separator: " ").map { Int($0)! }
let arr2 = s2.split(separator: " ").map { Int($0)! }
let sum1 = arr1.reduce(0, +)
let sum2 = arr2.reduce(0, +)
if sum1 == sum2 {
return 1
}
if (sum1 + sum2) % 2 != 0 {
return 0
}
return sum1 > sum2 ? check(sum1 - sum2, arr1) : check(sum2 - sum1, arr2)
}
let str1 = readLine(strippingNewline: true)!
let str2 = readLine(strippingNewline: true)!
print(calculate(str1, str2))
/**
Документы
В одной организации есть система документооборота. У каждого документа в этой системе есть свой уникальный идентификатор(целое число от 10^9). Назовем документы с идентификаторами A и B связанными, если в А есть гипперссылка на документ В, и в B есть гиперссылка на документ А. То есть из А можно попасть в B и наоборот по гиперссылке. Вам даны пары связанных документов. Ваша задача состоит в том, чтобы имея список пар связанных между собой документов, научиться быстро отвечать на вопросы вида: Можно ли попасть из документа X в документ Y по гипперссылкам.
Формат ввода
Первая строка содержит целое число 10^3 - количество пар связанных документов. То есть в первом документе пары есть гипперсылка на второй документ, и во втором документе из пары есть гипперссылка на первый документ пары.
Следующие
N строк содержат пары связанных документов. Каждая строка содержит 2 натуральных числа,
- id-шники связанных документов.
Следующая строка содержит целое число P (
) количество вопросов.
Следующие 2
⋅ P строк описывают вопросы.
Первая строка каждой пары содержит 2 числа
, соответственно идентификатор документа в который мы хотим попасть, и количество документов в следующей строке про которые мы хотим узнать, можно ли из них попасть в документ
. Вторая строка каждой пары содержит
целых чисел
идентификаторы документов из которых мы хотим перейти в документ ​
Формат вывода
Для каждого вопроса в отдельной строке выведите сначала целое число Y, количество документов из которых можно попасть в данный через гиперссылки. Затем выведите в этой же строке L целых чисел, id документов(из тех про которые спрашивали в вопросе), откуда можно попасть в данный. id документов необходимо выводить в том порядке, в котором они перечислены в соответствующем вопросе во входных данных.
Пример 1
Ввод
8
123 444
13 123
47 444
1222 47
7 12
134 7
544 12
162 544
4
1222 2
544 13
444 2
47 1222
7 2
444 13
544 2
1222 123
Вывод
1 13
2 47 1222
0
0
Пример 2
Ввод
3
1 2
2 3
1 4
3
1 3
2 3 4
2 3
1 3 4
3 3
4 2 1
Вывод
3 2 3 4
3 1 3 4
3 4 2 1
Пример 3
Ввод
8
4 7
1 9
7 4
5 1
6 2
3 5
3 1
5 7
3
4 6
6 7 9 5 3 1
1 5
6 4 5 7 2
2 3
9 6 5
Вывод
5 7 9 5 3 1
3 4 5 7
1 6
Ограничение памяти
256.0 Мб
Ограничение времени
12 с
Ввод
стандартный ввод или input.txt
Вывод
стандартный вывод или output.txt
**/
import Foundation
class TreeNode {
var val: Int64
private var nodes: [TreeNode]
init(_ val: Int64, _ nodes: [TreeNode] = []) {
self.val = val
self.nodes = nodes
}
func find(_ val: Int64) -> TreeNode? {
var visited = [TreeNode]()
return find(val, &visited)
}
func append(_ node: TreeNode) {
if nodes.contains(node) { return }
nodes.append(node)
}
private func find(_ val: Int64, _ visited: inout [TreeNode]) -> TreeNode? {
if self.val == val { return self }
visited.append(self)
for n in nodes {
if visited.contains(n) {
continue
}
if let found = n.find(val, &visited) {
return found
}
}
return nil
}
}
extension TreeNode: Equatable {
static func == (lhs: TreeNode, rhs: TreeNode) -> Bool {
lhs.val == rhs.val
}
}
extension TreeNode: CustomStringConvertible {
var description: String {
"{\(val), nodes: \(nodes.count)}"
}
}
func main() throws {
let text = try String(contentsOfFile: "input.txt")
var input = text.split(separator: "\n")
let documentPairs = Int(input.removeFirst())!
let root = TreeNode(0)
for _ in 0..<documentPairs {
let s = input.removeFirst()
let arr = s.split(separator: " ").map { Int64($0)! }
let node1 = root.find(arr[0]) ?? TreeNode(arr[0])
let node2 = root.find(arr[1]) ?? TreeNode(arr[1])
root.append(node1)
root.append(node2)
node1.append(node2)
node2.append(node1)
}
let questionsCount = Int(input.removeFirst())!
var lines = [String]()
for _ in 0..<questionsCount {
let s1 = input.removeFirst()
let arr1 = s1.split(separator: " ")
let docId = Int64(arr1[0])!
let s2 = input.removeFirst()
let arr2 = s2.split(separator: " ").map { Int64($0)! }
let docs = arr2.filter{
if let _ = root.find(docId)!.find($0) {
return true
}
return false
}
lines.append("\(docs.count) " + docs.map{ "\($0)" }.joined(separator: " "))
}
for l in lines {
print(l)
}
}
do {
try main()
} catch {
print(error)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment