算法训练,项目

一.木材加工

题解:

二分答案,左边0,右边可以为最长的木头,但我直接赋值了一个很大的值,进行二分,随后写个check;内部遍历木头截取为mid木块的个数,要是>=k,满足要求,还可以继续往后面找,因为它是要求最大每段木头的长度,直至左边加一小于右边,最后输出左边;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;

using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 200005;
constexpr int MaxM = 10005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;

ll n, k;
ll a[MaxN];

bool check(ll x) {   //  判断是否能切割出长度为x的k段木头

	ll sum = 0;
	up(i, 1, n) {
		sum += a[i] / x;
	}
	return sum >= k;
}
int main() {

	Ios;
	cin >> n >> k;
	up(i, 1, n) {
		cin >> a[i];
	}
	ll l = 0, r = inf;
	while (l + 1 < r) { // l+1 为了避免死循环
		ll mid = (l + r) / 2;
		if (check(mid)) l = mid;
		else r = mid;
	}
	cout << l << endl;
	return 0;
}

二.并查集

题解:

这是并查集的模版,并查集就是利用一个数组来标记他们,看他们是否是一起;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;

using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 10005;
constexpr int MaxM = 100005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;



void slove() {

	
}

int f[MaxN];

int find(int x) { //  寻找;
	return f[x] == x ? x : f[x] = find(f[x]); 
}
int main() {

	Ios;
	/*int t;
	cin >> t;
	while (t--) {
		slove();
	}*/
	int n, m;
	cin >> n >> m;
	up(i, 1, n) f[i] = i;  //初始化
	up(i, 1, m) {
		int z, x, y;
		cin >> z >> x >> y;
		if (z == 1) {
			f[find(y)] = find(x);  // 合并
		}
		else if (find(x) == find(y)) {
			cout << "Y" << endl;
		}
		else {
			cout << "N" << endl;
		}
	}
	return 0;
}

三、单源最短路径(弱化版)

题解:

模版题,用Dijkstra,但是我还是有点不理解Dijkstra;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;

using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 500005;
constexpr int MaxM = 10005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;


node{
	int to,w,next;
}e[MaxN];
int head[MaxM], dis[MaxM], book[MaxM];
int n, m, s;
int main() {

	Ios;
	cin >> n >> m >> s;
	book[s] = 1;
	memset(head, -1, sizeof(head));
	int num = 0;
	up(i, 1, m) {
		int u, v, w;
		cin >> u >> v >> w;
		e[num].to = v;
		e[num].w = w;
		e[num].next = head[u];
		head[u] = num++;
	}
	up(i, 1, n) {
		dis[i] = pow(2, 31) - 1;
	}
	for (int i = head[s]; i != -1; i = e[i].next) {
		dis[e[i].to] = min(e[i].w, dis[e[i].to]);
	}
	dis[s] = 0;
	up(i, 1, n) {
		int min1 = pow(2, 31) - 1;
		int k = s;
		up(j, 1, n) {
			if (!book[j] && dis[j] < min1) {
				min1 = dis[j];
				k = j;
			}
		}
		book[k] = 1;
		for (int j = head[k]; j != -1; j = e[j].next) {
			if (dis[e[j].to] > dis[k] + e[j].w) {
				dis[e[j].to] = dis[k] + e[j].w;
			}
		}
	}
	up(i, 1, n) {
		cout << dis[i] << ' ';
	}
	return 0;
}

将发送的消息显示至list中

需要创建一个ChatBubble,来显示头像之类的操作,调用类中方法,实际操作:

聊天气泡的设置;

Rectangle bubble = new Rectangle(40, 20, message.getContent().length()*15, 30); // 设置气泡大小
            bubble.setArcWidth(10);
            bubble.setArcHeight(10);
            bubble.setFill(isSentByMe ? Color.LIGHTGREEN : Color.LIGHTGRAY); // 根据消息发送者设置颜色

            TextFlow messageFlow = new TextFlow();
            messageFlow.setLayoutX(40);
            messageFlow.setLayoutY(28);
            messageFlow.setPrefWidth(100); // 调整宽度以获得更好的布局
            messageFlow.setLineSpacing(5); // 根据需要调整行间距

            processMessage(message.getContent(), messageFlow,bubble); // 处理消息以包含文本和图片

            getChildren().addAll(head,label,label1,bubble, messageFlow);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于图像算法项目实践任务,我可以给你一些建议和指导。首先,你需要明确你的项目目标和要解决的问题。一些常见的图像算法项目可能涉及图像分类、目标检测、图像生成等任务。 接下来,你可以考虑选择适合你项目算法模型。常用的图像算法模型包括卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)等。根据你的需求和数据情况,选择一个合适的模型进行实践。 在实践过程中,你需要准备好训练数据集和测试数据集。训练数据集应该包含大量的图像样本,并且要有正确的标注信息。测试数据集用于评估你算法模型的性能和准确度。 接下来,你可以使用一些常见的深度学习框架,如TensorFlow、PyTorch等,来实现和训练你的算法模型。这些框架提供了丰富的工具和函数,可以帮助你构建和训练图像算法模型。 在训练过程中,你需要注意调整模型的超参数,如学习率、批次大小等,以优化模型的性能。同时,可以使用一些技巧和方法,如数据增强、迁移学习等,来提升模型的泛化能力。 最后,你可以使用测试数据集来评估你的算法模型的性能。常见的评估指标包括准确率、精确率、召回率等。根据评估结果,你可以进一步调整和改进你的算法模型。 总之,图像算法项目实践任务需要你有一定的编程和深度学习基础,同时需要耐心和实践经验。通过不断的尝试和优化,你可以逐步提升你的图像算法模型的性能。祝你项目顺利!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值