AtCoder Beginner Contest 150

AtCoder Beginner Contest 150

A

#include <bits/stdc++.h>
using namespace std;
int main() {
    int k, x;
    cin >> k >> x;
    if(k * 500 >= x) cout << "Yes\n";
    else cout << "No\n";
    return 0;
}

B

字串匹配

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n,cnt = 0;
    string s;
    cin >> n >> s;
    for(int i = 0;i < n; ++i) {
        if(i + 2 < n && s[i] == 'A' && s[i + 1] == 'B' && s[i + 2] == 'C') cnt ++;
    }
    cout << cnt;
    return 0;
}

C

康托展开

#include <bits/stdc++.h>
using namespace std;
const int N = 10;
int fact[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
int cantor(int a[],int n) {
    int res = 0;
    for(int i = 0;i < n; ++i) {
        int cnt = 0;
        for(int j = i + 1;j < n; ++j) if(a[j] < a[i]) cnt  ++;
        res += cnt * fact[n - i - 1];
    }
    return res + 1;
}
int main() {
    int n,a,b,s[N];
    cin >> n;
    for(int i = 0;i < n; ++i) cin >> s[i];
    a = cantor(s,n);
    for(int i = 0;i < n; ++i) cin >> s[i];
    b = cantor(s,n);
    cout << abs(a - b);
    return 0;
}

D

给定一个序列\(A={a_1+a_2+\dots+a_N}\) 序列中的每一个数都是偶数,和一个整数\(M\)

定义一个”半公倍数“\(X\) 满足对于每个\(a_i\) ,都存在一个正整数\(p\) 与之对应,且\(X=a_i\times(p+0.5)\)

\(X\) 的范围是\(1\sim M\) 让你寻找有多少个这样的数字

他的意思就是说,\(p\) 可以随便改变,但是\(X\) 是固定的,对于序列中的每个数字都能得到同一个\(X\)

问你有几个这样的\(X\)

先把等式两边变形\(X=a_i/2\times(2p+1)\)

因为\(a_i\)是偶数,所以令\(b_i=a_i/2\) ,\(X=b_i\times(2p+1)\) ,所以只需要找有多少个\((2p+1)\) 小于等于\(M\) 即可

咕咕咕。

posted @ 2020-03-12 14:30  南风--  阅读(200)  评论(0编辑  收藏  举报