ABC191参戦記
はじめに
2021年2月6日21:00-22:40に開催されたABC191に参戦しました。
結果は20:39ノーペナABCの3完でパフォーマンス1256、レーティングは前回844から+48の892となりhighestを更新しました。パフォーマンス1256は過去最高で、水パフォは2回目。C問題が比較的早く解けた上にD,Eがかなり難しく崖になっていたことに助けられましたが好成績でよかったです。
A問題
A問題としては難しめでした。
早さVm/sで投げた球がT秒後からS秒後まで消えているとき、Dm離れた位置で打てるかどうか(消えていないかどうか)を判定する問題です。
T*V<=D<=S*Vであれば消えていることになります。
2分47秒で提出しAC。
B問題
長さNの整数列からXと等しい要素を取り除き残った数列を出力する問題です。
前から順にXと等しいかどうかを判定し、等しくない場合だけ出力します。
空白区切りの出力にちょっともたつきました。
4分40秒、通算7分37秒で提出しAC。
これもまあまあのスピードでした。
C問題
問題文が一見理解しにくかったですが,図を描いて素直に理解してわかりました。
一番外側のマスが必ず白いというのもありがたかったです。
2*2の4マスごとに見ていって黒が3か所もしくは黒が1か所のところが頂点になります。
サンプルが少なかったので自分でいくつか追加のサンプルをつくって動作を確認しました。
13分02秒(通算20分39秒)で提出しAC。
提出直後の順位が500位台、青パフォがでていて驚きました。
#include <bits/stdc++.h> using namespace std; int main(){ int h,w; cin>>h>>w; string s; char d[h][w]; for(int i=0;i<h;i++){ cin>>s; for(int j=0;j<w;j++){ d[i][j]=s.at(j); } } int ans=0; for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ int cnt=0; for(int k=0;k<2;k++){ for(int l=0;l<2;l++){ if(d[i+k][j+l]=='#') cnt++; } } //cout<<cnt<<endl; if(cnt==1 || cnt==3) ans++; } } cout<<ans<<endl; return 0; }
D問題
円の中の格子点の数を求める問題です。
単純な全探索でトライしましたがサンプルは通るもTLEに。
本番中はX軸方向を全探索、Y軸方向を二分探索で解くことを考えていましたが、実装しきれませんでした。
もしこれで実装できていたとしても誤差でWAになっていたのがわかりました。
手も足もでない問題というわけではなく,もう少しでACに手が届いた問題だと思います。