CSP认证2023-09:坐标变换(其一)、坐标变换(其二)、梯度求解,python满分代码解答

CSP认证2023-09:坐标变换(其一)、坐标变换(其二)、梯度求解,python满分代码解答

目录

一、坐标变换(其一)

问题描述

输入和输出

思路

代码和结果

c++代码

python代码

二、坐标变换(其二)

问题描述

输入和输出

思路

代码和结果

c++代码

​编辑 python代码

改进 

c++代码

python代码

三、梯度求解

问题描述

输入和输出

思路

代码和结果


一、坐标变换(其一)

问题描述

输入和输出

输入

3 2
10 10
0 0
10 -20
1 -1
0 0

输出 

21 -11
20 -10

思路

定义一个起始原点坐标(0,0),将n个操作依次累加,获得移动后的坐标(x_move,y_move)。接着输入m行坐标(x_res,y_res)时,直接加上移动后的坐标(x_move,y_move)输出结果即可。

代码和结果

c++代码

#include<iostream>
using namespace std;
int main() {
	int n, m;
	cin >> n >> m;
	int move_x = 0;
	int move_y = 0;
	for (int i = 0; i < n; i++) {//m行数据
		int x,y;
		cin >> x>>y;
		move_x += x;
		move_y += y;		
	}
	for (int j = 0; j < m; j++) {
		int input_x, input_y;
		cin >> input_x >> input_y;
		cout << input_x + move_x << " " << input_y + move_y << endl;
	}
}

python代码

n,m=list(map(int,input().split()))
x_move ,y_move= 0,0
for i in range(n):
    x_1,y_1 = list(map(int,input().split()))
    x_move+=x_1
    y_move+=y_1
for j in range(m):
    x_res, y_res = list(map(int, input().split()))
    x_res += x_move
    y_res += y_move
    print(x_res,' ',y_res)

二、坐标变换(其二)

问题描述

输入和输出

输入

10 5
2 0.59
2 4.956
1 0.997
1 1.364
1 1.242
1 0.82
2 2.824
1 0.716
2 0.178
2 4.094
1 6 -953188 -946637
1 9 969538 848081
4 7 -114758 522223
1 9 -535079 601597
8 8 159430 -511187

输出

-1858706.758 -83259.993
-1261428.46 201113.678
-75099.123 -738950.159
-119179.897 -789457.532
114151.88 -366009.892

思路

1、首先将利用两个数组op和value将操作和其对应的值存起来

2、在输入每一个查询时,找到数组op和value的起始位置和终止位置

3、从起始位置和终止位置进行运算即可

代码和结果

这里给出c++代码和python代码

c++代码

#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

int main(){
	cout.setf(ios::fixed);

	cout.precision(3); // 精度为输出小数点后3位

	int n, m;
	cin >> n >> m;
	static int op[100001];
	static double value[100001];
	for (int i = 1; i <= n; i++) {
		int op1;
		double value1;
		cin >> op1 >> value1;
		op[i] = op1;
		value[i] = value1;
	}
	for (int j = 0; j < m; j++) {
		int op_start, op_end;
		double value1, value2;
		cin >> op_start >> op_end >> value1 >> value2;

		for (int op_index = op_start; op_index <= op_end; op_index++) {
			//对于第op_index进行以下操作
			int operation1 = op[op_index];//进行缩放或旋转
			double v1 = value[op_index];//
			if (operation1 == 1) {
				value1 = value1 * v1;
				value2 = value2 * v1;
			}
			else {
				double value1_copy = value1;
				value1 = value1 * cos(v1) - value2 * sin(v1);
				value2 = value1_copy * sin(v1) + value2 * cos(v1);
			}

		}
		cout <<value1 << " " << value2 << endl;

	}
}

python代码

import math

n,m = list(map(int,input().split()))
op = [0]
value = [0.]
for i in range(1,n+1):
    operate, v = input().split()
    op.append(int(operate))
    value.append(float(v))
for i in range(m):
    op_start_s,op_end_s,value1_s,value2_s= input().split()
    op_start = int(op_start_s)
    op_end = int(op_end_s)
    value1 = float(value1_s)
    value2 = float(value2_s)
    for j in range(op_start,op_end+1):
        #对于第op_index进行以下操作
        operation1 = op[j] # 进行缩放或旋转
        v1 = value[j]
        if operation1 == 1:
            value1 = value1 * v1
            value2 = value2 * v1
        else:
            value1_copy = value1 #这一步很重要
            value1 = value1 * math.cos(v1) - value2 * math.sin(v1)
            value2 = value1_copy * math.sin(v1) + value2 * math.cos(v1)
    print(value1,' ',value2)

