CCPC-Wannafly 夏季欢乐赛 题解

本文解析了多项算法竞赛题目,涵盖完全k叉树、距离产生美、烤面包片等,深入探讨解题思路与代码实现,是算法学习者的宝贵资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主又复活了(因为文化课作业太多写不完了所以继续自爆自弃


A.完全k叉树

签到题,考虑最底层的点的距离即可,注意细节(成功拉低了平均通过率)

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;

inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

int main() {
	int T = read();
	while (T--) {
	LL k = read(), n = read(), x = 1, now = 1, cnt = 0;
	if (k == 1) {
		printf("%d\n", n - 1);
		continue;
	}
	while (x < n) {
		cnt++;
		now *= k;
		x += now;
	}
	x -= now;
	cnt--;
	LL ans = 0, lft = n - x;
	if (lft <= now / k) ans = max(cnt * 2 + 1, lft == 1 ? 1LL : 2LL);
	else ans = cnt * 2 + 2;
	printf("%d\n", ans);
	}
	return 0;
}

B.距离产生美

签到题,每次当且仅当∣ai−ai−1∣&lt;k|a_i-a_{i-1}|&lt;kaiai1<k时,把aia_iai改成infinfinf

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
const int N = 100010;
	
int a[N], used[N];
inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

int main() {
	int n = read(), k = read(), ans = 0;
	For(i, 1, n) a[i] = read();
	For(i, 2, n) {
		if (abs(a[i] - a[i - 1]) < k && !used[i - 1]) {
			ans++;
			used[i] = 1;
		}
	}
	printf("%d\n", ans);
	return 0;
}

C.烤面包片

签到题,mod≤1e9,4!!&gt;1e9mod\leq 1e9,4!!&gt;1e9mod1e9,4!!>1e9所以只需考虑n≤3n\leq 3n3的情况,其他都输出000,注意0!!!=10!!!=10!!!=1

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;

inline int mul(int x, int y, int M) {return (int)(1LL * x * y % M);}
inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

int main() {
	int n = read(), M = read();
	if (n == 0 || n == 1) printf("%d\n", 1 % M);
	else if (n == 2) printf("%d\n", 2 % M);
	else if (n == 3) {
		int now = 1;
		For(i, 1, 720) now = mul(now, i, M);
		printf("%d\n", now);
	}
	else puts("0");
		
	return 0;
}

D.茶颜悦色

普通题,将y坐标离散对x这一维线性枚举长度为k的所有点,对y这一维用扫描线维护只对[y-k,y]有贡献,时间复杂度O(nlog⁡n)\mathcal{O(n\log n)}O(nlogn)给茶颜悦色打广告可还行

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int N = 100010;
struct Point {
	int x, y;
}p[N];
struct Node {
	Node *ls, *rs;
	int tag, v;
	Node() {
		ls = rs = 0;
		tag = v = 0;
	}
}*root;
int py[N << 1], cnty;

inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

inline bool cmp(Point a, Point b) {
	return a.x < b.x || a.x == b.x && a.y < b.y;
}

inline void pushdown(Node *&rt) {
	if (!rt -> ls) rt -> ls = new Node();
	if (!rt -> rs) rt -> rs = new Node();
	rt -> ls -> v += rt -> tag;
	rt -> rs -> v += rt -> tag;
	rt -> ls -> tag += rt -> tag;
	rt -> rs -> tag += rt -> tag;
	rt -> tag = 0;
}

inline void pushup(Node *&rt) {
	rt -> v = max(rt -> ls -> v, rt -> rs -> v);
}

inline void modify(int l, int r, int L, int R, int val, Node *&rt) {
	if (!rt) rt = new Node();
	if (r < L || R < l) return;
	if (L <= l && r <= R) {
		rt -> tag += val;
		rt -> v += val;
		return;
	}
	int mid = l + r >> 1;
	pushdown(rt);
	modify(l, mid, L, R, val, rt -> ls); 
	modify(mid + 1, r, L, R, val, rt -> rs);
	pushup(rt);
}

int main() {
	int n = read(), k = read();
	py[++cnty] = 1;
	For(i, 1, n) {
		p[i].x = read(), p[i].y = read();
		py[++cnty] = p[i].y;
		py[++cnty] = p[i].y - k;
	}
	sort(py + 1, py + cnty + 1);
	int ny = unique(py + 1, py + cnty + 1) - py - 1;
	sort(p + 1, p + n + 1, cmp);
	int l = 1, r = 1;
	for(; r <= n; ++r) {
		if (p[r].x - p[l].x > k) break;
		modify(1, ny, lower_bound(py + 1, py + ny + 1, p[r].y - k) - py, lower_bound(py + 1, py + ny + 1, p[r].y) - py, 1, root);
	}
	int ans = 0;
	for(; r <= n; ++r) {
		ans = max(ans, root -> v);
		for(; p[r].x - p[l].x > k; ++l) modify(1, ny, lower_bound(py + 1, py + ny + 1, p[l].y - k) - py, lower_bound(py + 1, py + ny + 1, p[l].y) - py, -1, root);
		modify(1, ny, lower_bound(py + 1, py + ny + 1, p[r].y - k) - py, lower_bound(py + 1, py + ny + 1, p[r].y) - py, 1, root);
	}
	ans = max(ans, root -> v);
	printf("%d\n", ans);
	return 0;
}

E.飞行棋

普通题,考虑在[d−k,d−1][d-k,d-1][dk,d1]中的每一个位置都有1k\frac{1}{k}k1的概率到达终点,还有k−1k\frac{k-1}{k}kk1的概率到达另一个[d−k,d−1][d-k,d-1][dk,d1]的点,所以期望步数是kkk。从终点出发逆向dp,dp[x]=k(x∈[1,k]),dp[x]=1+1k∑i=x−kx−1dp[i]dp[x]=k(x\in [1,k]),dp[x]=1+\frac{1}{k}\sum_{i=x-k}^{x-1}dp[i]dp[x]=k(x[1,k]),dp[x]=1+k1i=xkx1dp[i],由于d较大,使用矩阵加速即可。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
const int N = 25;

int K, inv;
inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

inline void upd(int &x, int y) {x += y; x -= x >= MOD ? MOD : 0;}
inline int dec(int x, int y) {x -= y; x += x < 0 ? MOD : 0; return x;}
inline int add(int x, int y) {x += y; x -= x >= MOD ? MOD : 0; return x;}
inline int mul(int x, int y) {return 1LL * x * y % MOD;};

inline int qui_pow(int x, int y) {
	int ret = 1;
	for(; y; y >>= 1) {
		if (y & 1) ret = mul(ret, x);
		x = mul(x, x);
	}
	return ret;
}

struct Matrix {
	int num[N][N];
	Matrix operator * (const Matrix &A) const {
		Matrix ret;
		memset(ret.num, 0, sizeof ret.num);
		For(i, 1, K) For(j, 1, K) For(k, 1, K) upd(ret.num[i][j], mul(num[i][k], A.num[k][j]));
		return ret;
	}
}init, cha;

inline Matrix mat_pow(Matrix x, LL y) {
	Matrix ret;
	memset(ret.num, 0, sizeof ret.num);
	For(i, 1, K) ret.num[i][i] = 1;
	for(; y; y >>= 1) {
		if (y & 1) ret = ret * x;
		x = x * x;
	}
	return ret;
}

int main() {
	LL d = read();
	K = read(), inv = qui_pow(K, MOD - 2);
	For(i, 1, K) init.num[1][i] = K, cha.num[i][1] = inv;
	init.num[1][K + 1] = cha.num[K + 1][1] = cha.num[K + 1][K + 1] = 1;
	For(i, 2, K) cha.num[i - 1][i] = 1;
	K++;
	init = init * mat_pow(cha, d - K + 1);
	printf("%d\n", init.num[1][1]);
	return 0;
}

F.三元组

普通题,假设ai+aj≤bi+bja_i+a_j\leq b_i+b_jai+ajbi+bj,所以2(ai+aj)≤bi+bj,2ai−bi+2aj−bj≤02(a_i+a_j)\leq b_i +b_j,2a_i-b_i+2a_j-b_j\leq 02(ai+aj)bi+bj,2aibi+2ajbj0,只需按2ai−bi2a_i-b_i2aibi排序即可,ai+aj≥bi+bja_i+a_j\geq b_i+b_jai+ajbi+bj亦然

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
const int N = 100010;

inline void upd(int &x, int y) {x += y; x -= x >= MOD ? MOD : 0;}
inline int dec(int x, int y) {x -= y; x += x < 0 ? MOD : 0; return x;}
inline int add(int x, int y) {x += y; x -= x >= MOD ? MOD : 0; return x;}
inline int mul(int x, int y) {return 1LL * x * y % MOD;};

inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

struct Node {
	int a, b, c, v;
}p[N];
int v[N], sum[N], n;

inline bool cmp(Node x, Node y) {return x.v < y.v;}
 
inline int solve() {
	int ret = 0;
	For(i, 1, n) p[i].v = 2 * p[i].a - p[i].b;
	sort(p + 1, p + n + 1, cmp);
	sum[0] = v[0] = 0;
	For(i, 1, n) {
		v[i] = p[i].v;
		sum[i] = add(sum[i - 1], p[i].c);
		upd(ret, mul(sum[upper_bound(v + 1, v + i + 1, -v[i]) - v - 1], p[i].c));
	}
	return ret;
}
		
int main() {
	n = read();
	For(i, 1, n) p[i].a = read(), p[i].b = read(), p[i].c = read();
	int ans = solve();
	For(i, 1, n) swap(p[i].a, p[i].b);
	upd(ans, solve());
	printf("%d\n", ans);
	return 0;
}


G.篮球校赛

签到题,直接状压dp,时间复杂度O(5∗25n)\mathcal{O(5* 2^5 n)}O(525n)

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
const int N = 100010;

inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

LL dp[N][32], a[N][5];

int main() {
	int n = read();
	For(i, 1, n) For(j, 0, 4) a[i][j] = read();
	For(i, 1, n) {
		For(j, 0, 31) {
			For(k, 0, 4) {
				if ((j >> k) & 1) dp[i][j] = max(dp[i - 1][j ^ (1 << k)] + a[i][k], dp[i][j]);
				dp[i][j] = max(dp[i - 1][j], dp[i][j]);
			}
		}
	}
	printf("%lld\n", dp[n][31]);
	return 0;
}

H.分配学号

签到题,先排序确定最终的学号集合,易证明集合是唯一的,从大到小枚举可能,运用乘法原理和加法原理求得答案

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
const int N = 100010;
inline void upd(int &x, int y) {x += y; x -= x >= MOD ? MOD : 0;}
inline int dec(int x, int y) {x -= y; x += x < 0 ? MOD : 0; return x;}
inline int add(int x, int y) {x += y; x -= x >= MOD ? MOD : 0; return x;}
inline int mul(int x, int y) {return 1LL * x * y % MOD;}

LL a[N], b[N];
int ans = 1, cnt[N];

inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

int main() {
	int n = read();
	For(i, 1, n) a[i] = read();
	sort(a + 1, a + n + 1);
	memcpy(b, a, sizeof b);
	For(i, 2, n) {
		if (a[i] <= a[i - 1]) a[i] = a[i - 1] + 1, cnt[i] = cnt[i - 1] + 1;
	}
	int now = 0, maxi = 0, ret = 1;
	Rep(i, n, 1) {
		if (!cnt[i]) {
			ans = mul(ans, ret);
			now = maxi = 0;
			continue;
		}
		if (!now) now = cnt[i], maxi = a[i], ret = 1;
		ret = mul(ret, maxi - b[i] + 1 - now + cnt[i]);
	}
	printf("%d\n", ans);
	return 0;
}

I.Gree的心房

签到题,留出最短的一条路径,可见障碍物最多填充(n−1)×(m−1)(n-1)\times(m-1)(n1)×(m1)个位置,超过这个值就输出-1,否则输出n+m-2

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define Mp make_pair
#define Pi pair<int, int>
#define Pb push_back
#define Fi first
#define Se second
#define Gc getchar
#define LL long long
#define Res register int
#define For(i, l, r) for(int i = (int)(l); i <= (int)(r); ++i)
#define Rep(i, r, l) for(int i = (int)(r); i >= (int)(l); --i)

using namespace std;
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;

inline LL read(){
	LL x = 0;
	char ch = Gc();
	bool positive = 1;
	for (; !isdigit(ch); ch = Gc())	if (ch == '-')	positive = 0;
	for (; isdigit(ch); ch = Gc()) x = (x << 1) + (x << 3) + (ch ^ 48);
	return positive ? x : -x;
}

int main() {
	int n = read(), m = read(), k = read();
	LL all = 1LL * (n - 1) * (m - 1);
	if (k <= all) printf("%d\n", n + m - 2);
	else puts("-1");
	return 0;
}

比赛总结:jwj是有gf的人生赢家!我也要!

【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,类似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备,支持C++和QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观和便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是与HSB(色相、饱和度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,与RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B三个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架和其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活和精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法与创新点。1.1研究背景与意义介绍二手物品交易的市场需求和Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状和趋势。1.3论文方法与创新点说明本文采用的研究方法和在系统设计中的创新之处。第2章相关理论与技术介绍开发二手物品交易网站所涉及的相关理论和关键技术。2.1Spring Boot框架解释Spring Boot的核心概念和主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述与后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求和性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标和安全性要求。第4章系统设计与实现具体描述基于Spring Boot的二手物品交易网站系统的设计和实现过程。4.1系统架构设计给出系统的整体架构设计和各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计和数据操作流程。4.3界面设计与实现介绍系统的界面设计和用户交互的实现细节。第5章系统测试与优化说明对系统进行测试的方法和性能优化的措施。5.1测试方法与步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议和实施方案。第6章结论与展望总结研究成果,并展望未来可能的研究方向和改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现和成果。6.2展望与改进讨论未来可能的系统改进方向和新的功能拓展。
1. 用户与权限管理模块 角色管理: 学生:查看个人住宿信息、提交报修申请、查看卫生检查结果、请假外出登记 宿管人员:分配宿舍床位、处理报修申请、记录卫生检查结果、登记晚归情况 管理员:维护楼栋与房间信息、管理用户账号、统计住宿数据、发布宿舍通知 用户操作: 登录认证:对接学校统一身份认证(模拟实现,用学号 / 工号作为账号),支持密码重置 信息管理:学生完善个人信息(院系、专业、联系电话),管理员维护所有用户信息 权限控制:不同角色仅可见对应功能(如学生无法修改床位分配信息) 2. 宿舍信息管理模块 楼栋与房间管理: 楼栋信息:名称(如 "1 号宿舍楼")、层数、性别限制(男 / 女 / 混合)、管理员(宿管) 房间信息:房间号(如 "101")、户型(4 人间 / 6 人间)、床位数量、已住人数、可用状态 设施信息:记录房间内设施(如空调、热水器、桌椅)的配置与完好状态 床位管理: 床位编号:为每个床位设置唯一编号(如 "101-1" 表示 101 房间 1 号床) 状态标记:标记床位为 "空闲 / 已分配 / 维修中",支持批量查询空闲床位 历史记录:保存床位的分配变更记录(如从学生 A 调换到学生 B 的时间与原因) 3. 住宿分配与调整模块 住宿分配: 新生分配:管理员导入新生名单后,宿管可按专业集中、性别匹配等规则批量分配床位 手动分配:针对转专业、复学学生,宿管手动指定空闲床位并记录分配时间 分配结果公示:学生登录后可查看自己的宿舍信息(楼栋、房间号、床位号、室友列表) 调整管理: 调宿申请:学生提交调宿原因(如室友矛盾、身体原因),选择意向宿舍(需有空位) 审批流程:宿管审核申请,通过后执行床位调换,更新双方住宿信息 换宿记录:保存调宿历史(申请人、原床位、新床位、审批人、时间) 4. 报修与安全管理模块 报修管理: 报修提交:学生选择宿舍、设施类型(如 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值