关注
牛客2024年愚人节比赛(A-K)

比赛链接

毕竟是娱乐场,放平心态打吧。。。

只有A一个考了数学期望,其他的基本都是acmer特有的脑筋急转弯,看个乐呵即可。


A 我是欧皇,赚到盆满钵满!

思路:

我们有 p 1 p_1 p1 的概率直接拿到一件实物,有 1 − p 1 1-p_1 1p1 的概率拿到 10 10 10 牛币,然后去第二个抽奖。第二个是 p 2 p_2 p2 的概率拿到一件实物, p 3 p_3 p3 的概率重新抽卡, 剩下的概率就啥也没有。另外的第三四个抽奖和前面没有关系,第三个抽到实物的概率是 p 4 p_4 p4,第四个是 1 10 \dfrac1{10} 101

我们假设第二个抽奖拿到实物的期望为 f f f,那么有: f = p 2 ∗ 1 + p 3 ∗ f f=p_2*1+p_3*f f=p21+p3f ( 1 − p 3 ) ∗ f = p 2 (1-p_3)*f=p_2 (1p3)f=p2 f = p 2 1 − p 3 f=\dfrac{p_2}{1-p_3} f=1p3p2我们有 1 − p 1 1-p_1 1p1 能拿到牛币,才能去第二个抽奖,这样第一个抽奖拿到实物的期望就是 p 1 ∗ 1 + ( 1 − p 1 ) ∗ f p_1*1+(1-p_1)*f p11+(1p1)f p 1 + ( 1 − p 1 ) ∗ p 2 1 − p 3 p_1+\dfrac{(1-p_1)*p_2}{1-p_3} p1+1p3(1p1)p2

那么总的拿到实物的期望就是 p 1 + ( 1 − p 1 ) ∗ p 2 1 − p 3 + p 4 + 1 10 p_1+\dfrac{(1-p_1)*p_2}{1-p_3}+p_4+\dfrac1{10} p1+1p3(1p1)p2+p4+101

code:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;

ll qpow(ll a,ll b){
	b%=mod-1;
	ll base=a%mod,ans=1;
	while(b){
		if(b&1){
			ans=(base*ans)%mod;
		}
		base=(base*base)%mod;
		b>>=1;
	}
	return ans;
}

ll inv(ll x){return qpow(x,mod-2);}

ll a,b,c,d,e,f,g,h;
ll p1,p2,p3,p4;

int main(){
	cin>>a>>b>>c>>d>>e>>f>>g>>h;
	p1=a*inv(b)%mod;
	p2=c*inv(d)%mod;
	p3=e*inv(f)%mod;
	p4=g*inv(h)%mod;
	cout<<(p1+p2*(1-p1+mod)%mod*inv(1-p3+mod)%mod+p4+inv(10))%mod;
	return 0;
} 

B 我是欧皇,赚到盆满钵满!(fool version)

思路:

不难,也没啥坑,但是榜歪了没人写。

第一三四个抽奖只能玩一次,只能拿到有限的实物,所以我们可以直接无视。因为我们有无限的牛币,可以抽无限次,所以只要第二个抽奖有概率能拿到实物,那么就相当于可以拿到无限的实物。因此这个题只要保证 p 2 > 0 p_2>0 p2>0 就行了。

code:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;

ll a,b,c,d,e,f,g,h;

int main(){
	cin>>a>>b>>c>>d>>e>>f>>g>>h;
	if(c!=0)cout<<"Infinity";
	else cout<<"limited";
	return 0;
} 

C 征战沙场

思路:

不懂出题人的脑回路。

样例说明说没有队友,所以你不属于任何一方。最少要和打剩下的人打,最多要全打一遍。

code:

#include <iostream>
#include <cstdio>
using namespace std;

int x,y;

int main(){
	cin>>x>>y;
	cout<<abs(x-y)<<" "<<x+y;
	return 0;
}

D 炼药锅

思路:

经典脑筋急转弯。

这题不是问你有几口锅,而是锅有几个口。

code:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
	cout<<1;
	return 0;
} 

E what connection?

思路:

参考牛客题解讨论区。

这几个单词是 .io .edu .cn .one .com .org 等域名的全称。它们都是 顶级域名(top-level domain)

code:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    cout<<"top-level domain";
    return 0;
}

F 逻辑大师

思路:

数学天才,逻辑大师可以手玩。我是逻辑低手,我选择爆搜。

code:

没写,愚人节满课,清明还要调休,题面看着就来气。尝试当逻辑糕手的时候还推错了(以为第三题正确答案以外的其他三个选项的答案是一致的)。

答案如下:
在这里插入图片描述


G mutsumi的……&数#¥@数

思路:

随便搜个乱码恢复的网站丢上去大概能得到这个:
请添加图片描述

mutumi有一个数组,她想知道数组里正数和负数共有几个

彩蛋我是真没找到

code:

#include <iostream>
#include <cstdio>
using namespace std;

int n,ans;

int main(){
    cin>>n;
    for(int i=1,t;i<=n;i++){
        cin>>t;
        if(t!=0)ans++;
    }
    cout<<ans<<endl;
    return 0;
}

H 一个简单的数学题

思路:

1e18是个浮点数,因此有可能会出现精度损失。在一个大浮点数和小浮点数相加的时候,小数可能直接舍入导致消失了。

code:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    int i;
    for(i=1;1e18+i==1e18;i++);
	cout<<i-1;
	return 0;
}

I 小苯的排列构造

思路:

1 1 1 按顺序输出到 n n n 即可。因为相邻两数一定是互质的。

证明可以利用辗转相除法。众所周知 g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b) gcd(a,b)=gcd(b,a%b),当 a = b + 1 a=b+1 a=b+1(两数相邻)时,就有 g c d ( a , b ) = g c d ( b + 1 , b ) = g c d ( b , 1 ) = 1 gcd(a,b)=gcd(b+1,b)=gcd(b,1)=1 gcd(a,b)=gcd(b+1,b)=gcd(b,1)=1

code:

#include <iostream>
#include <cstdio>
using namespace std;

int T,n;

int main(){
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=1;i<=n;i++)cout<<i<<" \n"[i==n];
	}
	return 0;
}

J ✌

思路:

https://t.bilibili.com/762931495002177560

都给我去看兰子哥哥的女装!

网址中很容易看出来和bilibili有关,还要和牛客有关,从牛客B站官方动态一路往下翻就翻到了。

在这里插入图片描述

code:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
	cout<<"https://t.bilibili.com/762931495002177560";
	return 0;
}

K white-collar teacher 说唱歌手 me

思路:

看评论区题解:
在这里插入图片描述
完全数的定义:
在这里插入图片描述
直接搜可以得到第九个完全数。

6,28,496,8128,33550336,8589869056,137438691328,2305843008139952128,2658455991569831744654692615953842176,191561942608236107294793378084303638130997321548169216,13164036458569648337239753460458722910223472318386943117783728128,14474011154664524427946373126085988481573677491474835889066354349131199152128

code:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    cout<<"2658455991569831744654692615953842176"<<endl;
    return 0;
}

转载自CSDN-专业IT技术社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_45809243/article/details/137248556

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--