Problem:


MathJax.Hub.Config({
  tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});

A: 秤 / Steelyard

問題文

情太くんは長さ $2L$ の棒を使って下の図のような秤を作った．

棒には等間隔に $2L+1$ 個の穴があけられ，左から順に $-L, -L+1, \cdots, -1, 0, 1, \cdots, L-1, L$ という番号が付けられている．そして $0$ 番の穴の場所を天井から紐で吊るしてある．

情太くんは，秤の穴に $N$ 個のおもりを吊るした．$i$ 番目のおもりを吊るした穴の番号は $x_i$ で，おもりの重さは $w_i$ である．おもりが $1$ つも吊るされない穴や，複数のおもりが吊るされる穴も存在しうる．

情太くんが吊るしたおもりによっては，秤が傾いているかもしれない．姉の立子さんは，追加でいくつかの重りを吊るすことで秤を水平にしたい (おもりの座標と重さ積の総和が $0$ になるとき秤は水平になる)．条件を満たすおもりの吊るし方を $1$ つ出力しなさい．候補が複数ある場合はどれを出力してもよい．

入力

$L$

$N$

$x_1 \ w_1$

$\vdots$

$x_N \ w_N$

入力の制約

$1 \leq L \leq 30$

$1 \leq N \leq 30$

$|x_i| \leq L$

$1 \leq w_i \leq 30$

全て整数

出力

答えは次のような形式で出力せよ．
$1$ 行目の $N’$ は立子さんが吊るしたおもりの数である．
$1+i$ 行目の $x_i’, w_i’$ は，それぞれ立子さんが吊るしたおもりの位置と重さである．

$N'$

$x_1' \ w_1'$

$\vdots$

$x_N' \ w_N'$

出力の制約

立子さんが追加で吊り下げるおもりは，以下の条件を満たす必要がある.

$0 \leq N' \leq 50000$

$|x_i'| \leq L$

$1 \leq w_i' \leq 50000$

全て整数

サンプル

サンプル入力1

3
3
1 1
2 1
3 1

サンプル出力1

1
-3 2

他にも，例えば以下のような出力も正解として扱われる.

2
-3 1
-3 1

これらを図示すると次のようになる．

サンプル入力2

3
3
1 1
0 2
-1 3

サンプル出力2

1
2 1

サンプル入力3

10
4
1 2
2 3
-7 1
-1 1

サンプル出力3

0

秤は最初から釣り合っていることもある．



Sample input:
3
3
1 1
2 1
3 1


Sample output:
1
-3 2

Submission status: Wrong Answer

Solution code:
n=int(input())
m=int(input())
s=sum(x*w for x,w in [map(int,input().split()) for _ in range(m)])
print('1\n%d %d'%([-1,1][s>0],abs(s)) if s else 0)

Submission status: Accepted

Solution code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-


def solve(l, n, jota_weights):
    jota_torque = sum(x * w for x, w in jota_weights)
    if jota_torque == 0:
        return (0, [])
    else:
        max_w = 50000
        sign = -1 if jota_torque > 0 else 1
        ritsuko_weights = []
        ritsuko_counter = 0
        weight = 0
        remainder = abs(jota_torque)
        for x in range(l, 0, -1):
            if remainder <= 0:
                break
            weight = min(max_w, remainder // x)
            remainder -= x * weight
            if weight > 0:
                ritsuko_counter += 1
                ritsuko_weights.append((sign * x, weight))
        return (ritsuko_counter, ritsuko_weights)


def main():
    l = int(input())
    n = int(input())
    jota_torque = [tuple(map(int, input().split())) for _ in range(n)]
    n_prime, ritsuko_weights = solve(l, n, jota_torque)
    print(n_prime)
    if n_prime:
        for x_prime, w_prime in ritsuko_weights:
            print("{} {}".format(x_prime, w_prime))


if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
input()
m=int(input())
s=sum(x*w for x,w in [map(int,input().split()) for _ in range(m)])
print('1\n%d %d'%([1,-1][s>0],abs(s)) if s else 0)

Submission status: Accepted

Solution code:
input()
s=sum(x*w for x,w in [map(int,input().split()) for _ in range(int(input()))])
print('1\n%d %d'%([1,-1][s>0],abs(s)) if s else 0)

Submission status: Accepted

Solution code:
L = int(input())
N = int(input())
s = 0
for i in range(N):
    x, w = map(int, input().split())
    s += x * w
if(s == 0):
    print(0)
elif(s < 0):
    print(1)
    print(1, -s)
else:
    print(1)
    print(-1, s)

Submission status: Accepted

Solution code:
l = int(input())
n = int(input())
mom = 0
for _ in range(n):
  x, w = map(int, input().split())
  mom += x * w

weight = []
while mom:
  if mom < 0:
    add_weight = min(-mom, 50000)
    mom += add_weight
    weight.append((1, add_weight))
  elif mom > 0:
    add_weight = min(mom, 50000)
    mom -= add_weight
    weight.append((-1, add_weight))

print(len(weight))
for t in weight:
  print(*t)

Submission status: Runtime Error

Solution code:
import numpy as np
L = int(input())
N = int(input())
xs = []
ws = []
for i in range(N):
    x, w = map(int, input().split())
    xs.append(x)
    ws.append(w)
xs = np.array(xs)
ws = np.array(ws)
s = sum(xs * ws)
if(s == 0):
    print(0)
elif(s < 0):
    print(1)
    print(-s, 1)
else:
    print(1)
    print(s, -1)

Submission status: Runtime Error

Solution code:
import numpy as np
L = int(input())
N = int(input())
s = 0
for i in range(N):
    x, w = map(int, input().split())
    s += x * w
if(s == 0):
    print(0)
elif(s < 0):
    print(1)
    print(1, -s)
else:
    print(1)
    print(-1, s)