You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python程序适配Kattis凸多边形面积题的单行输入格式

解决Kattis《Convex Polygon Area》输入格式适配问题

我正在解决Kattis平台的《Convex Polygon Area》编程题,现有代码能计算正确结果,但无法适配Kattis的输入格式,导致无法通过评测。

现有代码如下:

class GetData:
    def coords() -> tuple[int, int]:
        x, y = map(int, input().split())
        return x, y

    def polygons(n) -> list:
        data = []
        ## Collect data for 'n' polygons
        for i in range(n):
            coord_list = []
            ## number of points for the current polygon
            m = int(input())
            ## Collect data for 'm' pairs of coordinates for the current polygon
            for j in range(m):
                x, y = GetData.coords()
                coord_list.append((x, y))
                if j == (m-1):  # all coordinate points have been defined
                    area = Area.calculate(coord_list)
                    data.append(area)
        return data

核心问题

当前代码只能处理每个坐标对单独一行的输入格式:

2
3
1 1
2 1
2 2
4
0 0
10 0
13 5
10 8

但Kattis要求的输入是每个多边形的所有顶点数据在同一行,样例输入如下:

2
3 1 1 2 1 2 2
4 0 0 10 0 13 5 10 8

按Kattis格式运行时会触发错误:

Traceback (most recent call last):
  File "/home/asaylor/Projects/OOP-ajsaylor/assignments/A2-OOD/convex-polygon-area.py", line 68, in <module>
    main()
  File "/home/asaylor/Projects/OOP-ajsaylor/assignments/A2-OOD/convex-polygon-area.py", line 61, in main
    data = GetData.polygons(n)
  File "/home/asaylor/Projects/OOP-ajsaylor/assignments/A2-OOD/convex-polygon-area.py", line 18, in polygons
    m = int(input())
ValueError: invalid literal for int() with base 10: '3 1 1 2 1 2 2'

我知道固定数量坐标对的单行处理方法,但本题中多边形顶点数是动态的,无法预先确定变量数量,所以需要调整代码逻辑。


解决方案

修改GetData.polygons方法,直接读取每行的所有数据,分割后提取顶点数和坐标对:

class GetData:
    def polygons(n) -> list:
        data = []
        # 处理n个多边形
        for _ in range(n):
            # 读取当前行的所有数据,转为整数列表
            parts = list(map(int, input().split()))
            # 第一个元素是顶点数m
            m = parts[0]
            # 剩下的元素是坐标对,按每两个一组提取
            coord_list = []
            for i in range(1, len(parts), 2):
                x = parts[i]
                y = parts[i+1]
                coord_list.append((x, y))
            # 计算面积并存储
            area = Area.calculate(coord_list)
            data.append(area)
        return data

修改说明

  1. 读取整行数据:不再单独读取顶点数m,而是直接读取当前多边形的整行输入,分割成整数列表。
  2. 动态提取坐标:列表第一个元素是顶点数m,后续元素按每两个一组拆分,得到(x,y)坐标对,无需预先知道数量。
  3. 移除冗余的coords方法:原方法是逐行读取坐标对,现在整行处理后可以直接提取坐标,该方法不再需要。

这样修改后,代码就能正确处理Kattis的单行多边形数据输入格式,同时保留原有的面积计算逻辑。


内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:25:54