改进 

然而由于查询过程中存在重复的查询,导致时间复杂度过高而只得到了80分。

通过观察发现,题目让我们求的是给定坐标经过op_start到op_end操作之后的结果,又通过操作内容可知,只包含旋转和坐标缩放这两种操作。从中可以得到以下结论:

首先,这两种操作是不受彼此干扰的;其次,旋转和缩放是可以累积计算的

因此,我们可以通过两个数组记录从1到n个操作的结果,每一步操作是旋转操作和缩放操作的累积。首先计算从op_start到op_end旋转的角度,只需要用op_end旋转的角度减去op_start的角度;其次计算从op_start到op_end缩放的倍数,只需要用op_end缩放的倍数除以op_start缩放的倍数。

c++代码

//存在的问题:考虑到不能每次去遍历操作,因为这样会导致复杂度很高
//解决办法:将操作数组记录下来,因为缩放和旋转是无关的,所以可以使用两个数组存放;旋转是循环的可以实现累加,缩放也是可以累乘的
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
#define pai 3.14159265358979323846
int main() {
	cout.setf(ios::fixed);

	cout.precision(3); // 精度为输出小数点后3位

	int n, m;
	cin >> n >> m;
	//static int op_scale[100001];//分开存放两个操作
	//static int op_xuanzhuan[100001];
	static double value_scale[100001]={1};
	static double value_xuanzhuan[100001]={0};

	//累积缩放值
	double scale = 1;
	//累积旋转值,需要mod 2pai
	double xuanzhuan = 0;
	for (int i = 1; i <= n; i++) {//现在存放的就不是第i个操作了,而是前i个操作的累积
		int op1;
		double value1;
		cin >> op1 >> value1;
		if (op1 == 1) {
			//同时记录到上一轮的旋转
			value_xuanzhuan[i] = xuanzhuan;
			scale = scale * value1;
			value_scale[i] = scale;
		}
		else {
			//同时记录到上一轮的缩放
			value_scale[i] = scale;
			xuanzhuan = xuanzhuan + value1;//先不用取余,最后结果取余就行
			value_xuanzhuan[i] = xuanzhuan;
		}
	}
	for (int j = 0; j < m; j++) {
		int op_start, op_end;
		double value1, value2;
		cin >> op_start >> op_end >> value1 >> value2;

		//看op_start的缩放是多少,op_end的缩放系数是多少,除一下就是缩放的系数了
		double op_scale_start = value_scale[op_start-1];
		double op_scale_end = value_scale[op_end];

		double op_xuanzhuan_start = value_xuanzhuan[op_start-1];
		double op_xuanzhuan_end = value_xuanzhuan[op_end];

		//首先计算缩放了多少
		double scale_start_end = op_scale_end / op_scale_start;
		double xuanzhuan_start_end = fmod((op_xuanzhuan_end - op_xuanzhuan_start), 2 * pai);//op_xuanzhuan_start操作也是进行的
		double value1_copy = value1;
		value1 = scale_start_end*(value1 * cos(xuanzhuan_start_end) - value2 * sin(xuanzhuan_start_end));
		value2 = scale_start_end*(value1_copy * sin(xuanzhuan_start_end) + value2 * cos(xuanzhuan_start_end));
		cout << value1 << " " << value2 << endl;
	}
	return 0;

}

python代码

import math
n,m = list(map(int,input().split()))
#累积缩放值
scale = 1
#累积旋转值,需要mod 2pai
xuanzhuan = 0
value_scale = [1]
value_xuanzhuan = [0]
for i in range(1,n+1):#现在存放的就不是第i个操作了,而是前i个操作的累积
    op1_,value1_ = input().split()
    op1 = int(op1_)
    value1 = float(value1_)

    if op1 == 1:
        #同时记录到上一轮的旋转
        value_xuanzhuan.append(xuanzhuan)
        scale = scale * value1
        value_scale.append(scale)

    else:
        #同时记录到上一轮的缩放
        value_scale.append(scale)
        xuanzhuan = xuanzhuan + value1#先不用取余,最后结果取余就行
        value_xuanzhuan.append(xuanzhuan)
