悲しみのD(ABC139)

ABC139のネタバレ含みます!

学生選手権の当日イベントに参加できるかどうかのギリギリの順位らしく、ドキドキの三十三間党です。可能な限り、コンテストがあったその日の内に記事を更新したいと思います。

前からベッドがぶっ壊れてまして、その話をすると、本日実家から両親が来てくれてベッドの組み立てをやってくれました。僕も手伝ってはいたんですが、コンテストあると言ったら、組み立てとくからコンテストやり、とのことで。ありがとう両親。

問題URL

https://atcoder.jp/contests/abc139/tasks

A Tenki

文字列から天気予報が当たった回数を求めよっていう問題でしたね。for文とif文使って予報と実際が当たっているかを判定しました。なんかAにしては難しいようなイメージ。

var
  S = stdin.readline
  T = stdin.readline
  ans = 0
for i in 0..<len(S):
  if S[i] == T[i]:
    ans += 1
echo ans

B Power Socket

電源タップの問題。一人暮らししているので身近ですね。1個ならそのまま、2個以上ならB口ずつ増やしていきたいんですが、そのとき口を1個消費します。

import strutils,sequtils
var
  a,b :int;(a,b) = stdin.readline.split.map(parseint)
var
  count = 0
  kuchi = 1
for i in 0..<b:
  if kuchi >= b:
    echo count
    quit()
  else:
    kuchi = kuchi - 1 + a
    count += 1

C Lower

右隣が非増加なら移れるよーという問題でした。前に1番長い単調非減少の数列は何個続く?という問題を解いたことがあったので一緒だなと思って解きました。

前から順番に見ていって、非増加ならカウンタを増やし、非増加でないなら、そこでansと比べて大きい方を取り、カウンタはリセット、という方法を取ったのですが、これだと最後の数列が評価されませんので、for文抜けてからもう一回評価しました。もっと良い書き方がありそうですね。

import strutils,sequtils
var
  N = stdin.readline.parseint
  H = stdin.readline.split.map(parseint)
  ans = 0
  count = 0
for i in 0..<N-1:
  if H[i] >= H[i+1]:
    count += 1
  else:
    if count > ans:
      ans = count
    count = 0
if count > ans:
  ans = count
  count = 0
echo ans

D ModSum

1〜Nまでの数列を並べかえた数列でmodを取る問題。くそ悩みました。僕は例題を手を動かしながら考える派なのですが、いかんせん今回はNの並べかえということでNの階乗通りありますので、N=3もしくはN=4でギブなわけです。 制約を見てみますと1<=N<=109となっていますのでO(1)、入力Nの大きさによらない答えを出すしかありません。 なんか見た目数列の問題なんよなーとか思いつつ、2,1,4,3,6,5みたいな数列を考えたり偶奇で場合分けかなーとか考えていました。詰まったので順位でも確認するかと思ったら、なんとほとんどの人は解いています‼ぐえっ。 思っているより簡単な問題だと認識を改め、落ち着いて例を見直します.あれっ、N=13のとき78って、くそでかくね???急に気づきました。慌てて1〜13の和を計算すると、13(13+1)/2=91。78との差は…13やんけ!よく考えたらiのときi+1取ってi = NのときにN諦めたらええやん!ということでN(N+1)/2-N(=N*(N-1)/2)でええんか?入力例は…全部OK。じゃあもう提出や! ・・・

AC

なおこの時点で76分。本当にありがとうございました。

import strutils
var
  N = stdin.readline.parseint
echo (((N*(N+1)) div 2) - N)

終わってみればあっけない。

E League

無理そう。あざした。

F Engines

あー…ベクトルだわこれ。なんかしかも解けそう。とかABCFとかいうくそ順番でやったためDが76分提出とかなるんですよ。しかも解けてない。だめだめ。

パフォーマンスは680。ABCでは最高パフォーマンスだが、緑にしたい。次がその次ぐらいでRatingが茶色になるんじゃなかろうか。

あと今回は全Nimでしたが、Python(もしくはC++?)も混ぜて、書きやすいやつで書こうかなとは思っています。