スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ABC082参加した感じ

なんか深秘録の大会やってたのでロビーで対戦してたら開始に遅れました。(12分くらい?)
そんなわけで今回は1WAの三完でした。言語はC。
dpの扱い方があまりにも下手・・・。


A問題beta.atcoder.jp/contests/abc082/tasks/abc082_a

入力の正整数a,bの平均値を切り上げしたものを出力。
(a+b+1)/2


B問題beta.atcoder.jp/contests/abc082/tasks/abc082_b

文字列s,tが与えられる。それぞれの文字順を好きに入れ替えてs',t'にしたときに辞書順でs'<t'にできるか。
要するにsを最小、tを最大になるように並べ替えた時にs'<t'になるか見るだけ。
ソートして比較して終わり。
比較がstrcmpで済むところをif文書いて判定したのを気にしてなんかいない。いない。
あとWA出したのはこいつでYesをYESにしていた。


C問題beta.atcoder.jp/contests/abc082/tasks/arc087_a

長さNの正整数の列aを良い数列にする。
数列bが良い数であるとは、次の条件が成り立つこと。
・bの各要素xについて、bに値xはちょうどx個含まれる。
aを良い数列にするために取り除くべき要素の個数の最小値を求める。

ABC081にも出現数を数える問題が・・・うっ、頭が。
今回aiは最大109なので出現数[ai]をインクリメントしていく方法は使えない。
Nは最大105なのでこちらはたいした数ではない。
つまり前回の頭悪そうな数え方が正攻法のはず。
そういうわけで入力を全部配列に突っ込んでソートし、頭から出現数を数えていく。

出力としては取り除くべき要素の個数なので、今見ている値をcとすると
cの出現数<cの時、cはすべて取り除くため答えに出現数を足す。
cの出現数>cの時、cはの出現数をcにするために答えに出現数-cだけ足す。


D問題beta.atcoder.jp/contests/abc082/tasks/arc087_b

二次元平面上の原点から命令列sに従い移動した時(x,y)に移動できるか。
sは次の2文字。
・F : 今向いている向きに長さ 1 だけ移動する。
・T : 時計回りまたは反時計回りの好きな方向に 90 度だけ向きを変える。
最初はx軸の正の向きを向いている。

まず最初にTが出るまでのFは必ずx軸の正の方向へ移動することになるので移動し終わった場所を原点として(x-(先頭のFの個数),y)へ移動する問題にできる。
この後がいろいろ迷走して、最初の方針の回答がx軸方向、y軸方向に全部で何回移動できるか調べて(x-x軸移動数)%2==0&&(y-y軸移動数)&2==0ならいけるのでは!?と書いてWAが5/49のところまでなまじ行けてしまったので余計悩むことに。
当然TFFで(0,0)が行けることになってしまうので間違いなわけで。
じゃあやっぱりdpだなということでdp[xの位置][yの位置][指示の回数][向いてる方向]・・・16000*16000*8000*4・・・w
その後xとyを分けたりしてとかなんやかんやしてても正解にたどり着けなかったので解説を見ることに。

正解としてはxとyは独立していてi回目の移動距離をdiとすると、
dp[0][8000]=1
dp[i][x+8000]=dp[i-1][x+8000-di] || dp[i-1][x+8000+di]
の漸化式からdp[移動回数][x+8000]=1になるかどうかを考えればいい。yも同様


そんなわけでレート推移。


開始遅かったのが悪い(自業自得)

余談ですが今回D問題AC後に他の方でC言語でD問題をACした提出を見てみたわけなのですが、
コメントを見ると貪欲法でやってる・・・?実際にコード見ても貪欲法。
TTFFFFFFTTFFFFFTTFFFF(x軸方向に6,5,4移動できる)
3 0
という入力があったとすると貪欲法では解けません。
twitterを見ても同様に言及している方がいましたので嘘解法が通るテストケースだったようですねぇ。
スポンサーサイト

ABC081参加した感じ

そういえばブログとかあったなって思ったのでプログラミングコンテストの記録残し用に使ってみる。

本日は風呂に入ってたので遅れて(誤差程度)スタート。言語はC。
結果としては2WAの全完でした。