for j in range(m):
    op_start_s, op_end_s, value1_s, value2_s = input().split()
    op_start = int(op_start_s)
    op_end = int(op_end_s)
    value1 = float(value1_s)
    value2 = float(value2_s)

    #看op_start的缩放是多少,op_end的缩放系数是多少,除一下就是缩放的系数了
    op_scale_start = value_scale[op_start-1]
    op_scale_end = value_scale[op_end]

    op_xuanzhuan_start = value_xuanzhuan[op_start-1]
    op_xuanzhuan_end = value_xuanzhuan[op_end]

    #首先计算缩放了多少
    scale_start_end = op_scale_end / op_scale_start
    xuanzhuan_start_end = (op_xuanzhuan_end - op_xuanzhuan_start)%(2 * math.pi)#op_xuanzhuan_start操作也是进行的
    value1_copy = value1
    value1 = scale_start_end*(value1 * math.cos(xuanzhuan_start_end) - value2 * math.sin(xuanzhuan_start_end))
    value2 = scale_start_end*(value1_copy * math.sin(xuanzhuan_start_end) + value2 * math.cos(xuanzhuan_start_end))
    print(value1, ' ', value2)

三、梯度求解

问题描述

输入和输出

输入

2 2
x1 x1 x1 * x2 + *
1 2 3
2 3 4

输出

15
3

思路

本题是一道求偏导的题,计算过程很清晰,但是实现起来还是比较麻烦的。接下来简要介绍一下代码的思路:

1、首先,对于每一次输入,将每一个自变量的值存储起来,注:将逆波兰式的多项式使用copy()进行复制,防止后续操作修改了其中的内容。

for _ in range(m):
    data = list(map(int,input().split()))
    bianliang_j = data[0]
    poly_copy_list = poly_list.copy()
    value_list = data[1:]#从自变量1到自变量n的值
    bianliang_value_dict = {}#变量值字典
    for i in range(len(value_list)):
        if i+1!=int(bianliang_j):
            x_i = 'x'+str(i+1)
            bianliang_value_dict[x_i] = str(value_list[i])
        else:
            bianliang_j_value = int(value_list[i])

2、将多项式中的不要求偏导的自变量替换成其值,这样就仅包含一个自变量,可以使用字典存储多项式。

#复制多项式,将多项式中的不要求偏导的自变量替换成其值
for i in range(len(poly_copy_list)):
    if poly_copy_list[i] in bianliang_value_dict.keys():
        poly_copy_list[i]=bianliang_value_dict[poly_copy_list[i]]
class mul_poly():#对于一个仅包含一个变量的多项式,仅存储其系数和次数即可,但是考虑到稀疏性,得用字典来存储
    def __int__(self):
        self.poly = {}#键表示的是多项式的次数,值表示系数

3、开始处理偏导,因为逆波兰式可能只有一项(数值或变量),需要判断一下。如果只有一项,直接用字典形式表示多项式;否则利用栈读取逆波兰式。

  • 在处理逆波兰式时,为了简化运算符的判断,将减法用加法、乘法、系数-1进行表示。
  • 字典形式的多项式的计算方法为: 在乘法中,两重循环多项式a和多项式b的次数项(键),进行次数(键)相加,系数(值)相乘的操作;多项式加法为,单次循环多项式b的次数(键),如果多项式a中没有,则将多项式b的键值对添加到多项式a中;否则将多项式b的系数(值)和多项式a的系数(值)作和,即可完成加法运算。
 if len(poly_copy_list)==1:#只含一个数值或变量
        temp = trans_mul_poly(poly_copy_list[0]).poly
    else:
        temp = piandao(poly_copy_list)
def piandao(poly):
    '''
    :param
        -poly: 列表形式的多项式
    :return:
    '''
    new_poly = []
    for ele in poly:#a-b = a+ (-1 *)b 减法运算变成加法和乘法
        if ele=='-':#处理减法运算
            new_poly.append('-1')
            new_poly.append('*')
            new_poly.append('+')
        else:
            new_poly.append(ele)
    poly_stack =[]
    # #创建一个多项式字典,用以记录多项式加法和乘法的计算结果
    #通过逆波兰式读取结果
    for ele in new_poly:
        if ele not in ['+','*']:#如果不是运算符,则加入poly_stack中
            poly_stack.append(ele)
        else:
            b = poly_stack.pop()
            a = poly_stack.pop()
            #a和b初始只可能是 数值(可正可负)、自变量x_1 、之后存在(x_1的多项式)
            b_mul_poly = trans_mul_poly(b)
            a_mul_poly = trans_mul_poly(a)#转换成mul_poly对象
            res = compute(a_mul_poly,b_mul_poly,ele)
            poly_stack.append(res)
    result = poly_stack.pop()
    return result.poly
