河南萌新联赛2024第(五)场:信息工程大学

目录

B-学生分组_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

​编辑思路:

代码:

D-区间问题1_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

​编辑思路:

代码:

E-哥德巴赫猜想_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

​编辑思路:

代码:

G-爬楼梯_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

​编辑思路:

代码:

H-区间问题2_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

代码:

I-小美想打音游_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

代码: 

J-平方根_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)​编辑

思路:

代码: 

K-小美想游泳_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

代码: 


B-学生分组_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

找到超出的数,离两个边界的最值即可

代码:

#include<iostream>
#define int long long
using namespace std;
const int N = 1e6 + 10;
int a[N];
int mod = 1000000007;
void slove()
{
	int n,sum=0;
    cin>>n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		sum += a[i];
	}
	int l, r;
	cin >> l >> r;
	if (sum<l*n || sum>r*n)
	{
		cout << -1 << "\n";
		return;
	}
	int minn = 0, maxx = 0;
	for (int i = 1; i <= n; i++)
	{
		if (a[i] < l)
			minn += (l - a[i]);
		else if(a[i]>r)
			maxx += (a[i] - r);
	}
	cout << max(minn, maxx) << "\n";

}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
}

D-区间问题1_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

数据范围小,直接模拟即可

代码:

#include<iostream>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int a[N];
int sum[N];
void slove()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	int q;
	cin >> q;
	while (q--)
	{
		int c, l, r, d, x;
		cin >> c;
		if (c == 1)
		{
			cin >> l >> r >> d;
			for (int i = l; i <= r; i++)
				a[i] += d;
		}
		if (c == 2)
		{
			cin >> x;
			cout << a[x] << "\n";
		}

	}

}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
}

E-哥德巴赫猜想_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

模拟,枚举

代码:

#include<iostream>
#define int long long
using namespace std;
const int N = 1e6 + 10;
int a[N];
int mod = 1000000007;
int judge(int x)
{
	if (x <= 1)
		return 0;
	else
	{
		for (int i = 2; i * i <= x; i++)
		{
			if (x % i == 0)
				return 0;
		}
	}
	return 1;
}
void slove()
{
	int n;
	cin >> n;
	int flag = 0;
	for (int i = 1; i < n; i++)
	{
		if (judge(i) == 1)
		{
			for (int j = 1; j < n; j++)
			{
				if (judge(j) == 1 && judge(n - i - j) == 1)
				{
					cout << i << " " << j << " " << n - i - j << "\n";
					flag = 1;
					break;
				}
			}
		}
		if (flag == 1)
			break;
	}
	if (flag == 0)
		cout << "-1\n";

}
signed main()
{
	int t=1;
	cin >> t;
	while (t--)
	{
		slove();
	}
}

G-爬楼梯_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

简单dp

代码:

#include<iostream>
#define int long long
using namespace std;
const int N = 1e6 + 10;
int a[N];
int mod = 1000000007;
void slove()
{
	int n;
	cin >> n;
	a[1] = 1;
	a[2] = 2;
	a[3] = 4;
	for (int i = 4; i <= n; i++)
	{
		a[i] = (a[i-1]+a[i-2]+a[i-3])%mod;
	}
	cout << a[n];
}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
}

H-区间问题2_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

ST表或者线段树都可以,ST表更简单但只适合不会改变的情况

代码:

#include<iostream>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
const int N = 2e6 + 10;
int a[N];
int f[N][21],n;
int mod = 1000000007;
inline int read()
{
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}   //快读模板
    return x*f;
}
void ST_create()
{
	int k = log2(n)+1;
	for (int j = 1; j <= k; j++)
		for (int i = 1; i <= n - (1 << j) + 1; i++)//n-2^j+1
			f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}
void slove()//st表
{
	n=read();
	for (int i = 1; i <= n; i++)
		f[i][0]=read();
	ST_create();
	int q;
	cin >> q;
	while (q--)
	{
		int l, r;
		l=read(),r=read();
		int k = log2(r - l + 1);
		cout << max(f[l][k], f[r - (1 << k) + 1][k])<<"\n";
	}

}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
}

I-小美想打音游_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

取中位数即可

代码: 

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N = 1e6 + 10;
int a[N];
int mod = 1000000007;
void slove()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	sort(a + 1, a + 1 + n);
	int mid;
	if (n % 2 == 0)
		mid = n / 2;
	else
		mid = n / 2 + 1;
	int sum = 0;
	for (int i = 1; i <= n; i++)
	{
		sum += abs(a[mid] - a[i]);
	}
	cout << sum+1 << "\n";

}
signed main()
{
	int t=1;
	//cin >> t;
	while (t--)
	{
		slove();
	}
}

J-平方根_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

简单开根号

代码: 

#include<iostream>
#include<cmath>
#define int long long
using namespace std;
void slove()
{
	int n;
	cin >> n;
    int a=sqrt(n);
	cout << a << "\n";
}
signed main()
{
	int t;
	cin >> t;
	while (t--)
	{
		slove();
	}
}

K-小美想游泳_河南萌新联赛2024第(五)场:信息工程大学 (nowcoder.com)

思路:

创建图,跑一下

代码: 

#include <iostream>
#include<vector>
#include<queue>
using namespace std;
#define int long long
int mod = 1e9 + 7;
vector<pair<int, int>> g[10005];
vector<int> dis(10005, 1e9),vis(10005, 0);
void slove()
{
    int n, m; cin >> n >> m;
    while (m--)
    {
        int a, b, c; 
        cin >> a >> b >> c;
        g[a].push_back({ b,c });
        g[b].push_back({ a,c });
    }
    int s, t;
    cin >> s >> t;
    priority_queue<pair<int, int>> q;
    dis[s] = 0;
    q.push({ 0, s });
    while (!q.empty())
    {
        auto [d, u] = q.top();
        q.pop();

        for (auto [v, w] : g[u])
        {
            if (dis[v] > max(dis[u], w))
            {
                dis[v] = max(dis[u], w);
                q.push({ -dis[v],v });
            }

        }
    }
    cout << dis[t];
}
signed main() 
{
    int t = 1;
    //cin>>t;
    while (t--)
    {
        slove();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值