一次惨痛选拔赛经历(打扰了0..0)

本文分享了一次信息学奥林匹克竞赛的编程经验,详细解析了一个关于奖项分配的问题,通过具体实例展示了如何使用循环结构解决实际问题,并提供了代码实现。

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

前言:

萌新第一次发博客, 知识储备不足,纯属自嗨

今天俱乐部进行的地一次选拔赛,抱着长见识的想法试着做了做题目,然后果然被虐的自闭了
一个半小时只做出来一道题,而且还是暴力破解法…

就是这个:

不久以后,一场信息学奥林匹克竞赛将在BERLAND举行,很多学生都要参加。
赛事组委会决定,每一名参赛的选手都可以获得奖励,分别是一等奖或者二等奖或者三等奖,每个人只能获得一个奖励
他们还决定,一等奖最少有min1人,最多有max1人,二等奖最少有min2人,最多有max2人,三等奖最少有min3人,最多有max3人。
那么现在问题出来,有n个学生参加了这个比赛,如何分配一等奖、二等奖、三等奖的名额,才能使得这些名额数量满足条件。
注意:题目给出的数据一定能够分配好。
Input
题目第一行是一个正整数n,表示学生的人数(1<=n<=3*10^6)。
第二行两个正整数表示min1和max1,1<=min1<=max1<=10^
6。
第三行两个正整数表示min2和max2,1<=min2<=max3<=10^
6。
第四行两个正整数表示min3和max3,1<=min2<=max3<=10^
6。
保证:min1+min2+min3<=n<=max1+max2+max3
Output
输出一行3个整数,表示每种奖励分配的名额,中间用空格隔开。
输出的答案为:首先要保证一等奖的人数尽量多,在一等奖人数一样的情况下,二等奖人数尽量多,二等奖人数一样的情况下,三等奖尽量多
Sample Input
输入样例1:
6
1 5
2 6
37
输入样例2:
10
1 2
1 3
1 5
输入样例3:
6
1 3
2 2
2 2
Sample Output
输出样例1
1 2 3
输出样例2:
2 3 5
输出样例3:
2 2 2

看到这个题目我首先想到的就是最近学习的循环结构但是看的匆忙理解错了题意以为是一等奖获奖名额满了之后才会轮到二等奖接着是三等奖,然鹅敲出代码后才想到这样的话二等奖三等奖可能没人得啊…接着又苦逼的重新思考…
然后就敲出了这样的超无脑代码:

