小菜鸡飘过
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; }
原文地址:https://www.cnblogs.com/subject/p/12374760.html
时间: 2024-10-14 06:58:20