zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    左连接,右连接,内连接及全连接语法及区别
    System.getProperty("user.dir");
    mysql count统计多列值相同的条数
    mybatis 查询返回参数包含list的映射写法
    idea 永久破解
    springboot读取自定义配置文件及乱码问题
    linux CentOS7 firewall
    关于@Valid 不生效的问题
    简单记录springboot项目访问静态资源的配置
    maven 远程部署到tomcat服务器
  • 原文地址:https://www.cnblogs.com/subject/p/12374760.html
Copyright © 2011-2022 走看看