#include<stdio.h>
int main()
{
int n,min1,min2,min3,max1,max2,max3,left_n;
scanf("%d",&n);
scanf("%d%d",&min1,&max1);
scanf("%d%d",&min2,&max2);
scanf("%d%d",&min3,&max3);
if(min1<=max1&&min2<=max2&&min3<=max3&&(min1+min2+min3)<=(max1+max2+max3))
{
left_n = n-min1-min2-min3;
if(left_n>0)
{
if(left_n>(max1-min1))
{
printf("%d “,max1);
left_n = left_n-(max1-min1);
if(left_n>(max2-min2))
{
printf(”%d “,max2);
left_n = left_n-(max2-min2);
printf(”%d",min3+left_n);
}
else
printf("%d %d",min2+left_n,min3);
}
else
printf("%d %d %d",min1+left_n,min2,min3);
}
else
printf("%d %d %d",min1,min2,min3);
}
return 0;
}

先保证三个奖项有最少获奖者,接着开始依次分配,先往一等奖里塞人,能塞满就往二等奖里塞,塞不满就输出总人数减去其他两个奖最少得奖人数,二等奖能塞满三等奖就是总人数减去一二等奖总人数,塞不满就输出总人数减去一等奖总人数和三等奖最少人数.

总结:

通过这次比赛再次认识到了我的无知,其实还是自己基本知识还没掌握好,见识的题目太少而且解题语言绝对可以更简便,主要是被虐and以后要坚持被虐…再回过头来看这么菜的自己还是有点心酸…不过还是要加油呀.

<think>嗯,用户遇到了Shapely的LinearRing坐标数量不足的错误,这确实是个常见但棘手的问题。从历史引用看,用户之前还遇到过geos_c.dll缺失的问题,可能是刚配置环境的新手。用户现在明确需要解决坐标点数量错误,但深层需求应该是确保几何对象创建稳定可靠,而不仅仅是绕过这个报错。用户引用的两个站内文档挺有意思:[1]提到geos_c.dll缺失的解决方案,[2]强调用conda安装的优势。虽然当前问题不直接相关,但说明用户可能长期受环境问题困扰,需要更系统的环境管理建议。这个错误本质是拓扑规则问题:LinearRing作为闭合线串必须首尾相同。用户可能在数据预处理时疏忽了这点,比如用[:-1]切片删除了重复点,或是手动构造坐标时漏了闭合点。考虑到用户用ArcGIS,大概率是处理shapefile时未闭合的线段被转成了Shapely对象。解决方案上,除了补充坐标点数量,还需提醒拓扑校验。用户可能不知道Shapely有.is_valid方法,这应该作为重点。另外避免推荐过时方案(如旧版GEOS适配),因为用户的环境是Win10+Anaconda新版。需要特别注意用户上次重装系统的惨痛经历,说明对Python环境管理不熟。回答里要强调conda的优势,并给出具体校验代码示例——用户明显需要可复用的代码片段而非理论说明。</think> 以下是解决Shapely库中`LinearRing至少需要4个坐标点`错误的完整方案,结合系统环境配置和代码规范两个维度: ### 一、错误原因分析 1. **几何规则冲突** LinearRing要求构成闭合环的**有效坐标序列**须满足: - 至少包含4个点(含首尾重复点),例如:`$$P_1(x_1,y_1) \rightarrow P_2 \rightarrow P_3 \rightarrow P_1$$` - 首尾坐标必须严格相等(允许浮点误差<1e-12) - 非共线约束:所有点不可共直线(否则退化) 2. **典型违规场景** ```python # 错误示例1:仅有3个不同坐标点 ring = LinearRing([(0,0), (1,0), (0,1)]) # 缺少第4个重复点闭合 # 错误示例2:首尾未闭合 ring = LinearRing([(0,0), (0,1), (1,1), (1,0)]) # 缺尾点(0,0) ``` ### 二、解决方案 #### 方法1:坐标序列修复(推荐) ```python from shapely.geometry import LinearRing import numpy as np def create_valid_ring(coords): """自动闭合坐标序列并验证拓扑完整性""" if len(coords) < 3: raise ValueError("坐标点数量不足") # 自动闭合:首坐标 != 尾坐标时追加首坐标 if not np.allclose(coords[0], coords[-1]): coords.append(coords[0]) # 二次验证 if len(coords) < 4: coords.extend([coords[-1], coords[0]]) # 强制补点 ring = LinearRing(coords) assert ring.is_valid, "生成无效几何体" return ring # 正确调用(含自动修复) valid_ring = create_valid_ring([(0,0), (1,0), (1,1)]) print(valid_ring) # <LINEARRING (0 0, 1 0, 1 1, 0 0)> ``` #### 方法2:环境配置优化(预防依赖问题) 若同时存在geos_c.dll报错[^1][^2]: 1. **Anaconda环境修复** ```bash conda remove --force shapely geos # 强制卸载 conda install -c conda-forge shapely=2.0.2 geos=3.12.0 ``` 2. **GEOS路径验证** ```python import shapely print(shapely.geos.geos_version_string) # 应输出: 3.12.0 ``` ### 三、预防措施 | 操作类型 | 正确做法 | 风险操作 | |-------------------|---------------------------------------------|------------------------| | 坐标构造 | 使用`np.vstack([pts, pts[0]])`闭合 | 手动输入未验证的点序列 | | 数据转换 | 通过`shapely.validation.make_valid()`预处理 | 直接加载未清洗的GIS数据 | | 环境管理 | 用conda锁定依赖版本[^2] | 混用pip/conda安装 | ### 四、拓扑规则验证 对已创建的几何体执行强制校验: ```python from shapely import validation ring = LinearRing(...) if not ring.is_valid: repaired_ring = validation.make_valid(ring) # 自动修复拓扑错误 print(f"修复后的环坐标数: {len(repaired_ring.coords)}") ``` > 根源提示:此错误常出现在处理Shapefile多边形边界时,当GIS数据未严格闭合(如ArcGIS导出拓扑错误[^1]),建议先在QGIS中使用**Fix Geometries**工具预处理数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值