河南萌新联赛2024第(四)场:河南理工大学

目录

B-小雷的神奇电脑_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

​编辑 思路:

代码:

 D-简单的素数_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

思路:

代码: 

F-小雷的算式_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

思路:

代码:

H-聪明且狡猾的恶魔_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com) 

思路:

代码: 

I-马拉松_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

思路:

代码:


B-小雷的神奇电脑_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

 思路:

同或运算的最大值,其实就是异或的最小值,求异或的最小值,值越接近的二进制位数相同的越多,异或则小。所以排个序,计算异或的最小值,再用最大减去异或的最小值,即为同或的最大值。

代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 1e6;
int a[N],s[N];
void slove()
{
	int n, m;
	cin >> n >> m;
	int cnt = 1;
	a[0] = 1;
	for (int i = 1; i <= m; i++)
	{
		cnt *= 2;
		a[i] = a[i - 1] + cnt;
	}
	int ans = 5e9;
	for (int i = 0; i < n; i++)
		cin >> s[i];
	sort(s, s + n);
	for (int i = 0; i < n-1; i++)
	{
		ans = min(ans, s[i] ^ s[i + 1]);
	}
	cout << a[m - 1] - ans;
}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
	return 0;
}

 D-简单的素数_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

思路:

简单的素数判断

代码: 

#include<iostream>
#define int long long
using namespace std;
int judge(int x)
{
	if (x == 2)
		return 1;
	int flag = 0;
	for (int i = 2; i * i <= x; i++)
	{
		if (x % i == 0)
		{
			flag = 1;
			break;
		}
	}
	if (flag == 1)
		return 0;
	else
		return 1;
}
void slove()
{
	int x;
	cin >> x;
	if (judge(x))
		cout << "Yes\n";
	else
		cout << "No\n";
}
signed main()
{
	int t;
	cin >> t;
	while (t--)
	{
		slove();
	}
	return 0;
}

F-小雷的算式_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

 

思路:

读一个算一个

代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 1e6;
int a[N];
bool cmp(int a, int b)
{
	return a > b;
}
void slove()
{
	int cnt = 0, ans = 0;
	while (1)
	{
		cin >> a[cnt++];
		char tmp = getchar();
		if (tmp == '\n' || tmp == EOF)
			break;
	}
	sort(a, a + cnt,cmp);
	for (int i = 0; i < cnt; i++)
	{
		ans += a[i];
		if (i != 0)
			cout << "+";
		cout << a[i];
	}
	cout << "\n" << ans;
}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
	return 0;
}

H-聪明且狡猾的恶魔_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com) 

思路:

手算一下,就找到规律了

代码: 

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 1e6;
int a[N];
void slove()
{
	int n, x;
	cin >> x >> n;
    if(n%2==0)
        cout << x - (n / 2)+1 << "\n";
    else
        cout<<x-(n/2)<<"\n";
}
signed main()
{
	int t=1;
	cin >> t;
	while (t--)
	{
		slove();
	}
	return 0;
}

I-马拉松_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)

思路:

看成一棵树,深度搜索一遍从x到y和y到x,看一下有几个点不能到达,最后相乘一下

代码:

#include<iostream>
#include<cstring>
#include<vector>
#define int long long
using namespace std;
const int N = 1e6;
vector<int>e[N];
int vis[N],ans=1;
void dfs(int x, int y)
{
	vis[y] = 1;
	for (auto u : e[x])
	{
		if (vis[u] == 0 && u != x)
		{
			ans++;
			dfs(u, x);
		}
	}
}
void slove()
{
	int n, x, y;
	cin >> n >> x >> y;
	for (int i = 0; i < n - 1; i++)
	{
		int a, b;
		cin >> a >> b;
		e[a].push_back(b);
		e[b].push_back(a);
	}
	ans = 1;
	memset(vis, 0, sizeof(vis));
	dfs(x, y);
	int ans1 = n - ans;
	memset(vis, 0, sizeof(vis));
	ans = 1;
	dfs(y, x);
	int ans2 = n - ans;
	cout << ans1 * ans2 << "\n";
}
signed main()
{
	int t = 1;
	while (t--)
	{
		slove();
	}
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值