“范式杯”2023牛客暑期多校训练营10

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<>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;
}

你可能感兴趣的:(2023牛客多校,c++,算法)