def compute(a_mul_poly,b_mul_poly,ele):
    '''
    :param a_mul_poly:
    :param b_mul_poly:
    :param ele: 运算符,取值为"+"或"*"
    :return:
    '''
    if ele=='*':
        res = mul_poly()
        res.poly = {}
       #对应位置的系数相乘
        for a in a_mul_poly.poly.keys():
            for b in b_mul_poly.poly.keys():
                # 次数相加,系数相乘
                a_b_sum_cishu = a+b
                a_b_sum_xishu = a_mul_poly.poly[a]*b_mul_poly.poly[b]
                if a_b_sum_cishu not in res.poly.keys():
                    res.poly[a_b_sum_cishu] = a_b_sum_xishu
                else:
                    res.poly[a_b_sum_cishu] += a_b_sum_xishu
        return res
    else:
        # 对应位置的系数相加
        for b_cishu in b_mul_poly.poly.keys():
            if b_cishu not in a_mul_poly.poly.keys():
                a_mul_poly.poly[b_cishu] = b_mul_poly.poly[b_cishu]
            else:
                a_mul_poly.poly[b_cishu] += b_mul_poly.poly[b_cishu]
        return a_mul_poly

4、获得结果

res = 0
for key in temp.keys():#键为多项式次数,值为系数
    if key == 0:#常数项求偏导为0
        continue
    elif key == 1: #存在0的0次方
        res+=temp[key]
    else:
        res+=key*temp[key]*bianliang_j_value**(key-1)
print(int(res%(10**9+7)))

代码和结果

class mul_poly():#对于一个仅包含一个变量的多项式,仅存储其系数和次数即可,但是考虑到稀疏性,得用字典来存储
    def __int__(self):
        self.poly = {}#键表示的是多项式的次数,值表示系数
def compute(a_mul_poly,b_mul_poly,ele):
    '''
    :param a_mul_poly:
    :param b_mul_poly:
    :param ele: 运算符,取值为"+"或"*"
    :return:
    '''
    if ele=='*':
        res = mul_poly()
        res.poly = {}
       #对应位置的系数相乘
        for a in a_mul_poly.poly.keys():
            for b in b_mul_poly.poly.keys():
                # 次数相加,系数相乘
                a_b_sum_cishu = a+b
                a_b_sum_xishu = a_mul_poly.poly[a]*b_mul_poly.poly[b]
                if a_b_sum_cishu not in res.poly.keys():
                    res.poly[a_b_sum_cishu] = a_b_sum_xishu
                else:
                    res.poly[a_b_sum_cishu] += a_b_sum_xishu
        return res
    else:
        # 对应位置的系数相加
        for b_cishu in b_mul_poly.poly.keys():
            if b_cishu not in a_mul_poly.poly.keys():
                a_mul_poly.poly[b_cishu] = b_mul_poly.poly[b_cishu]
            else:
                a_mul_poly.poly[b_cishu] += b_mul_poly.poly[b_cishu]
        return a_mul_poly
def trans_mul_poly(data):#将数据转成mul_poly对象
    if isinstance(data,mul_poly):
        return data
    else:
        res = mul_poly()
        res.poly = {}
        if 'x' in data:#是x自变量
            res.poly[1] = 1
        else:#是数值
            res.poly[0]=int(float(data)%(10**9+7))
        return res

def piandao(poly):
    '''
    :param
        -poly: 列表形式的多项式
    :return:
    '''
    new_poly = []
    for ele in poly:#a-b = a+ (-1 *)b 减法运算变成加法和乘法
        if ele=='-':#处理减法运算
            new_poly.append('-1')
            new_poly.append('*')
            new_poly.append('+')
        else:
            new_poly.append(ele)
    poly_stack =[]
    # #创建一个多项式字典,用以记录多项式加法和乘法的计算结果
    #通过逆波兰式读取结果
    for ele in new_poly:
        if ele not in ['+','*']:#如果不是运算符,则加入poly_stack中
            poly_stack.append(ele)
        else:
            b = poly_stack.pop()
            a = poly_stack.pop()
            #a和b初始只可能是 数值(可正可负)、自变量x_1 、之后存在(x_1的多项式)
            b_mul_poly = trans_mul_poly(b)
            a_mul_poly = trans_mul_poly(a)#转换成mul_poly对象
            res = compute(a_mul_poly,b_mul_poly,ele)
            poly_stack.append(res)
    result = poly_stack.pop()
    return result.poly
