目录
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)![](https://i-blog.csdnimg.cn/direct/342a69ddd6084fc99a02be83dfcfb09e.png)
思路:
二分图模板
代码:
#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;
}