Aleks.Sidorenko
BAN USER
object Solution {
def readInput(): Array[Int] = {
val sc = new java.util.Scanner(System.in)
val n = sc.nextInt
val array = new Array[Int](n)
for (i <- 0 until n) {
array(i) = sc.nextInt
}
array
}
def rearrange(array: Array[Int]): Int = {
var z = array.length - 1
var i = 0
def swap(array: Array[Int], left: Int, right: Int) = {
if (left < right && array(left) == 0) {
array(left) = array(right)
array(right) = 0
}
}
def findRightMostNonZero(array: Array[Int], right: Int): Int = {
var r = right
while (r >= 0 && array(r) == 0) r -= 1
r
}
while (i <= z) {
if (array(i) == 0) {
z = findRightMostNonZero(array, z)
swap(array, i, z)
}
if (i <= z) i += 1
}
i
}
def main(args: Array[String]) {
val array = readInput()
println(rearrange(array))
println(array.mkString(" "))
}
}
object Solution {
def readInput(): String = {
val sc = new java.util.Scanner(System.in)
sc.next
}
def getDerangements(str: String): List[String] = {
def getIndex(str: String): Set[(Char, Int)] = {
str.zipWithIndex.toSet
}
def permutate(ch: Char, str: String): List[String] = {
(for (i <- 0 to str.length) yield {
val (first, second) = str.splitAt(i)
first + ch + second
}).toList
}
def permutations(s: String): List[String] = {
if (s.isEmpty) Nil
else {
val ch = s.head
val rest = s.tail
permutations(rest) match {
case Nil => List(ch.toString)
case d: List[String] => d.flatMap(permutate(ch, _))
}
}
}
def isDerangement(s: String, index: Set[(Char, Int)]): Boolean = {
val ind = getIndex(s)
!(ind & index).isEmpty
}
val index = getIndex(str)
permutations(str).filter(!isDerangement(_, index)).toSet.toList
}
def main(args: Array[String]) {
val str = readInput()
getDerangements(str).foreach(println(_))
}
}
object Solution {
case class Meeting(start: Long, end: Long, weight: Int) extends Ordered[Meeting] {
def isOvelappedBy(meeting: Meeting) = {
val (min, max) = if (this <= meeting) (this, meeting) else (meeting, this)
(min.end > max.start && min.end < max.end) || (min.end >= max.end)
}
override def compare(that: Meeting) = Meeting.ordering.compare(this, that)
}
object Meeting {
def parse(sc: java.util.Scanner) = Meeting(sc.next().toLong, sc.next().toLong, sc.nextInt())
implicit val ordering: Ordering[Meeting] = Ordering.by(_.start)
}
def readInput(): List[Meeting] = {
val sc = new java.util.Scanner(System.in)
val n = sc.nextInt
val meetings = collection.mutable.ListBuffer.empty[Meeting]
for (i <- 0 until n) meetings += Meeting.parse(sc)
meetings.toList
}
def schedule(meetings: List[Meeting]): Int = {
val sorted = meetings.sorted
def partitionOverlappings(meeting: Meeting, meetings: List[Meeting]): (List[Meeting], List[Meeting]) = {
(meetings.filter(meeting.isOvelappedBy(_)), meetings.filter(!meeting.isOvelappedBy(_)))
}
def scheduleHelper(meetings: List[Meeting], weight: Int): Int = {
meetings match {
case meeting::rest => {
val (overlappings, notOverlappings) = partitionOverlappings(meeting, meetings)
math.max(
scheduleHelper(notOverlappings, weight + meeting.weight),
overlappings.map(o => scheduleHelper(rest, weight)).max
)
}
case _ => weight
}
}
scheduleHelper(meetings, 0)
}
def main(args: Array[String]) {
val meetings = readInput
println(schedule(meetings))
}
}
- Aleks.Sidorenko April 19, 2017