CSP认证-现值计算、训练计划、JPEG 解码、聚集方差

这篇具有很好参考价值的文章主要介绍了CSP认证-现值计算、训练计划、JPEG 解码、聚集方差。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CSP认证-现值计算、训练计划、JPEG 解码、聚集方差

T1现值计算

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
	int n;
	double rate;
	cin >> n >> rate;
	double t = 1.0, x, res = 0;
	for (int i = 1; i <= n + 1; ++i) {
		scanf("%lf", &x);
		res += t * x;
		t *= 1.0 / (1 + rate);
	}
	printf("%lf\n", res);
	return 0;
}

T2训练计划

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int p[N], t[N], level[N], idx[N], res1[N], res2[N];
bool is_leaf[N];
int main()
{
	freopen("a.in", "r", stdin);
	int n, m;
	scanf("%d%d", &n, &m);
	
	for (int i = 1; i <= m; ++i) scanf("%d", &p[i]), idx[i] = i, is_leaf[i] = true;
	for (int i = 1; i <= m; ++i) scanf("%d", &t[i]);
	// m^2
	for (int i = 1; i <= m; ++i) {
		int j = p[i];
		while (j) level[i]++, j = p[j];
	}
	// 拓扑 + 时间大到小
	sort(idx + 1, idx + 1 + m, [&](int i, int j) {
		return level[i] < level[j];
		});
	// 计算最早开始的时间,只需满足拓扑
	for (int i = 1; i <= m; ++i) {
		int j = idx[i];
		if (p[j]) res1[j] += (t[p[j]] + res1[p[j]]);
		else res1[j] = 1;
	}
	int ft = 0;
	for (int i = 1; i <= m; ++i) {
		printf("%d ", res1[i]);
		ft = max(ft, res1[i] + t[i] - 1);
	}
	printf("\n");
	if (ft > n) return 0;
	// 计算最晚开始时间
	else {
		memset(res2, 0x3f, sizeof res2);
		for (int i = m; i >= 1; --i) {
			int id = idx[i], pid = p[id];
			if (is_leaf[id]) res2[id] = n - t[id] + 1;
			if (pid) {
				is_leaf[pid] = false;
				res2[pid] = min(res2[id] - t[pid], res2[pid]);
			}
		}
		for (int i = 1; i <= m; ++i) {
			printf("%d ", res2[i]);
		}
		return 0;
	}

}

T3JPEG 解码

#include <bits/stdc++.h>
using namespace std;
#define PI acos(-1)
#define qrt sqrt(1.0 / 2.0)

int Q[10][10], mat[10][10];
double Q_2[10][10];
int n, T, row = 1, col = 1, cur = 0, nxt = 1;

void in_mat()
{
	for (int i = 1; i <= 8; ++i) {
		for (int j = 1; j <= 8; ++j) {
			scanf("%d", &Q[i][j]);
		}
	}
	scanf("%d%d", &n, &T);

	for (int i = 1; i <= n; ++i) {
		if (i < 36) {
			if (nxt % 2) scanf("%d", &mat[row--][col++]);
			else scanf("%d", &mat[row++][col--]);
			++cur;
			if (cur == nxt) {
				cur = 0;
				nxt++;
				if (nxt % 2) row = nxt, col = 1;
				else row = 1, col = nxt;
			}
		}
		else if (i == 36) {
			scanf("%d", &mat[row][col]);
			cur = 0;
			nxt = 7;
			row = 8, col = 2;
		}
		else {
			if (nxt % 2) scanf("%d", &mat[row--][col++]);
			else scanf("%d", &mat[row++][col--]);
			++cur;
			if (cur == nxt) {
				cur = 0;
				nxt--;
				if (nxt % 2) row = 8, col = 8 - nxt + 1;
				else row = 8 - nxt + 1, col = 8;
			}
		}

	}
}

void plus_mat()
{
	for (int i = 1; i <= 8; ++i) {
		for (int j = 1; j <= 8; ++j) {
			mat[i][j] *= Q[i][j];
		}
	}
}


