K.First Last
一共有n个人,然后每一局拿到第一名或者最后一名的概率为2/n,然后连续m局拿到第一名或者最后一名的概率为pow(2/n,m)
特判一下当n为1时,拿第一名或者最后一名的概率为1
注意,输出1时要写1.0,写1的话就wa了
AC代码:
#include
#include
#include
#include
#include
#include
#include
#define endl '\n'
using namespace std;
typedef long long ll;
int n,m;
void solve() {
cin>>n>>m;
if(n==1) printf("%.10f\n",1.0);
else printf("%.10f\n",pow((double)2/n,m));
}
int main() {
// ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
int t=1;
// cin>>t;
while(t--)
solve();
return 0;
}
M.Fair Equation
给定一个加法等式,如果本身就成立,那么就输出Yes,并且把这个式子输出来
如果不成立,问能否在等式的任意一个位置添加一个数字,使得该等式成立,如果成立,那么输出Yes,并把正确的式子输出,否则输出No
暴力枚举,在a中任意位置插入0到9,判断等式是否成立,在b中任意位置插入0到9,判断等式是否成立,在c中任意位置插入0到9,判断等式是否成立
AC代码:
#include
#include
#include
#include
#include
#include
#include
#define endl '\n'
using namespace std;
typedef long long ll;
int a,b,c;
char ch1,ch2;
void output(int a,int b,int c){
cout<>a>>ch1>>b>>ch2>>c;
if(a+b==c){
cout<<"Yes"<>t;
while(t--)
solve();
return 0;
}
L.Grayscale Confusion
一个三维向量(r,g,b),如果满足r
其中第一个和第二个不能有严格的偏序关系,它们映射成的值是相等的
利用拓扑排序,具有严格偏序关系的,小的映射成的值小,大的映射成的值大
AC代码:
#include
#include
#include
#include
#include
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=1010;
int d[N];
int n;
struct node {
int r,g,b;
bool operator<(const node &W)const {
return r>n;
vector>e(n+1);//建图
vectorv(n+1);
vectorans(n,-1);//存答案,个数为n,每个元素初值为-1
for(int i=0; i>v[i].r>>v[i].g>>v[i].b;
//当第一个和第二个具有严格的偏序关系时,那么直接输出-1
//这里只能用小于号,不能用大于号,因为结构体将小于号重载,但是并没有将大于号重载
if(v[0]q;
//找出严格偏序的点对,建立有向无环图,小的指向大的,为拓扑排序做准备,拓扑排序先输出偏序关系小的,再输出大的
//但是要单独处理第一个点和第二个点和其它点的偏序关系,因为我们把第一个点和第二个点的映射值看成是一样的,那么将0和1看成是一个点
for(int i=2; i255){
cout<<-1<>t;
while(t--) {
solve();
}
return 0;
}