n,m=list(map(int,input().split()))
poly_list = input().split()
for _ in range(m):
    data = list(map(int,input().split()))
    bianliang_j = data[0]
    poly_copy_list = poly_list.copy()
    value_list = data[1:]#从自变量1到自变量n的值
    bianliang_value_dict = {}#变量值字典
    for i in range(len(value_list)):
        if i+1!=int(bianliang_j):
            x_i = 'x'+str(i+1)
            bianliang_value_dict[x_i] = str(value_list[i])
        else:
            bianliang_j_value = int(value_list[i])
    #复制多项式,将多项式中的不要求偏导的自变量替换成其值
    for i in range(len(poly_copy_list)):
        if poly_copy_list[i] in bianliang_value_dict.keys():
            poly_copy_list[i]=bianliang_value_dict[poly_copy_list[i]]
    if len(poly_copy_list)==1:#只含一个数值或变量
        temp = trans_mul_poly(poly_copy_list[0]).poly
    else:
        temp = piandao(poly_copy_list)
    res = 0
    for key in temp.keys():#键为多项式次数,值为系数
        if key == 0:#常数项求偏导为0
            continue
        elif key == 1: #存在0的0次方
            res+=temp[key]
        else:
            res+=key*temp[key]*bianliang_j_value**(key-1)
    print(int(res%(10**9+7)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始搭建博客网站-----构建项目

构建项目 视频参考链接 构建一个项目文件&#xff08;node为17.16.0版本&#xff09; 构建的过程中可能会出现一个选项&#xff0c;选择vueJavaScript npm init vitelatest easyblog-front-admin安装相关依赖 cd easyblog-front-admin npm install3. 运行 npm run dev好了…

卷积神经网络(CNN)识别验证码

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、编译五、训练六、模型评估七、保存和加载模型八、预测 …

2023年网络安全比赛--综合渗透测试②(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.通过 PC 中的渗透测试平台 Kali 对服务器场景进行渗透测试,将扫描开放的所有端口当作flag提交(例:21,22,23); 2.通过 PC 中的渗透测试平台 Kali 对服务器场景进行渗透测试,将初…

Linux内核--内存管理(一)任务空间管理

目录 一、引言 二、基本概念梳理 三、用户态进程内存管理 ------>3.1、用户态 ------>3.2、内核态 ------>3.3、内存管理结构 ------>3.4、mm_struct ------>4.5、vm_area_struct 四、内核态结构 ------>4.1、32位内核态结构 ------>4.2、64位…

电源的纹波

电源纹波的产生 我们常见的电源有线性电源和开关电源&#xff0c;它们输出的直流电压是由交流电压经整流、滤波、稳压后得到的。由于滤波不干净&#xff0c;直流电平之上就会附着包含周期性与随机性成分的杂波信号&#xff0c;这就产生了纹波。 在额定输出电压、电流的情况下…

【精选必看】MyBatis映射文件及动态SQL,一级,二级缓存介绍

文章目录 MyBatis映射文件 < r e s u l t M a p > <resultMap> <resultMap>resultMap < sql>&< include>特殊字符处理 动态SQL < i f > < if> <if> < w h e r e > <where> <where> < s e t > <…

Redis分片集群

文章目录 Redis分片集群搭建分片集群散列插槽插槽原理小结 集群伸缩需求分析创建新的redis实例添加新节点到redis转移插槽 故障转移自动故障转移手动故障转移 RedisTemplate访问分片集群 Redis分片集群 搭建分片集群 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两…

大数据数据仓库,Sqoop--学习笔记

数据仓库介绍 1. 数据仓库概念 数据仓库概念创始人在《建立数据仓库》一书中对数据仓库的定义是&#xff1a;数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的&#xff08;Subject Oriented&#xff09;、数据集成的&#xff08;Integrated&#xff09;、相对…

【C++】String类

目录 本文将对string常用函数进行说明 string基础介绍 string类的常用接口说明 string() &&string(const char* s) 拷贝:string (const string& str, size_t pos, size_t len npos) 拷贝前n个进行构造&#xff1a;string (const char* s, size_t n);​编辑 …

快速幂算法详解(C++实现)

文章目录 1. 什么是快速幂2. 暴力求解代码实现缺陷分析 3. 优化一&#xff1a;取模运算的性质4. 优化二&#xff1a;快速幂算法的核心思想5. 终极优化&#xff1a;位运算优化6. 源码 这篇文章我们来一起学习一个算法——快速幂算法。 1. 什么是快速幂 顾名思义&#xff0c;快速…

将本地项目上传到gitee

本文详细介绍如何将本地项目上传到gitee 1.登录gitee创建一个与本地项目名相同的仓库 2.进入本地项目所在路径&#xff0c;打开Git Bash 3.执行初始化命令 git init4.添加远程仓库 4.1 点击复制你的HTTPS仓库路径 4.2 执行添加远程仓库命令 git remote add origin 你的…

【Vue】filter的用法

上一篇&#xff1a; vue的指令 https://blog.csdn.net/m0_67930426/article/details/134599378?spm1001.2014.3001.5502 本篇所使用指令 v-for v-on v-html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…

vivado产生报告阅读分析23-时序路径特性报告

时序路径特性报告 下图显示了在“ Timing Mode ” &#xff08; 时序模式 &#xff09; 下运行“ Report Design Analysis ” &#xff08; 设计分析报告 &#xff09; 的输出示例 &#xff0c; 其中显示了设计中 10 条最差建立路径的路径特性。在 Vivado IDE 中选中“ Repo…

【教学类-06-12】20231126 (一)二位数 如何让加减乘除题目从小到大排序(以1-20之间加法为例,做正序排列用)

结果展示 优化后 优化前 背景需求&#xff1a; 生成列表 单独抽取显示题目排序方法 存在问题: 我希望 00 01 02……这样排序&#xff0c;但是实际上&#xff0c;除了第一个加数会从小到大排序&#xff0c;第二个被加数的第十位数和个位数都会从小到大排序&#xff0c;也就是…

Blender学习--模型贴图傻瓜级教程

Blender 官方文档 1. Blender快捷键&#xff1a; 快捷键说明 按住鼠标滚轮&#xff1a;移动视角Tab&#xff1a;切换编辑模式和物体模式鼠标右键&#xff1a; 编辑模式&#xff1a; 物体模式&#xff1a; 其他&#xff1a; 2. 下面做一个球体贴一张纹理的操作 2.1 效果如下…

智能优化算法应用:基于粒子群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于粒子群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于粒子群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.粒子群算法4.实验参数设定5.算法结果6.参考文献7.…

C++局域网从服务器获取已连接用户的列表(linux to linux)

目录 服务器端 代码 客户端 代码解析 服务器端 原理 遇到的阻碍以及解决办法 客户端 原理 遇到的阻碍以及解决办法 运行结果截图 总结 服务器端 代码 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet…

安捷伦E4404B频谱分析仪,100 Hz 至 6.7 GHz

E4404B是安捷伦ESA-E系列频谱分析仪&#xff0c;它是一款能够适应未来发展需求的中高端频谱分析仪解决方案。该系列在频谱分析仪的测量速度、动态范围、精度和功率分辨能力等方面&#xff0c;都为类似价位的产品树立了性能标杆。其灵活的平台设计使得研发、制造和现场服务工程师…

这一款 Mac 系统终端工具,已经用的爱不释手了!

&#x1f525;&#x1f525;&#x1f525;作为程序员或者运维管理人员&#xff0c;我们经常需要使用终端工具来进行服务器管理及各种操作&#xff0c;比如部署项目、调试代码、查看/优化服务、管理服务器等。 相信大家用的最多的终端工具就是 Xshell、iTerm2和Mobaxterm&#…

利用ngrok实现内网穿透(全网最详细教程)

准备工具&#xff1a; 1、phpstudy 用于在本地搭建网站 2、ngrok 用于将自己的本地端口暴露到公网上&#xff0c;从而实现内网穿透 文章开始前给大家分享一个学习人工智能的网站&#xff0c;通俗易懂&#xff0c;风趣幽默 人工智能https://www.captainbed.cn/myon/ ~~~~~…