【模拟】【水题】Points in Segments

本文提供了一种解决洛谷上类似“校门口的树”问题的C++代码实现方案。该程序通过输入树木的数量和一系列操作指令,最终输出未被移除的树的数量及其编号。

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

跟洛谷上“校门口的树“”一样的题,不过多解释。

#include<iostream>
using namespace std;
int n,m,i,l,r;
int a[105];
int main()
{
    while(cin>>n>>m)
    {
        int ans=0;
        for(i=1;i<=m;i++)
			a[i]=i;
        for(i=1;i<=n;i++)
        {
            cin>>l>>r;
            for(int j=l;j<=r;j++)
                a[j]=0;
        }
        for(i=1;i<=m;i++)
        {
            if(a[i]!=0)
            ++ans;
        }
        if(ans==0)cout<<ans<<endl;
        else
        {
            cout<<ans<<endl;
			for(i=1;i<=m;i++)
			{
				if(a[i]!=0)
					cout<<a[i]<<" ";
			}
			cout<<endl;
        }
    }
    return 0;
}

 

提示未能在数据库找到合适的剖面,ABAQUS版本2024, # -*- coding: utf-8 -*- from abaqus import * from abaqusConstants import * from caeModules import * from driverUtils import * import sketch import numpy as np from abaqus import * from abaqusConstants import * import part import os def read_data(filename): with open(filename, 'r') as f: lines = f.readlines() points = [] for line in lines: x, y = map(float, line.strip().split(',')) points.append((x, y)) left = points[:31] # 左侧边线上顶点 middle = points[31:62] # 中间边线上顶点 right = points[62:] # 右侧边线上顶点 return left, middle, right def create_origami_model(): # 设置工作目录 work_dir = os.getcwd() os.chdir(work_dir) # 创建新模型 model_name = 'OrigamiModel' if model_name in mdb.models.keys(): del mdb.models[model_name] my_model = mdb.Model(name=model_name) # 读取数据文件 (修改为您的实际文件路径) data_file = 'D:\曲纹折纸\文献\Codes\Codes\shujuf1.txt' left, middle, right = read_data(data_file) # 创建折痕线(线段) print("\n" + "="*50) print("Creating Crease Lines (Wires)") print("="*50) create_crease_lines(my_model, left, middle, right) # 创建面板(壳部件) print("\n" + "="*50) print("Creating Panels (Shells)") print("="*50) create_panels(my_model, left, middle, right) # 创建材料属性 print("\n" + "="*50) print("Creating Materials and Assigning Sections") print("="*50) create_materials_and_sections(my_model) # 在视口中显示第一个折痕线 if len(middle) > 1: first_part_name = "Middle_Segment_1" session.viewports['Viewport: 1'].setValues(displayedObject=my_model.parts[first_part_name]) print("\n" + "="*50) print(f"Successfully created origami model '{model_name}'") print(f"Total parts: {len(my_model.parts)}") print(f" - Crease lines: 88") print(f" - Panels: 60") print("="*50) def create_crease_lines(model, left_points, middle_points, right_points): """创建所有折痕线(线段部件)""" # 创建中间边线的线段 (30条) create_middle_wires(model, middle_points) # 创建左侧到中间的连线 (29条) create_left_to_middle_wires(model, left_points, middle_points) # 创建中间到右侧的连线 (29条) create_middle_to_right_wires(model, middle_points, right_points) def create_middle_wires(model, middle_points): """创建中间边线的线段 (30条)""" print("\nCreating middle wire segments...") for i in range(len(middle_points) - 1): p1 = middle_points[i] p2 = middle_points[i+1] sketch_name = f"Sketch_Middle_{i+1}" part_name = f"Middle_Segment_{i+1}" create_single_wire(model, sketch_name, part_name, p1, p2) print(f" Created middle segment {i+1}") def create_left_to_middle_wires(model, left_points, middle_points): """创建左侧到中间的连线 (29条,排除首尾)""" print("\nCreating left-to-middle wires (excluding first and last)...") # 排除首尾点 (索引1到29) for i in range(1, len(middle_points)-1): p1 = left_points[i] p2 = middle_points[i] sketch_name = f"Sketch_L2M_{i}" part_name = f"Left_to_Middle_{i}" create_single_wire(model, sketch_name, part_name, p1, p2) print(f" Created left-to-middle wire {i} (point {i})") def create_middle_to_right_wires(model, middle_points, right_points): """创建中间到右侧的连线 (29条,排除首尾)""" print("\nCreating middle-to-right wires (excluding first and last)...") # 排除首尾点 (索引1到29) for i in range(1, len(middle_points)-1): p1 = middle_points[i] p2 = right_points[i] sketch_name = f"Sketch_M2R_{i}" part_name = f"Middle_to_Right_{i}" create_single_wire(model, sketch_name, part_name, p1, p2) print(f" Created middle-to-right wire {i} (point {i})") def create_single_wire(model, sketch_name, part_name, point1, point2): """创建单个线段的三维线部件""" # 创建草图 sketch = model.ConstrainedSketch(name=sketch_name, sheetSize=200.0) # 在草图中绘制线段 sketch.Line(point1=(point1[0], point1[1]), point2=(point2[0], point2[1])) # 创建三维可变形部件 wire_part = model.Part( name=part_name, dimensionality=THREE_D, type=DEFORMABLE_BODY ) # 使用草图创建基础线 wire_part.BaseWire(sketch=sketch) # 清理草图对象 del model.sketches[sketch_name] def create_panels(model, left_points, middle_points, right_points): """创建所有面板(壳部件)""" # 创建左侧面板 (30个) create_left_panels(model, left_points, middle_points) # 创建右侧面板 (30个) create_right_panels(model, middle_points, right_points) def create_left_panels(model, left_points, middle_points): """创建左侧面板 (左边界和中间边界之间)""" print("\nCreating left panels...") for i in range(len(left_points) - 1): # 获取四个顶点 (按顺序连接形成四边形) p1 = left_points[i] # 左侧边线起点 p2 = left_points[i+1] # 左侧边线终点 p3 = middle_points[i+1] # 中间边线终点 p4 = middle_points[i] # 中间边线起点 panel_name = f"Left_Panel_{i+1}" # 创建壳单元部件 create_single_shell(model, panel_name, [p1, p2, p3, p4]) print(f" Created left panel {i+1}") def create_right_panels(model, middle_points, right_points): """创建右侧面板 (中间边界和右边界之间)""" print("\nCreating right panels...") for i in range(len(middle_points) - 1): # 获取四个顶点 (按顺序连接形成四边形) p1 = middle_points[i] # 中间边线起点 p2 = middle_points[i+1] # 中间边线终点 p3 = right_points[i+1] # 右侧边线终点 p4 = right_points[i] # 右侧边线起点 panel_name = f"Right_Panel_{i+1}" # 创建壳单元部件 create_single_shell(model, panel_name, [p1, p2, p3, p4]) print(f" Created right panel {i+1}") def create_single_shell(model, part_name, points): """创建单个四边形面板的壳单元部件""" # 创建草图 sketch_name = f"Sketch_{part_name}" sketch = model.ConstrainedSketch(name=sketch_name, sheetSize=200.0) # 绘制四边形 (四条线段) # 点顺序: p1 -> p2 -> p3 -> p4 -> p1 sketch.Line(point1=(points[0][0], points[0][1]), point2=(points[1][0], points[1][1])) sketch.Line(point1=(points[1][0], points[1][1]), point2=(points[2][0], points[2][1])) sketch.Line(point1=(points[2][0], points[2][1]), point2=(points[3][0], points[3][1])) sketch.Line(point1=(points[3][0], points[3][1]), point2=(points[0][0], points[0][1])) # 创建三维壳部件 shell_part = model.Part( name=part_name, dimensionality=THREE_D, type=DEFORMABLE_BODY ) # 使用草图创建基础壳 shell_part.BaseShell(sketch=sketch) # 清理草图对象 del model.sketches[sketch_name] def create_materials_and_sections(model): """创建材料属性并分配给部件""" # 创建面板材料 panel_material = model.Material(name='panel') panel_material.Density(table=((7850.0, ), )) # 密度 kg/m³ panel_material.Elastic(table=((21000.0, 0.3), )) # 弹性模量 MPa, 泊松比 # 创建梁材料 beam_material = model.Material(name='beam') beam_material.Density(table=((7850.0, ), )) beam_material.Elastic(table=((210000.0, 0.3), )) # 创建壳截面属性 shell_section = model.HomogeneousShellSection( name='PanelSection', material='panel', thicknessType=UNIFORM, thickness=1.0, # 面板厚度 mm thicknessField='', idealization=NO_IDEALIZATION, poissonDefinition=DEFAULT, thicknessModulus=None, temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, numIntPts=5 ) # 创建梁截面属性 beam_section = model.BeamSection( name='BeamSection', integration=DURING_ANALYSIS, profile='Rectangular', material='beam' ) model.RectangularProfile( name='Rectangular', a=1.0, # 梁宽度 mm b=1.0 # 梁高度 mm ) # 为所有面板部件分配壳截面 assign_shell_sections(model, 'PanelSection') # 为所有线部件分配梁截面 assign_beam_sections(model, 'BeamSection') print(" Created materials and assigned sections to all parts") def assign_shell_sections(model, section_name): """为所有面板部件分配壳截面""" print("\nAssigning shell sections to panels...") for part_name in model.parts.keys(): if "Panel" in part_name: # 所有面板部件名称包含"Panel" part_obj = model.parts[part_name] # 获取整个部件作为区域 region = part_obj.Set(name=f"Set_{part_name}", cells=part_obj.cells) # 分配截面属性 part_obj.SectionAssignment( region=region, sectionName=section_name, offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION ) print(f" Assigned shell section to {part_name}") def assign_beam_sections(model, section_name): """为所有线部件分配梁截面""" print("\nAssigning beam sections to wires...") beam_prefixes = ["Middle_Segment", "Left_to_Middle", "Middle_to_Right"] for part_name in model.parts.keys(): # 检查是否为线部件 if any(prefix in part_name for prefix in beam_prefixes): part_obj = model.parts[part_name] # 获取整个部件作为区域 region = part_obj.Set(name=f"Set_{part_name}", edges=part_obj.edges) # 分配截面属性 part_obj.SectionAssignment( region=region, sectionName=section_name ) # 设置梁方向(垂直于XY平面) part_obj.assignBeamSectionOrientation( region=region, method=N1_COSINES, n1=(0.0, 0.0, -1.0) ) print(f" Assigned beam section to {part_name}") # 执行创建函数 if __name__ == '__main__': create_origami_model()
07-11
The MLS point cloud registration process for highway tunnels based on a coarse-to-fine two-stage segmentation approach is implemented as follows: (1) Adaptive Overlapping Segmentation: An adaptive overlapping segmentation method considering tunnel ancillary facilities distribution is employed, dividing the point cloud into segments with a segment length of [value] through adaptive overlapping partitioning. (2) Feature-Based Initial Registration: Feature points are extracted from segmented point clouds. A weighted ICP registration incorporating spatial consistency constraints through point-tangent plane matching is performed to obtain the transformation matrix. (3) Deviation Verification: The maximum alignment deviation along the driving direction is calculated using ancillary facilities in adaptively segmented point clouds. If the maximum deviation satisfies threshold [threshold], the process proceeds to step (5). Otherwise, it advances to step (4). (4) Refined Cylindrical Segmentation: A uniformly resampled cylindrical fitting method is applied for secondary overlapping segmentation with a refined segment length of [value]. For segments containing ancillary facilities, step (3) is repeated. For facility-free segments, the transformation matrix from adjacent facility-containing segments is adopted for registration before proceeding to step (5). (5) Redundant Point Removal: Using the maximum scanning line interval as neighborhood search radius [radius], each point in the subsequent segment serves as a query point to identify and remove all neighboring points within the [radius] range from the preceding segment. (6) Point Cloud Integration: The deduplicated point clouds from adjacent segments are merged to obtain the complete registered tunnel point cloud. 画个流程图
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值