A問題beta.atcoder.jp/contests/abc081/tasks/abc081_a

'1'か'0'からなる3文字の文字列が与えられるので'1'の個数を数えて終わり。



B問題beta.atcoder.jp/contests/abc081/tasks/abc081_b

N個の正の整数が与えられるので、すべての数値が偶数なら2で割っていく操作が何回できるか求める。
入力値を配列に突っ込んで頭から全部2で割れるか見ていき、割り切れるなら全部2で割り、cntをインクリメント。
割り切れないものが出た時点でbreakしてcntを出力。



C問題beta.atcoder.jp/contests/abc081/tasks/arc086_a

N個の正の整数が与えられる。いくつの整数を書き変えれば値をK種類以下にできるか。
とりあえずぱっと思いついたので出現回数が少ないN-K種類分の値の合計出現数を足せばよい。
まず1≦N≦200000なのでA[200000]の入力値-1の要素に各値の出現数を数えればいい・・・のだけどなかなかあほな数え方をしてしまった。

  • QSort(A, 0, N - 1,1);
  • //ShowData(A, N);
  • int tmp=A[0];
  • int idx = 0;
  • int cntK[200000];
  • int cnt=0;
  • for (i = 0; i < N; i++) {
  • if (i == N - 1&&tmp!=A[i]) {
  • cntK[idx++] = cnt;
  • cntK[idx++] = 1;
  • break;
  • }
  • if (tmp != A[i]) {
  • tmp = A[i];
  • cntK[idx++] = cnt;
  • cnt = 1;
  • //ShowData(cntK, idx);
  • }
  • else {
  • cnt++;
  • if (i == N - 1)cntK[idx++] = cnt;
  • }
  • }

※QSortはここでは昇順のクイックソート。
配列に入力値全部突っ込んでからソートして頭から数値が連続している回数を別の配列に詰め直す。

???動きゃいいんだ

その後は出現回数を降順ソートしてcntK[K]~cntK[N-1]までの値を足していって出力。
数え方があほなだけでやってること実質同じだからセーフ。出現数数えるってよくあると思うんですけど。



D問題beta.atcoder.jp/contests/abc081/tasks/arc086_b

N個の整数(数列a)が与えられる。
ayにaxを足す操作を繰り返してa1≦a2≦・・・≦aN-1≦aNとする。(操作は0回以上2N回以下)
出力は操作の回数と空白区切りのx,yの組み合わせを操作した分。
なんとなく左から全部足してけばいいのではと思ったが今回aは-106≦ai≦106なのでaが全部正の時しか成り立たない。
そんなわけでしばらく正の固まりと負の固まりで~とかなんかてきとーなこと考えていたわけだが操作回数は2N以下とあるのでこれ全体に対する操作2回やるだけでよさそうなんだよなーと思い直し。
最初の全部足していく考えは最大N-1回の足し算なので全体に対する操作N回で全部正の状態に持っていければいける。
そういえば全部負でも逆順で足していけばできる。
絶対値が一番大きい数を足せば正か負に必ずできる。(全部0は例外)
なんかできた。

そんなわけで上に書いたのを実装して提出したらなぜかWA。
出力の仕方悪かったのかと思ってちょい直してもWA。というかなぜかサンプルでWAになってるやつがある。
実際に動かして出力を脳内操作してもちゃんと昇順になるのになぜだ・・・と思ってたらyとxが逆になってました。完。

そんなわけでレート推移
https://screenshots.firefoxusercontent.com/images/1ceea913-6a11-464d-8c30-d3a8d1b601ef.png


最近割りと真面目にやり始めてるのでいい感じに伸びてますね。
ARCはまだ早いと思いますが今のABC感覚で参加できるようになれればなーと思います。






ステージ作り

メモ

・ワープネタ
基本は天井と床が狭まるように配置する。それだけ。
ただ条件が面倒というかよくわからん部分が多い。
例えば天井と床になる部分を直線(2点をタッチ)で作るとワープせずに押し出されるなど。(こっちが普通の挙動だと思うが)
これの回避法として一応二つ挙げると、
 1.手動で斜めに線を描く(カクカクでいい)
 2.天井に近づく床と天井に接する床を別にする
