Last active
June 13, 2023 10:24
-
-
Save ailinykh/88bb283d213771b62dcd3aebe27d4246 to your computer and use it in GitHub Desktop.
Yandex Contest
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
Документы | |
В одной организации есть система документооборота. У каждого документа в этой системе есть свой уникальный идентификатор(целое число от 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