IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 浙江农林大学第二十二届程序设计竞赛部分题解 -> 正文阅读

[数据结构与算法]浙江农林大学第二十二届程序设计竞赛部分题解

目录

瓜瓜打游戏(EASY)

题目思路

简单dp,状态转移公式如下:

dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] * a[i];

题目代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll dp[5003][5003];
ll a[5003];
int main() {
	ll n, p;
	cin >> n >> p;
	for (int i = 1; i <= n; ++i)cin >> a[i];
	dp[0][1] = 0;
	for (int i = 1; i <= n; ++i) {
		dp[i][0] = 1;
		dp[i][1] = (dp[i - 1][1] + a[i]) % p;
	}
	dp[0][0] = 1;
	for (int i = 2; i <= n; ++i) {
		for (int j = 1; j <= i; ++j) {
			dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] * a[i];
			dp[i][j] %= p;
		}
	}
	for (int i = 0; i <= n; ++i)cout << dp[n][i] << ' ';
}

瓜瓜喜欢做 A + B

题目思路

最后一个颜色所占面积最大

题目代码

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, m, k;
	cin >> n >> m >> k;
	int a, b, c;
	while (k--) {
		scanf("%d %d %d", &a, &b, &c);
	}
	cout << n + m - 1 << " " << c << endl;
}

瓜瓜不想上电工课

题目思路

贪心,对a和b之差进行排序,取前k个(差值为负数则不取)

题目代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node {
	int x, y, z;
}a[100005];
bool cmp(node a, node b) {
	return a.z > b.z;
}
int main() {
	int n, m;
	cin >> n >> m;
	int x, y, z;
	ll sum = 0;
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i].x);
	}for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i].y);
		a[i].z = a[i].x - a[i].y;
		sum += a[i].x;
	}
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= m; i++) {
		if (a[i].z <= 0)break;
		sum -= a[i].z;
	}
	cout << sum << endl;
}

瓜瓜的 01 串

题目思路

思维题目,判断0和1的个数和k的个数作比较

题目代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, k;
string s;
ll sum0, sum1;
int main() {

	cin >> n >> k >> s;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '0')sum0++;
	}
	sum1 = n - sum0;
	if (k == 0) {
		cout << sum0 << endl;
	}
	else {
		if (sum0 == sum1) {
			if (k <= sum1) {
				cout << sum1 + k;
			}
			else {
				cout << n;
			}
		}
		else if (sum0 > sum1) {
			if (k <= sum1) {
				cout << sum0 + k;
			}
			else {
				if (k >= sum0) {
					int cnt0 = k - sum0;
					int cnt1 = k - sum1;
					if ((cnt0 & 1)||(cnt1%2==0)) {
						cout << n;
					}
					else {
						cout << n - 1;
					}
				}
				else {
					int cnt1 = k - sum1;
					if (cnt1 % 2 == 0) {
						cout << n;
					}
					else {
						cout << n - 1;
					}
				}
			}
		}
		else if(sum1>sum0) {
			if (k <= sum0) {
				cout << sum1 + (k - 1);
			}
			else {
				if (k >= sum1) {
					int cnt0 = k - sum0;
					int cnt1 = k - sum1;
					if ((cnt0 & 1) || (cnt1 % 2 == 0)) {
						cout << n;
					}
					else {
						cout << n - 1;
					}
				}
				else {
					int cnt0 = k - sum0;
					if (cnt0 & 1) {
						cout << n;
					}
					else {
						cout << n - 1;
					}
				}
			}

		}
	}
}

瓜瓜上电工

题目思路

用全排列把所有情况写出来,找最小情况

题目代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node {
	int x, y;
}a[14];
int b[11] = { 0,1,2,3,4,5,6,7,8,9,10 };
int n, q;
bool check(int x, int y, int c, int d) {
	if (x == c || x == d || y == c || y == d)return true;
	return false;
}
int main() {
	cin >> n >> q;
	for (int i = 1; i <= q; ++i) {
		int c, b;
		cin >> c >> b;
		a[i].x = c;
		a[i].y = b;
	}
	ll ans = 999999999;
	do {
		int dx = 0, dy = 0;
		ll sum = 0;
		for (int i = 1; i <= q; ++i) {
			int nx = a[b[i]].x, ny = a[b[i]].y;
			if (check(dx,dy,nx,ny))++sum;
			else sum += 2;
			dx = nx;
			dy = ny;
		}
		if (sum < ans)ans = sum;
	} while (next_permutation(b + 1, b + q + 1));
	ans += 2;
	cout << ans << endl;
}

策策学长找py

题目思路

上一行任何一个块这一行只能在其左上方,判断一下

题目代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, k;
string s;
ll sum0, sum1;
int begi[10005];
int last[10005];
int main() {
	int t;
	cin >> t;
	while (t--) {
		for (int i = 1; i <= 10000; i++) {
			last[i] = -1;
			begi[i] = 100000;
		}
		int n, m, k;
		scanf("%d%d%d", &n, &m, &k);
		int x, y;
		for (int i = 1; i <= k; i++) {
			scanf("%d %d", &x, &y);
			last[x] = max(last[x], y);
			begi[x] = min(begi[x], y);
		}
		int v;
		int g;
		for (int i = 1; i <= n; i++) {
			if (last[i] != -1) {
				v = last[i];
				g = i;
				break;

			}
		}
		int ok = 1;
		for (int i = g; i <= n; i++) {
			if (begi[i] != 100000) {
				if (begi[i] < v) {
					ok = 0;
					break;
				}
				v = last[i];
			}
		}
		if (ok == 1) {
			puts("YES");
		}
		else {
			puts("NO");
		}
	}
	
}

周周的泡泡

题目思路

既然是连续的,就只用枚举左端点然后二分查找右端点就行了

题目代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[200005];
ll suml[200005], sumr[200005],sum[200005];
int main() {
	ll n, h;
	cin >> n >> h;
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
		suml[i] = suml[i - 1] + a[i];
	}
	for (int i = n; i >= 1; i--) {
		sum[i] = sum[i + 1] + a[i];
	}
	for (int i = 1; i <= n; i++) {
		sumr[i] = sum[n - i + 1];
	}
	ll Min = 9999999999;
	for (int i = 0; i <= n; i++) {
		int x = h - suml[i];
		if (x <= 0)break;
		ll dx = lower_bound(sumr, sumr + n-i, x)-sumr-1;
		Min = min(Min, x - sumr[dx]);
	}
	cout << Min << endl;
}

其他题目题解链接

结语


“遇事不决,可问春风。春风不语,即随本心。”的意思是:对一件事犹豫不决,就问春风该如何做,春风给不出答案,就凭自己本心做出决断。“遇事不决可问春风,春风不语即随本心”一句出自网络作家“烽火戏诸侯”的《剑来》,其原文是:“遇事不决,可问春风。春风不语,遵循己心”。

在这里插入图片描述


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:54:13  更:2022-05-18 17:57:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:49:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码