白駿1024数列の和

1563 ワード

これは簡単な実施問題である.
https://www.acmicpc.net/problem/1024

アイデアは次のとおりです.
  • 長さが最小lの場合、連続数字の和をlで割って、lを減算します.
  • 1に決定された開始点にlを加えてリストを作成し、ex)start=3、l=2->3、4
  • リストの値がnの場合、回答
  • リストの値がnを超えると、lが増加します.
  • リストの値がn未満の場合、startが増加します.
  • n, l = map( int, input().split())
    length = l
    check = False
    while ( True):
        if( check ):
            break
        #print(n , l)
        start = (n//l) - l
        while(True):
            answer_list = []
            #print(n, l ,start)
            for i in range(l):
                tmp = start + i
                if ( tmp < 0 ):
                    continue
                answer_list.append(tmp)
            if ( sum (answer_list) == n):
                check = True
                break
            elif ( sum(answer_list) > n):
                break
            else:
                start+=1
        if ( len(answer_list) > 100 or len(answer_list) < 0 or n+10 < l):
            answer_list = []
            answer_list.append(-1)
            break
                
        elif( n == 1 and l == 2):
            answer_list= [0,1]
            break
        else:
            l+=1
            
    
    for i in answer_list:
        if ( length > len(answer_list)):
            print(-1)
            break
        print(i, end=' ')

    エラーの原因:条件値は負ではなく「整数」です.つまり、ゼロを含めることができます.例えば、1は1のみならず、0,1であってもよい.この条件を無視して,ひたすらまちがっている.