void DCT(int m[10][10], double res[10][10])
{
	double au, av;
	for (int i = 1; i <= 8; ++i) {
		for (int j = 1; j <= 8; ++j) {
			double t = 0;
			for (int u = 0; u <= 7; ++u) {
				if (u == 0) au = qrt;
				else au = 1;
				for (int v = 0; v <= 7; ++v) {
					if (v == 0) av = qrt;
					else av = 1;
					t += 1.0 / 4.0 * au * av * m[u + 1][v + 1] * cos(PI / 8 * (i  - 1 + 1.0 / 2) * u)
						* cos(PI / 8 * (j  - 1 + 1.0 / 2) * v);
				}
			}
			res[i][j] = t;
		}
	}
	for (int i = 1; i <= 8; ++i) {
		for (int j = 1; j <= 8; ++j) {
			int t = round(res[i][j] + 128);
			if (t > 255) t = 255;
			else if (t < 0) t = 0;
			printf("%d ", t);
		}
		printf("\n");
	}
}

void out_mat()
{
	for (int i = 1; i <= 8; ++i) {
		for (int j = 1; j <= 8; ++j) {
			printf("%d ", mat[i][j]);
		}
		printf("\n");
	}
}



int main()
{
	freopen("a.in", "r", stdin);
	in_mat();

	if (T == 0) {
		out_mat();
	}
	else if (T == 1) {
		plus_mat();
		out_mat();
	}
	else {
		plus_mat();
		DCT(mat, Q_2);
	}
	return 0;
}

T4聚集方差

