ABC078 (AtCoder Beginner Contest 078)
きょうはシャドバを10時間くらいしてBPを1000くらい上げたような気がします。ネクロの勝率が高かったです。特にサタン出されてから昏き底やディースの裁きに耐えきり、アスタロトを打てない盤面に仕上げて逆転勝ちできたので(互いに山札2,3枚しか残ってない)確率はしょせん確率なのだと実感できました。諦めてはいけません。(だんだん導入が雑に・・・)
A - HEX
HEX(16進数)の10~15(A~F)2つの組(X,Y)をあげるから、X<Yのときは '<' を、X=Yのときは '=' を、X>Yのときは '>' を出力しなさいよとのこと。
#include <iostream> using namespace std; int main(){ char X, Y; cin >> X >> Y; if(X<Y) cout << "<\n"; else if(X>Y) cout << ">\n"; else cout << "=\n"; return 0; }
char型の変数を不等号(比較演算子)で比べようとすると、int型の文字コードに直して比べてくれる(注:16進数に直すわけではない)ので、簡単でした。charの比較はA
B - ISU
ISU(椅子)の長さはX、人が座る幅はY、人と人、人とISUの間の幅はZ、さあISUには何人座れるでしょう。ってな問題。
n人座れるとすると、Y*n+Z*(n+1) < X < Y*(n+1)+Z*(n+2) すなわち (Y+Z)*n+Z < X < (Y+Z)*(n+1)+Z であるから、n < (X-Z)/(Y+Z) < n+1 つまり、(X-Z)/(Y+Z) を切り捨てて(int型にして)出力すればOK。
#include <iostream> using namespace std; int main(){ int x, y, z; cin >> x >> y >> z; x -= z; int ans = x/(y+z); cout << ans << endl; return 0; }
コンテスト中はそんな不等式解いてなくて、1人あたりY+Z必要で、端っこの人だけさらにZ必要だから、XをZ縮めて、Y+Zで割ればいいやみたいに考えてました。上のコードはそういうわけ。
C - HSI
たぶんHSIって高速インターネットだと思うんだけど・・・(定かでない)
今回初登場のNくんとMくんです。わー\(^^)/ ある競プロ問題にはN個のテストケース(正誤判定入力)があって、そのうちM個は1問あたり1900msかけると50%(1/2)の確率で解け、残りのN-M問は1問あたり100msで確実に解けるプログラムを高橋君(AtCoderの社長さん)が書いたので、この問題でACをもらえるまで高橋君はコードを何回でも提出するとき、実行時間の総和の期待値を出力しなさい。ってさ。(高橋さん自分で求めて←)
#include <iostream> #include <cmath> using namespace std; int main(){ int n, m; cin >> n >> m; int ans = ( (n-m)*100 + m*1900 ) * pow(2,m); cout << ans << endl; return 0; }
答えは ( (N-M)*100 + M*1900 ) * 2^M になるんだけど、なんでこれになるのかはよく分からずに出した。これが解けたのはシャドバのおかげ(違う)。まあ x=(N-M)*100 + M*1900 として、ans=x+(1-1/(2^M))*ans ってなるらしい。ようわからん。なぜわかってないのに答えだけ書けたのかもわからん。つまりわからん。
D - ABS
ABS(絶対値)は実装力がなくてRE出しまくってる間にコンテスト終わってた。ので上げるコードがない。