CTU Open Contest 2019 AB题

小菜鸡飘过https://www.jisuanke.com/contest/7321?view=challenges

A: Beer Barrels

题意:给出四个整数:A,B,K,C,;A,B,C都是大于0的个位数,问在所有仅有A或者B组成的K位数中,数字C的个数是多少

 

思路:

1.先考虑特殊情况:

(1) 如果C不是A或者B 则输出0

(2) 如果K = 0 则输出0

(3) 如果A==B 则输出K

2.再考虑一般情况:

共K位,每位都可能有C,求出共有多少种可能,排列组合问题。

多个 C(i,k)*I 相加

阶乘可以用数组模拟;用快速幂求逆元

 

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;


ll pow(ll a,ll b,ll mod)
{
    ll ans = 1;
    while(b!=0)
    {
        if(b%2==1) ans=(a%mod*ans%mod)%mod;
        
        a = (a%mod*a%mod)%mod;
        b = b/2;
    }
    return ans%mod;
    
}
int main()
{
    ll mod = 1000000007;
    ll a,b,k,c;
    cin>>a>>b>>k>>c;
    if(k==0) cout<<"0"<<endl;
    else if(a==b) cout<<k<<endl;
    else if(c!=a&&c!=b) cout<<"0"<<endl;
    else
    {    
        ll f[1010];
        f[0] = 1;
        for(int i=1;i<=1000;i++)
        {
            f[i] = (f[i-1]*i)%mod;
        }
        ll ans = 0;
        for(int i=1;i<=k;i++)
        {
            ll t = (i%mod*f[k]%mod* pow(f[i],mod-2,mod)%mod * pow(f[k-i],mod-2,mod)%mod)%mod;
            ans = (ans%mod +t%mod)%mod;
        }
        cout<<ans<<endl;

    }
    return 0;
}

 

B: Beer Bill

题意:计算字符串的价格,给多个字符串,每个占一行,一种字符串名叫Raked Line 只含有C个‘|’字符,这种字符价格定义为42*C,另一种叫 Priced Line,格式以数字开头,中间用“,-”连接,结尾是连续的C个‘|’,这种字符串的价格定义为price*C,若结尾没有‘|’出现则C默认为一个,计算所有字符串的总价,总价向上去整到10的倍数。

思路:通过第一个字符判断是第一种还是第二种,在按要求输出(四舍五入到最接近10的倍数)

 

AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {

    string s;
    int ans = 0;
    while(cin>>s)
    {
        int count = 0;
        if(s[0]=='|')
        {
            count = 42*s.length();
        }else{
            int x = 0;
            int sum = 1;
            for(int i=0;i<s.length();i++){
                if(s[i]>='0'&&s[i]<='9'){
                    x = x*10+(s[i]-'0');
                }
                if(s[i]=='|') sum++;
            }
            if(sum!=1) sum--;
            count = x*sum;

        }
        ans+=count;


        }
    if(ans%10!=0)
    {
        int t = ans/10+1;
        ans = t*10;
    }
    cout<<ans<<",-"<<endl;


    return 0;
}

 

posted @ 2020-02-27 22:05  精神小伙儿  阅读(128)  评论(0编辑  收藏  举报