65分解法如下:文章来源地址https://www.toymoban.com/news/detail-518501.html

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 300100;
int h[N], e[N], ne[N], a[N], idx;
LL ans[N];
void add(int a, int b)
{
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

// 合并两个有序数组O(n)
void merge(vector<int>& dest, vector<int>& v)
{
	vector<int> v3(dest.size() + v.size());
	if (dest.empty()) dest = v;
	else {
		int p1 = 0, p2 = 0, i = 0;
		while (p1 != dest.size() && p2 != v.size()) {
			if (dest[p1] < v[p2]) v3[i++] = dest[p1++];
			else v3[i++] = v[p2++];
		}
		if (p1 == dest.size()) {
			while(p2 != v.size())
				v3[i++] = v[p2++];
		}
		else{
			while (p1 != dest.size())
				v3[i++] = dest[p1++];
		}
	}
	dest = v3;
}

LL calc(vector<int>& v)
{
	int n = v.size();
	if (n == 1) return LL(0);
	LL res = 0;
	for (int i = 0; i < n; ++i) {
		int min_dis = 2e9;
		if (i - 1 >= 0) 
			min_dis = abs(v[i - 1] - v[i]);
		if (i + 1 < n) 
			min_dis = min(min_dis, abs(v[i + 1]) - v[i]);
		res += (LL)min_dis * min_dis;
	}
	return res;
}

vector<int> dfs(int u)
{
	vector<int> res;
	res.push_back(a[u]);
	for (int i = h[u]; ~i; i = ne[i]) {
		vector<int> t = dfs(e[i]);
		merge(res, t);
	}
	ans[u] = calc(res);
	return res;
}


int main()
{
	int n, pp;
	scanf("%d", &n);
	memset(h, -1, sizeof h);
	for (int i = 2; i <= n; ++i) {
		scanf("%d", &pp);
		add(pp, i);
	}
	for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	dfs(1);
	for (int i = 1; i <= n; ++i) {
		printf("%lld\n", ans[i]);
	}
	return 0;
}


博主原创,转载注明出处

到了这里,关于CSP认证-现值计算、训练计划、JPEG 解码、聚集方差的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSP-垦田计划

    顿顿总共选中了 n 块区域准备开垦田地,由于各块区域大小不一,开垦所需时间也不尽相同。据估算,其中第 i 块(1≤i≤n)区域的开垦耗时为 ti 天。这 n 块区域可以同时开垦,所以总耗时 tTotal 取决于耗时最长的区域,即:tTotal=max{t1,t2,⋯,tn} 为了加快开垦进度,顿

    2024年02月06日
    浏览(33)
  • FPGA实现jpeg图片解码RGB 纯verilog代码编写 提供基于zynq得工程源码和技术支持

    jpg是一种压缩的图片格式,之所以压缩是为了减小图片所占空间,jpg压缩原理这里不罗嗦,可以自行百度或者b站,大佬讲的比我好,jpg解压缩就是逆向过程,用opencv啥的解压缩就是一句话的事儿,但对于fpga硬件来说就是大型工程了。 本设计使用zynq7100位平台,将jpg图片的c语

    2024年02月07日
    浏览(45)
  • CCF- CSP 202303-2垦田计划 【多种方法】满分题解

    CCF- CSP 202303-2垦田计划 【多种方法】满分题解 题目链接:CCF- CSP 202303-2垦田计划 70分思路: 从基础耗时最长的区域进行筛选,每次基础耗时减少一天 该方法以 m 作为参考对象,对 m 进行减的操作( m 的数据范围达到 1e9 ,导致超时) 采用 优先队列 作为存储结构,同时存储 t 和

    2024年02月01日
    浏览(74)
  • CCF-CSP 29次 第二题【202303-2 垦田计划】

    法一: 70分:优先队列 对基础耗时大的优先进行处理 法二: 100分:二分答案 法三:对法一的改进 100分:对相同耗时的区域合并处理 同样从耗时最多的区域开始

    2024年02月07日
    浏览(40)
  • 2023CSP-CCF前三题 田地丈量、垦田计划、LDAP解题分析

    2023.03第29次CCF-CSP计算机认证考试 CCF计算机软件能力认证考试系统 大二菜鸟第一次参加CSP考试,发挥得很烂( 其实是实力太菜了 ),考前也没看往年题目套路,有很多不甘吧,不过拟打算六月再参加一次。如果早知道题目难度是依次递增的,就不写完两题就去啃最后一题了

    2024年02月05日
    浏览(31)
  • CCF-CSP真题《202303-2 垦田计划》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202303-2 试题名称: 垦田计划 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 顿顿总共选中了 n 块区域准备开垦田地,由于各块区域大小不一,开垦所需时间也不尽相同。据估算,其中第 i 块

    2024年02月12日
    浏览(42)
  • 【ccf-csp题解】第四次csp认证-第四题-网络延时-树的直径

    本题所求的实际上是树的直径,即树中的任意两个结点之间的最大距离 采用的方法是dfs 从根节点开始遍历,对于每一个被dfs的结点m,返回此结点m到所有叶子结点的距离最大的那个即d1,同时在dfs过程当中记录结点m到所有叶子结点的距离第二大的那个,即d2 那么最终答案就是

    2024年02月09日
    浏览(25)
  • CSP认证202303-3:LDAP (超详细题解)

    题目传送门 最后要求输出符合条件的用户 DN 的集合, ( 作为一名STL战士 ) ,可以考虑维护以属性名和属性值为索引, 对应值为符合条件的用户的set 的一个map 属性名 - 属性值 - {用户1,用户2…} 操作分为原子操作和逻辑操作, 只需要判断字符串的首字符即可区分两种操作 原子操作

    2024年02月05日
    浏览(30)
  • CCF-CSP认证 202303 500分题解

    202303-1 田地丈量(矩形面积交) 矩形面积交=x轴线段交长度*y轴线段交长度 线段交长度,相交的时候是min右端点-max左端点,不相交的时候是0 202303-2 垦田计划(二分) 二分最终答案x(x=k),判断降到x天资源是否够 够的话就往小里二分,否则往大里二分, 当然贪心也可以做

    2023年04月18日
    浏览(29)
  • 众智科学:计算聚集系数和邻里重叠度

    实验内容: 输入:任意的 有向图 输出: 1)每个节点的聚集系数 2)每个节点对的邻里重叠度 相关定义介绍: 聚集系数:节点A的聚集系数 = A的任意两个朋友之间也是朋友的概率(即邻居间朋友对的个数除以总对数) 邻里重叠度:与A、B均为邻居的节点数/ 与节点A、B中至少

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包