[2020.4.5rating]codeforces Beta Round #92 (Div. 2 Only) (A、B)Codeforces Beta Round #95 (Div. 2)(A-C)

一级目录

二级目录

三级目录

链接

Codeforces Beta Round #92 (Div. 2 Only)
Codeforces Beta Round #95 (Div. 2)

A - The number of positions

题目类型:思维

题意:

一共有n个人,有不少于a个人站在他前面,有不多于b个人在他后面,问他的位置有几种选择

代码:

int main(){
    int n, ans, a, b; cin >> n >> a >> b;
    (n-a-1>b) ? ans=b+1: ans=n-a;
    OT(ans);
}

B - Permutations

题目类型:模拟

题意:

给你n个排列,每个排列有k个数字,现在要求你对这n个排列,每个进行重新排列,要求这n个排列中的最大数和最小数的差值最小。

解题思路:

枚举所有的排列,每次直接记录差值

代码:

string v[10];
int main()
{
    int n, k, num[10]; RD(n, k);
    REP(i, n) cin >> v[i];
    REP(i, k) num[i] = i;
    int ans = INF;
    do
    {
        vector<int> _;
        REP(i, n) {
            int t = 0;
            REP(j, k)
                t = t * 10 + (v[i][num[j]]);
            _.push_back(t);
        }
        sort(ALL(_));
        ans = min(ans, _[n-1] - _[0]);
    } while (next_permutation(num, num+k));//全排列

    OT(ans);
    return 0;
}

A - cAPS lOCK

题目类型:模拟

题意:

按照题目要求变更字符

Let’s consider that a word has been typed with the Caps lock key accidentally switched on, if:
either it only contains uppercase letters;
or all letters except for the first one are uppercase.

解题思路:

它仅包含大写字母;
或除第一个字母外的所有字母均为大写。这两种情况下需要改写

代码:

string s;
int main(){
    cin >>s;
    FOR(i, 1, SZ(s))
        if(s[i]>='a' && s[i]<='z'){
            cout << s << endl;
            return 0;
        }
    FOR(i, 0, SZ(s)){
        if(s[i]>='a' && s[i]<='z')
            s[i] = s[i] + 'A' - 'a';
        else if(s[i]>='A' && s[i]<='Z')
            s[i] = s[i] + 'a' - 'A';
    }
    cout << s << endl;
    return 0;
}

E - Opposites Attract

题目类型:思维

题意:

通过组合,出现最多的0值

代码:

const int N = 12;
LL a[N], b[N];
int main() {
    LL n, ans = 0; scanf("%lld", &n);//RD(n);
    REP(i, n) {
        int t; scanf("%d", &t);
        if (t >= 0) {
            a[t]++;
        } else {
            b[-t]++;
        }
    }
    ans = (LL)a[0] * (a[0] - 1) / 2;
    FOR_1(i, 1, 10){
        ans += (LL)a[i] * b[i];
    }
    OT(ans);
}

F - The World is a Theatre

题目类型:

题意:

他们需要选择一个小组,恰好有t个演员,其中男生人数不少于4个,女孩人数不少于1个。有多少种方法可以选择一个小组

解题思路:

化简下公式 C(n, m) = C(n - 1, m - 1) + C(n - 1, m)。
先打表出组合数,然后计算就可以了

代码

const int M = 101;
LL arr[M][M];
void C() {
    REP(i, M) {
        arr[i][0] = 1;
    }
    FOR_1(i, 1, M) {
        FOR_1(j, 1, i) { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; }}
} 
int main() {
    C();
    int m, n, t; RD(n, m, t);
    LL ans = 0;
    FOR(i, 4, t) {
        if (n >= i && (t - i) <= m) {
            ans += arr[n][i] * arr[m][t - i];
        }
    }
   OT(ans);
    return 0;
}
原文地址:https://www.cnblogs.com/ygbrsf/p/12927331.html