AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java

Einführung

Dieses Thema

AtCoder Beginner Contest 136 D - Gathering Children Difficulty: 792

Dieses Thema, Breite Priorität Suche Ruby

ruby.rb


s = gets.chomp
f, c = 0, 0
p = []
0.upto(s.size - 1) do |i|
  if s[i] == 'R' && f == 1
    f = 0
    p.push(c)
    c = 0
  elsif s[i] == 'L' && f == 0
    f = 1
    p.push(c)
    c = 0
  end
  c += 1
  p.push(c) if s.size - 1 == i
end
ans = Array.new(s.size, 0)
pos = 0
while p.size > 0
  r = p.shift
  l = p.shift
  if (r + l).even?
    pos += r
    ans[pos - 1] = (r + l) / 2
    ans[pos] = (r + l) / 2
    pos += l
  elsif (r.even?)
    pos += r
    ans[pos - 1] = (r + l) / 2
    ans[pos] = (r + l) / 2 + 1
    pos += l
  else
    pos += r
    ans[pos - 1] = (r + l) / 2 + 1
    ans[pos] = (r + l) / 2
    pos += l
  end
end
puts ans.join(' ')

Teilen Sie beispielsweise die Zeichenfolge "RRLLLLRLRRLL" in drei Teile: "RRLLLL" "RL" "RRLL".

RRLLLL RL RRLL
111111 11 1111
033000 11 0220

Kinder werden sich im RL-Teil versammeln, also zähle ihn und baue ihn in das Array ein.

even.rb


  if (r + l).even?

Gerade und ungerade scheinen * Ruby * zu sein. Perl

perl.pl


use v5.18; # strict say state

chomp (my $s = <STDIN>);
my ($f, $c) = (0, 0);
my @p;
for my $i (0..length($s)-1) {
  if (substr($s, $i, 1) eq 'R') {
    if ($f == 1) {
      push @p, $c;
      $f = 0;
      $c = 0;
    }
  } else {
    if ($f == 0) {
      push @p, $c;
      $f = 1;
      $c = 0;
    }
  }
  $c++;
  push @p, $c if $i == length($s) - 1;
}
my @ans;
for my $i (0..length($s)-1) {
  $ans[$i] = 0;
}
my $pos = 0;
while (@p) {
  my $r = shift @p;
  my $l = shift @p;
  if (($r + $l) % 2 == 0) {
    $pos += $r;
    $ans[$pos-1] = ($r + $l) / 2;
    $ans[$pos] = ($r + $l) / 2;
    $pos += $l;
  } elsif ($r % 2 == 0) {
    $pos += $r;
    $ans[$pos-1] = int(($r + $l) / 2);
    $ans[$pos] = int(($r + $l) / 2) + 1;
    $pos += $l;
  } else {
    $pos += $r;
    $ans[$pos-1] = int(($r + $l) / 2) + 1;
    $ans[$pos] = int(($r + $l) / 2);
    $pos += $l;
  }
}
say join(' ', @ans);

array.pl


ans = Array.new(s.size, 0)       # Ruby

my @ans;                         # Perl
for my $i (0..length($s)-1) {
  $ans[$i] = 0;
}

int ans[] = new int[s.length()]; # Java

Außerdem konvertiert * Perl * implizit von einer Ganzzahl in eine reelle Zahl, sodass Sie sie mit der Funktion int abschneiden müssen.

int.pl


    ans[pos] = (r + l) / 2           # Ruby
    $ans[$pos] = int(($r + $l) / 2); # Perl
    ans[pos] = (r + l) / 2;          # Java

Java

java.java


import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        sc.close();
        int f = 0, c = 0;
        Queue<Integer> que = new ArrayDeque<>();
        for (int i = 0; i < s.length(); i++) {
            if (s.substring(i, i + 1).equals("R")) {
                if (f == 1) {
                    f = 0;
                    que.add(c);
                    c = 0;
                }
                c++;
            } else {
                if (f == 0) {
                    f = 1;
                    que.add(c);
                    c = 0;
                }
                c++;
                if (i == s.length() - 1) {
                    que.add(c);
                }
            }
        }
        int ans[] = new int[s.length()];
        int pos = 0;
        while (que.size() > 0) {
            int r = que.poll();
            int l = que.poll();
            if ((r + l) % 2 == 0) {
                pos += r;
                ans[pos - 1] = (r + l) / 2;
                ans[pos] = (r + l) / 2;
                pos += l;
            } else if (r % 2 == 0) {
                pos += r;
                ans[pos - 1] = (r + l) / 2;
                ans[pos] = (r + l) / 2 + 1;
                pos += l;
            } else {
                pos += r;
                ans[pos - 1] = (r + l) / 2 + 1;
                ans[pos] = (r + l) / 2;
                pos += l;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < (s.length() * 2 - 1); i++) {
            if (i % 2 == 0) {
                sb.append(ans[i / 2]);
            } else {
                sb.append(" ");
            }
        }
        System.out.println(sb);
    }
}

In * Java * scheint es schwierig zu sein, einem Array von Ganzzahlen beizutreten, deshalb habe ich es in StringBuilder eingefügt.

Ruby Perl Java
Codelänge 685 Byte 940 Byte 1841 Byte
Ausführungszeit 103 ms 143 ms 203 ms
Erinnerung 5244 KB 16000 KB 32476 KB

Zusammenfassung

Referenzierte Site

Recommended Posts

AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 1)
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 2) Dynamische Planungsmethode
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst
AtCoder dwango Programmierwettbewerb B zum Lösen in Ruby, Perl und Java B.
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
Lösen Sie ARC104 D Multiset Mean mit Scala, Java, C ++, Ruby, Perl, Elixir
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Atcoder ABC70 D Problem
[Bei Coder] Lösen Sie das ABC183 D-Problem mit Ruby
[Bei Coder] Lösen Sie das ABC182 D-Problem mit Ruby
In Java 2D-Karte speichern und mit for-Anweisung drehen
ABC177 - E in Ruby lösen
Lösen mit Ruby AtCoder ACL Anfängerwettbewerb C Union Find (DSU)
Hinweis Nr. 2 "Erstellen eines Suchverlaufs mit ArrayList und HashSet" [Java]
Lösen mit Ruby AtCoder 1. Algorithmus Praktischer Test Eine Ausnahmebehandlung
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
Installieren Sie Java und Tomcat mit Ansible
Ruby mit AtCoder 6 lernen [Contest 168 Daher]
Verwenden Sie JDBC mit Java und Scala.
PDF und TIFF mit Java 8 ausgeben
Mit Java verschlüsseln und mit C # entschlüsseln