という感じ。両方やるんじゃなくて片方でいい。
1に関してはあまり検証してないけどワープ距離少なくて微妙かも?ただワープ方向が逆になってすごい勢いでバーストしたことあるから発生条件は調べたい。
2は普通に端から端までワープさせることもできる。距離調整も慣れればある程度はできる。

2を前提としてワープの原理糞てきとうにでっちあげると、
 1.床が天井に近づいていく(この床は天井に接していないので押し出しを受けない)
 2.天井に接している床に移る(作る時は床の継ぎ目は一切ないように)
 3.めっちゃ深いところの押し出しの力により超速移動する
みたいな。実際どうだかは知らない。そもそも1は床は分かれてない。というかすり抜け床は分けなくてもできた気がする。

んでこのワープ、ワープ距離が床の範囲を超えると空中に投げ出される。
そして床に戻ってくる。ワープ&ワープ。
崖を降りられない行動でワープすると戻ってきて降りられる行動だと戻ってこないみたいなのがある。
ちなみにワープ先の完璧な位置に床設置しておけば戻ってこない。完璧なワープができる。
ワープする床が壁に続いていてかつワープ距離が足りてるなら壁にめり込む。床判定ないはずの場所に立つから謎。

その他ワープネタで気になってるけどよくわからないこと
・侵入方向と同じ方向にワープ(制御法分からん)
・下方向にワープ(ワープ方向の壁か床が悪さしてそう)
・若干上方向にワープ(謎)

謎が多すぎる

シーク用

メモ。たまに更新しよう忘れる。すでに忘れてる。
発生Fとかはこちらから拝借→http://sixriver.web.fc2.com/ssb4/Character_data.htm

・技
弱:発生2F
別ゲーやってると発生頭おかしいんじゃねえかって思うようになったけどこういうゲームだった。
微有利状況の確定から空中攻撃着地後の暴れやらとりあえず暴れやら擦って使うことが多い。
当てた後相手の着地が確定しないような状況だといろいろ厳しい。(2段目から派生してもしなくても反確あることあったり)
けど増長抑制のためには振るべき技だと思ってる。

横強:発生5F
主力技。特に横強連に割り込めないキャラに対して糞強い。
低%時は横強連はガードされるので掴み、相手のつかみ範囲外で図々しく振り続ける(回り込む回避と読み合い?)
横強で浮くようになったらコンボに行く。横強→空前→横強横強→空前→横強→空前→空前とか決まった日には気持ちよくなれるけど相手の%みてげんなりする。
横強連に暴れられるキャラには読み合いになる。めんどい。
基本は微歩きガードでいいと思う。低リスク。
そのまま横強連。割り込まれる可能性は高いけど死ぬことはそうそうない。でもネス辺りに浮かされるのは勘弁願いたい。
空前。今作のやられ硬直知らんけど確定状況はある?あったとしても見極めないと割り込まれる。
空N。発生早いから割と頑張れる。ローリターン過ぎるから空前かガードどっちか通した方がいい気がする。
下強。というかしゃがみ。スカし択。ただ暴れって大体空Nで空Nって大体持続長いから・・・。匍匐後退で範囲外に行けるか?

上強:発生5F
頭上うろちょろしてるやつに対空。
対地では封印する技か。隙多めだから確定状況以外だとあまり信頼できない。

下強:発生5F
主に空中攻撃や一部飛び道具を透かしながら使うか?
横強同様に当ててからコンボ。全体Fの関係で読み合い成分多め。
崖つかみに当たる攻撃なので再崖つかみはこれで狩る。

横スマ:発生12F
暴発。確定状況で%取りに行くときに振る・・・のか?それならコンボしに行った方が・・・。

上スマ:発生11F
バースト技。初段当てられるかどうかで展開がすごい変わる。2段目はおまけ。
とにかく当てれそうな状況を作りたい。ジャンプから空中攻撃を意識させて即着地して回避を上スマ。立ち状態で初段当たるキャラの回避に上スマ。針溜めてジャンプしたがったところを画面見ないでダッシュ上スマ。なんかごちゃごちゃしたからジャンプ読み上スマ。
後半はガードされてつらいのでやめましょう。僕は振ります。

下スマ:発生11F
は?

