K-First Last
题意
给定n,m。求在n个人的m场获胜概率均等的情况下,小范每场都是第一名或者最后一名的概率。称这种情况为“出类拔萃”
题解
当n=1或者n=2时,小范“出类拔萃”概率是1,直接输出就好。
其他情况。每场比赛小范“出类拔萃”概率是2/n;一个循环求(2/n)的m次方即可。
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll n,m,i;
double ans=1.0;
cin>>n>>m;
if(n==1||n==2)
{
cout<<1;
return 0;
}
else
for(i=0;i<m;i++)
{
ans*=2.0/n*1.0;
}
printf("%.15lf",ans);
return 0;
}
M-Fair Equation
题意
给定一个 a + b = c 的式子,让你判断是否可以在其中加一个数字使得这个等式成立或者这个式子原本就成立。
题解
先将题目给出的等式的数字取出来。然后一个一个位往里面加数字模拟判断是否可行。
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a,b,c;
ll flag=0;
string sa,sb,sc;
string s;
ll number(string s)
{
ll ans=0,i;
for(i=0;i<s.size();i++)
{
ans+=s[i]-'0';
ans*=10;
}
return ans/10;
}
void num(string s)
{
a=0;
b=0;
c=0;
ll p=0,i;
for(i=0;i<s.size();i++)
{
if(i==0)
while(s[i]!=' ')
{
a+=s[i]-'0';
a*=10;
sa+=s[i];
i++;
}
if(s[i-2]=='+'&&i>=2)
while(s[i]!=' ')
{
b+=s[i]-'0';
b*=10;
sb+=s[i];
i++;
}
if(s[i-2]=='='&&i>=2)
while(i!=s.size())
{
c+=s[i]-'0';
c*=10;
sc+=s[i];
i++;
}
}
a/=10;
b/=10;
c/=10;
}
void print(ll a,ll b,ll c)
{
cout<<"Yes\n";
cout<<a<<" + "<<b<<" = "<<c<<endl;
flag=1;
}
void solve(string s)
{
ll i,j;
num(s);
if(a+b==c) print(a,b,c);
else
{
for(i=0;i<=sa.size();i++)
{
for(j=0;j<=9;j++)
{
if(i==0&&j==0) continue;
char d='0';
d+=j;
string t=sa.substr(0,i)+d+sa.substr(i,sa.size());
//cout<<t<<endl;
ll a=number(t);
//cout<<a<<endl;
if(a+b==c)
{
print(a,b,c);
return;
}
}
}
for(i=0;i<=sb.size();i++)
{
for(j=0;j<=9;j++)
{
if(i==0&&j==0) continue;
char d='0';
d+=j;
string t=sb.substr(0,i)+d+sb.substr(i,sb.size());
//cout<<t<<endl;
ll b=number(t);
//cout<<a<<endl;
if(a+b==c)
{
print(a,b,c);
return;
}
}
}
for(i=0;i<=sc.size();i++)
{
for(j=0;j<=9;j++)
{
if(i==0&&j==0) continue;
char d='0';
d+=j;
string t=sc.substr(0,i)+d+sc.substr(i,sc.size());
//cout<<t<<endl;
ll c=number(t);
//cout<<a<<endl;
if(a+b==c)
{
print(a,b,c);
return;
}
}
}
}
}
int main(){
getline(cin,s);
solve(s);
if(flag==0) cout<<"No";
return 0;
}