1

この問題http://www.spoj.pl/problems/PEBBMOV/を解決しようとしています。私は正しいアルゴリズムを持っていると思いますが、それはこの質問のポイントではありません。この問題には奇妙な入力ファイルがあります。1 つのテスト ケースの入力は、n a1 a2 a3 ...an の形式にする必要があります。(すべて整数)

ここでの問題は、a[i] の間に改行文字などがあることです。このような改行をスキップして、1 つのテスト ケースに属するすべての a[i] を 1 つの場所に収集できる必要があります。どうすればこれをすべて知ることができますか? 一連の WA と Runtime Errors に加えて、フォーラムでのいくつかの調査。私はこれを行うために次のpythonコードを持っていますが、重要な場所で動揺しているようで、それを成し遂げることができません。入力の読み取りの最後に、リスト lines[] に適切な入力行があることを願っています。

誰かがここで私の間違いを教えてもらえますか? または、より良いアプローチを提案しますか?. 前もって感謝します..

import sys
#data = sys.stdin.readlines()
#lines = inp.split('\n')
data = sys.stdin.read()
pos = 0
lno = 0

lines = []
while pos<len(data):
    while not data[pos].isdigit():
                   pos = pos + 1
num =data[pos]
print num
cur = pos + 1
numbers_collected = 0

x = [] # temp list
y = []
while numbers_collected < num:

    if cur<len(data) and data[cur].isdigit():
        y.append(data[cur])
        cur = cur + 1
        numbers_collected += 1
    else:
        if cur<len(data)and numbers_collected < num:
            cur = cur + 1
        else:
            break
print x
pos = cur
x.extend(y)
lines.extend(x)



for line in lines:
    print line
4

3 に答える 3

2

これはあなたの質問に答えるのに役立ちますか?

In [1]: s1 = "1\n2\n\n3\n\n\n4\n\n\n\n5\n\n\n\n\n6"

In [2]: s1
Out[2]: '1\n2\n\n3\n\n\n4\n\n\n\n5\n\n\n\n\n6'

In [3]: s1.splitlines()
Out[3]: ['1', '2', '', '3', '', '', '4', '', '', '', '5', '', '', '', '', '6']

In [4]: [elem for elem in s1.splitlines() if elem]
Out[4]: ['1', '2', '3', '4', '5', '6']

入力例を見ずに質問に答えるのは難しいです。ただし、SPOJの問題ページには入力例が提供されていないため、OPは利用できないものを提供できません。

于 2012-06-17T16:09:14.433 に答える
0

このようなものが役立ちます:

numbers = map(int, sys.stdin.read().split())
#numbers = [1,2,3,4,5]

これは、すべての空白を区切り文字として扱うため、迅速で汚い解決策です。

于 2012-06-17T16:14:47.750 に答える
0

spoj 問題は、各ゲームには正確に 1 つの入力行があることを示しています。

for line in sys.stdin:
    n, *piles = map(int, line.split())
    assert len(piles) == n

同じゲームの数字の間に改行があると仮定しましょう:

numbers = (int(s) for line in sys.stdin for s in line.split() if line.strip())
for n in numbers:
    piles = list(itertools.islice(numbers, n))
    assert len(piles) == n
于 2012-06-17T16:18:02.753 に答える