DA:発生5F
空前やつかみで反確とれないときや着地狩りに。ガードされる状況で勘に頼って振るのはできるだけやめよう。

空N:発生3F
発生が早い。が、持続の長さを生かして回避狩り→つかみや空前といった使い方のほうが多い。崖上りも狩れるが・・・。
ピカチュウや狐鳥などの突進技に合わせると安定して狩れる。持続当てできたらコンボに行こう。
空前→空前が確定しない状況は空Nで安定する。
やったことないけど空N持続当てから上スマ初段当てとかできないんですか。
着地隙は若干長めなので降りで使う時は絶対に掴まれる範囲から外れること。

空前:発生5F
主力技その2。差し込みにコンボに暴れに何でもござれ。(でも密着暴れは空Nも視野に入れる。相手見て変える)
飛びにくくなったので空前着地空前着地空前とか結構入りやすくなったイメージ。高さ見て考える。
空前当てて跳魚択もある。あまり当たるイメージはない。
立ち回りではとりあえずぴょんぴょん跳ねながら前回避狩ったりダッシュに対して振ったりダッシュで接近して空前振りながら下がったり。
空中では空前で回避強要して空Nや空後を当てに行ったり。
着地ガードされても案外弱暴れ通ったりするんで諦めない心を持つ。そもそもそんな空前振るな。
一応バースト技にもなりえる。一応。

空後:発生4F
バースト技・・・?
空前に対する回避を狩るのに使うことが多い。
隙多めに見えるので積極的に振りに行くような技ではなさそう。
引きながら撃てばローリスクでバーストねらえたり。

空上:発生5F
バースト技・・・?%溜めるのにも使いやすい。
回避見てから狩れるようになると強い。回避を嫌がるなら即当て。
最終段当てなければメテオっぽくなるのでわからん殺しに。着地隙長いからわかってると殺される。やめよう。
ホカホカ補正あると普通にバースト技で使える。

空下:発生15F
着地に困った時に一応択としての存在くらいは覚えておきたい。
崖外で出すと絶対死ぬが絶対当てれる状況なら使ってもいい。絶対当てれるなら。絶対。
炸裂丸で回避強要からの空下できるとかっこいいのではと妄想した。

つかみ:その場6F
主力技その3。
前投げから空前がつながる。内側にベク変された時に画面見ないで空前すかすシークとかかっこ悪い。
ダメージが溜まって外側にベク変されると確定しなくなってくる。ジャンプ使われると逃げられるがそこは着地を狩りに行く。ジャンプしないなら空前やら跳魚やらで択かける。
前投げ以外はよくわからない。下投げからも確定状況あったり前に投げても状況よくなさそうなら下投げもあり・・・?
サドンデスで殺せる投げがないのは弱い。針投げよ;;

NB:発生?
主力技その4。針。
画面見てとりあえず投げとけば当たる。ちまちまダメージ取ったり相手の行動妨害したり。
後隙増えて最大溜めでも中距離未満でガードされた後の状況がよくないので距離見て振ること。
サドンデスでは即死こそしないものの牽制としては最強クラス。即死しろよ。

横B:発生?
フワッ・・・(死が確定して切断)いやしないけど。
空ダ針や跳魚暴発で見ることの方が多い。とりあえず出せる状況で出しておけば爆発前には動けるので狙った場所に狙った時間に置ければ強そう。
でも前隙が全力で糞なので時間がある時の復帰阻止くらいにしか使えない。

上B:発生?
復帰技兼バースト技。発生前に無敵がある。発生後には風があり反確を防いでくれると信じてると泣く。
相手の癖が読めたら無敵を攻撃に重ねるように出せると強い。でもリスク大きいからほどほどに。
発生前に無敵があるかつ崖に攻撃が届くので再崖つかみが確定してる状況ではちゃんと当てに行きたい。
復帰時では爆発後の崖つかみは隙がある?ので相手が狩りに来そうなら最初の段階で崖をつかむなり受身の準備するなりする。

