牛客2024年除夕娱乐赛

纯娱乐,就第四题值得一看。


A 我有一款游戏

code:

#include 
#include 
using namespace std;

int main(){
	cout<<"原神启动";
	return 0;
} 

B 除夜

#include 
#include 
using namespace std;

int main(){
	cout<<"除夕快乐万事如意";
	return 0;
} 

C 咏兰

出题人的名字。。。

code:

#include 
#include 
using namespace std;

int main(){
	cout<<"神崎兰子";
	return 0;
} 

D Kevin的新春礼物

思路:

这个有点意思。

首先明确一下0和任何数的最小公倍数都是0。

所以只会出现三种情况:

  1. 0和0,这时成立
  2. 0和非零数:假设 a i a_i ai 是非零数,那么 l c m ( a i , a j ) = 0 ≠ a i ⊕ a j = a i lcm( a_i,a_j)=0\not=a_i \oplus a_j=a_i lcm(ai,aj)=0=aiaj=ai ,这种情况一定不成立
  3. 非零数和非零数:假设 a i ≥ a j a_i\ge a_j aiaj
    1. 如果 a i a_i ai a j a_j aj 是倍数关系,那么 l c m ( a i , a j ) = a i ≠ a i ⊕ a j lcm( a_i,a_j)=a_i\not=a_i \oplus a_j lcm(ai,aj)=ai=aiaj (因为 a j a_j aj 非零, a i a_i ai 异或值后肯定不可能保持原值,否则 a j a_j aj 就应该是0)
    2. 如果 a i a_i ai a j a_j aj 不是倍数关系, l c m ( a i , a j ) ≥ 2 ∗ a i lcm( a_i,a_j) \ge 2*a_i lcm(ai,aj)2ai(不是倍数关系那肯定 a j a_j aj 有一个因数 a i a_i ai 没有,这个因数肯定大于等于2)。 a i ⊕ a j < 2 ∗ a i a_i \oplus a_j\lt 2*a_i aiaj<2ai(可以看二进制, 2 ∗ a i 2*a_i 2ai 相当于 a i a_i ai 向左移动一位,前者比后者多一位,而无论怎么异或都不可能多一位出来,所以前者肯定大。或者可以这样想: a i ⊕ a j ≤ a i ∣   a j ≤ a i + a j ≤ 2 ∗ a i a_i \oplus a_j\le a_i |\ a_j \le a_i+a_j \le 2*a_i aiajai ajai+aj2ai,异或结果一定小于或,或就是不进位加法,一定小于加法。而 a i = a j a_i=a_j ai=aj 时一定不成立,所以最后一个不等式的不等号一定不取等,所以一定小于)。

所以经过讨论发现只有0与0之间可以产生解,所以记录一下0的个数,答案就是0的个数的平方

long年记得开long long

code:

#include 
#include 
using namespace std;

int n,cnt;

int main(){
	cin>>n;
	for(int i=1,t;i<=n;i++){
		cin>>t;
		if(t==0)cnt++;
	}
	cout<<1ll*cnt*cnt;
	return 0;
} 

E 今晚是?

思路:

先说答案吧,是engage

至于为啥,我给出一个猜想:

题目是“楔形匣格”,拼音为“xiexingxiage”,然后根据题目名称,因为今晚是除夕(xi),所以除去“xi”,得到“engage”。

code:

#include 
#include 
using namespace std;

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

你可能感兴趣的:(牛客,娱乐,算法,c++)