河南萌新联赛2024第(一)场:河南农业大学

目录

A-造数_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

​思路:

代码: 

C-有大家喜欢的零食吗_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)​

思路:

代码:

F-两难抉择新编_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

​思路:

代码:

G-旅途的终点_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

​思路:

代码:

H-两难抉择_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

​思路:

代码:

I-除法移位_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

代码:

K-图上计数(Easy)_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

代码:


A-造数_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

反过来 n通过-1、-2、/2几次转化为0

代码: 

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int a[N],ans=1;
signed main()
{
	int n,cnt=0;
	cin >> n;
	while (n)
	{
		if (n == 2)
			n -= 2;
		else if (n % 2 == 1)
			n -= 1;
		else
			n /= 2;
		cnt++;
	}
	cout << cnt;
	return 0;
}

C-有大家喜欢的零食吗_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

二分图模板

代码:

#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#define int long long 
using namespace std;
const int N = 2e5 + 10;
int a[N], n, m, k, ans=0;
bool vis[N];
int match[N];
vector<int> e[N];
bool dfs(int u)
{
	for (int v : e[u])
	{
		if (vis[v])
			continue;
		vis[v] = 1;
		if (match[v] == 0 || dfs(match[v]))
		{
			match[v]=u;
			return 1;
		}
	}
	return 0;
}
signed main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> k;
		for (int j = 1; j <= k; j++)
		{
			cin >> m;
			e[i].push_back(m);
		}
	}
	for (int i = 1; i <= n; i++)
	{
		memset(vis, 0, sizeof(vis));
		if (dfs(i))
		{
			ans++;
		}
	}
	if (ans == n)
		cout << "Yes\n";
	else
	{
		cout << "No\n";
		cout << n - ans << "\n";
	}
	return 0;
}

F-两难抉择新编_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

暴力搜索

代码:

#include<iostream>
#define int long long 
using namespace std;
const int N = 2e5 + 10;
int a[N];
signed main()
{
	int n,sum=0,ans=0;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		sum ^= a[i];
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n / i; j++)
		{
			ans = max(ans, sum ^ a[i] ^ (a[i] + j));
			ans = max(ans, sum ^ a[i] ^ (a[i] * j));
		}
	}
	cout << ans << "\n";
	return 0;
}

G-旅途的终点_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

用一个优先队列,小根堆,把前k跟先入队,接着从k+1个入队,每次取出堆顶最小的那个,用m减去,m小于等于0跳出。

代码:

#include<iostream>
#include<queue>
#define int long long 
using namespace std;
const int N = 2e5 + 10;
int a[N], n, m, k;
priority_queue<int, vector<int>, greater<int>> q;
signed main()
{
	cin >> n >> m >> k;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		if (i <= k)
			q.push(a[i]);
	}
	int sum = 0, ans=k;
	for (int i = k + 1; i <= n; i++)
	{
		q.push(a[i]);
        if(q.size()>k)
        {
            sum+=q.top();
            q.pop();
        }
        if(sum>=m)
        {
            break;
        }
        ans++;
	}
    if(k<=n)
	    cout << ans << "\n";
    else
        cout<<n<<"\n";
	return 0;
}

H-两难抉择_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

每次取最大的出来考虑即可

代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int a[N];
bool cmp(int a, int b)
{
	return a > b;
}
signed main()
{
	int n;
	int sum=0;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		sum += a[i];
	}
	sort(a + 1, a + 1 + n,cmp);
	sum -= a[1];
	cout << max(sum + a[1] + n, sum + a[1] * n);
	return 0;
}

I-除法移位_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

在可循环的范围内找到最大的值

代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int a[N],ans=1;
signed main()
{
	int n, t, flag=0, maxx=-1;
	cin >> n >> t;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	int cnt = min(n - 1, t);
	maxx = a[0];
	for (int i = 1; i <= cnt; i++)
	{
		if (a[n - i] > maxx)
		{
			flag = i;
			maxx = a[n - i];
		}
	}
	cout << flag;
	return 0;
}

K-图上计数(Easy)_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)

思路:

将点平均分

代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int a[N],ans=1;
signed main()
{
	int n, m;
	cin >> n>> m;
	cout << (n / 2) * (n - n / 2);
	return 0;
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值