下B:発生?
主力技その5。跳魚。
まず差し込みに使える。飛び道具や置きの技に対して見てから確定なんて場面はざらなのでしっかりダメージ取りに行く。
もしガードされても慌てず即2段目出して逃げる。反確取れるキャラには逃げない択も見せておくと両対応しようとして反確逃してくれるかも。でも基本は外。
復帰にも使える。相当な距離横に移動できるので跳魚が残ってるうちは崖に届かないなんてことは少ない。
逃げにも使える。空中ジャンプと合わせて結構な逃げ性能を誇る。着地隙でる高さの逃げ跳魚は弱いので気を付ける。
バーストにも使える。吹っ飛びは弱くなったがその当てやすさでなんとかなる気もする。空中だと回避されてもそこから空後でバーストねらえたりする。

・立ち回り
編集中

・シーク視点での対シーク
編集中。


なんか気づいたりするたびに編集予定。
主観的なものしかない。試合数が足りない。

スマブラ3DS1

新作出たしせっかくなので新作スマブラに対しての競技場以外のことを日記的に書くことにしよう。
競技場に関してはスマテラに書く。逆なのではって感じはするけどこっちはほんとに思いつくままに書くのであまり見られないこっちでやる。
推敲しないで書くからすごい乱雑。見る場合は何も理解できないまであることを覚悟すること。

今のところ対戦で一番使ってるのはシーク。次にリトルマック。というかほぼこの2キャラだけ。
他のキャラ考察はそれ使ってる人に任せて立ち回りが定まってきたころに真似すればいいという自論。
というわけでまだ200戦しかしてないけど思ったこと適当に。

・崖関連
通常崖上りが見てから(崖上りと確認して)狩れる要素ないのはいつも通りとして、思ったより崖離しJ空中攻撃を狩れない。
狩れない上がり方してきたのはさっき対戦した一人だけなわけだけど一人いるだけで割と問題あるわけで。
基本的に自分はジャンプ上がりと攻撃を狩る空N置き、崖上りを狩る一点読みつかみのどちらかが多く、たまにガードしておくこともある感じ。
空Nに関しては相手の空中攻撃に判定負けすることが多いので多用する相手には択を変えたほうがよさそう?
ガードに関しては今思うとなんで狩れてないんだろう。冷静に空前かつかみで狩れるのでは?つかみは距離調整されると厳しいけどやっぱり空前で何とかなるビジョンが見える。今度意識してみよう。
で、ガードとかもなくそのまま狩りに行くパターン。これがわからん。と思ったけどXでそれ狩れるかと考えると狩れなくねとか思い始めた。やはり判定外から空前叩き込むのがいいのだろうか。

話を崖奪いの方に移す。
奪ったあとはシークだと空後が当たる?マックはいろいろ論外だから素直に上がる一択。
空後が確定するかどうかはちょっと試行数が足りない(割りと当たってる印象はあるが相手がよくわかってないだけ説がある)のでそれは置いといてそれが当たらなかった場合、少なくとも今のところはステージに向かってジャンプで空後を避けられたことがないと思うので再度崖つかまりを強制させることがある程度できる?ある程度であって絶対ではないしキャラによっては普通に帰ってくる。あ、ジャンプ回避があった空後それで避けつつ帰れるかも。まぁそれは置いといて崖付近での攻防になるわけだが、まずシークは空後の後そのままステージに戻れる。相手がステージ下方から帰ってくる際にできることはジャンプ空中攻撃(リスク高そう?ジャンプの高さ次第か)、ジャンプしてそのまま崖つかみ、上Bで崖つかみ、上Bで崖掴まず帰ってくる。これにタイミングのゆさぶりがある。タイミングが合うなら全部浮身で狩れる。怖いなら崖つかみは下強で、空中攻撃はガードから反確もしくはそこから崖つかませて下強→当たるなら空前空上とか。上Bで崖掴むかどうかは読み合いになるので読み負けたら素直に次のこと考えたほうがよさそう。


ここまで書いたけどやっぱり対戦回数が少なすぎるのでてきとうにこの辺で切る。
今は絶対甘えた回避狩るマンやってるだけだけどちゃんと立ち回り練習できる相手と当たりたいなぁ。
04 | 2018/05 | 06
Su Mo Tu We Th Fr Sa
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

yy

Author:yy

最新記事
最新コメント
月別アーカイブ
カテゴリ
リンク
検索フォーム
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。