Участник:Easik/INS14C — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
* https://www.spoj.com/problems/INS14C/
 
* https://www.spoj.com/problems/INS14C/
  
[wrong answer] Пишет wrong answer, но я перепробовал всё, рассмотрел все мелочи вплоть до инкремента интераторов при прерывании цикла, но не вижу различий между этим кодом и C++ ([[Участник:Novruzov.sb/Digo]]). Возможно, дело в input'e системы.
+
[wrong answer] Пишет wrong answer, но я перепробовал всё, рассмотрел все мелочи вплоть до инкремента интераторов при прерывании цикла, но не вижу различий между этим кодом и C++ ([[Участник:Novruzov.sb/Digo]]). Возможно, дело в input'e системы. На local pc тестовый кейс проходит.
  
 
'''Python 3 (python 3.7.3)'''
 
'''Python 3 (python 3.7.3)'''

Версия 01:58, 20 декабря 2020

[wrong answer] Пишет wrong answer, но я перепробовал всё, рассмотрел все мелочи вплоть до инкремента интераторов при прерывании цикла, но не вижу различий между этим кодом и C++ (Участник:Novruzov.sb/Digo). Возможно, дело в input'e системы. На local pc тестовый кейс проходит.

Python 3 (python 3.7.3)

import re
import sys
import numpy as np
 
 
def swap(a, i, j):
	if i == j:
		return a
 
	elif i < j:
		return a[:i] + a[j] + a[i+1:j] + a[i] + a[j+1:]
 
	elif i > j:
		return a[:j] + a[i] + a[j+1:i] + a[j] + a[i+1:]
 
 
def main(t, n_arr, k_arr, a_arr):
 
 
	for i in range(t):
 
		n = n_arr[i]
		k = k_arr[i]
		a = a_arr[i]
		# print("Loop_i:", n, k, a)
 
		count = 1
 
		if n == k:
			print(a)
 
		else:
			tmp = n
			j = 0
 
			while tmp != k:
				if count % 2 != 0:
					m = 0
					for m in range(j, n):
						if a[m] == '1':
 
							# assert j < n
							# print('prev a:', a, 'swaps:', m, j)
							new_a = swap(a, m, j)
							a = new_a
							# print('new a:', a)
							j += 1
							break
 
					if j > n:
						m = j
 
					# print('m=', m)
					# print('afterloop a:', a)
 
					# assert m < n
					if m == n - 1:
						m += 1
 
					#print("m1", m)
 
					if m == n:
						j += 1
 
				else:
					m = 0
					for m in range(j, n):
						if a[m] == '0':
 
							# assert j < n
							# print('prev a:', a, 'swaps:', m, j)
							new_a = swap(a, m, j)
							a = new_a
							# print('new a:', a)
							j += 1
							break
 
					if j > n:
						m = j
 
					# print('m=', m)
					# print('afterloop a:', a)
 
					# assert m < n
					if m == n - 1:
						m += 1	
 
					# print("m2", m)
 
					if m == n:
						j += 1
 
 
				count += 1
				tmp -= 1
 
			# print(f'>>> (j, n) = ({j}, {n})')
			for m in range(j, n):
				print(a[m], end='')
 
			print('')
 
 
text = sys.stdin.read()
text_splited = re.findall('\d+', text)
# print(text_splited)
# all_input_numbers = list(map(int, text_splited))
 
i = 0
t = int(text_splited[i])
# print('>>>', all_input_numbers[i])
i += 1
 
n_arr = np.zeros(t).astype(int)
k_arr = np.zeros(t).astype(int)
a_arr = []
 
for j in range(t):
 
	# assert i < len(text_splited)
	# assert j < t
	n_arr[j] = int(text_splited[i])
	# print('>>>', text_splited[i])
	i += 1
 
	# assert i < len(text_splited)
	# assert j < t
	k_arr[j] = int(text_splited[i])
	# print('>>>', text_splited[i])
	i += 1
 
	# assert i < len(text_splited)
	# assert j < t
	a_arr.append(text_splited[i])
	# print('>>>', text_splited[i])
	i += 1
 
# a_arr = np.array(a_arr)
 
main(t, n_arr, k_arr, a_arr)