u_sho競プロぶろぐ

21歳。みゃーくぴとぅ。ゆる~く続けますたぶん。  デザイン変えました(2019/2/25)これでいきます

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必要だから、XZ縮めて、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出しまくってる間にコンテスト終わってた。ので上げるコードがない。

おしまい