TakefumiYamamura / programming_contest

1 stars 0 forks source link

AtCoder Beginner Contest 028 #32

Open TakefumiYamamura opened 7 years ago

TakefumiYamamura commented 7 years ago

http://abc028.contest.atcoder.jp/

TakefumiYamamura commented 7 years ago

C - 数を3つ選ぶマン

時間制限 : 2sec / メモリ制限 : 256MB

問題文 異なる整数が 5 個与えられます。

この中から 3 つ選んでその和で表すことの出来る整数のうち、3 番目に大きいものを出力してください。

note

数が5個しかないので全通り試すだけ。

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

int main(){
     vector<int> nums;
     for (int i = 0; i < 5; ++i)
     {
        int n;
        cin >> n;
        nums.push_back(n);
     }

     vector<int> ans;
     for (int i = 0; i < 1<<5; ++i)
     {
        int count = 0;
        for (int j = 0; j < 5 ; ++j)
        {
            if(i >> j & 1){
                count++;
            }
        }
        if(count == 3){
            int tmp = 0;
            for (int j = 0; j < 5; ++j)
            {
                if(i >> j & 1){
                    tmp += nums[j];
                }
            }
            ans.push_back(tmp);
        }
     }
     sort(ans.begin(), ans.end(), greater<int>() );
     cout << ans[2] << endl;
}
TakefumiYamamura commented 7 years ago

D - 乱数生成

時間制限 : 2sec / メモリ制限 : 256MB

問題文

2 つの整数 N、K が与えられます。

1 以上 N 以下の整数のなかからどれか 1 つ、等確率に選ぶ機械を考えます。

その機械を 3 回動かした時、選ばれた 3 つの数の中央値が K となる確率を求めてください。

note

数学 D問題の割に簡単ではげた

#include <iostream>

using namespace std;

int main(){
    long double n, k;
    cin >> n >> k;
    long double ans;
    ans =  (1.0 + 3 * (k - 1) + 3 * (n - k) + 6 * (k - 1) * (n - k) )/ (n * n * n);
    printf("%.24Lf\n", ans );
}