1

Тема: Неправильна послідовність виводу, множина, список

Допоможіть з виведенням правильної послідовністі вихідних даних

Задача
Оксана та Юля недавно посварилися. Тепер Оксана не хоче мати нічого
спільного із Юлею!
Оксана та Юля отримали два набори цілих додатних чисел. У Оксани є
числа А1, А2, ... Аn, а у Юлі — В1, В2, ... Вm.
Тепер Оксана хоче викинути зі свого набору мінімальну кількість чисел
так, щоб її набір не мав спільних чисел із набором Юлі, тобто щоб не
існувало чисел, які би входили у два набори. Допоможіть Оксані знайти
мінімальну кількість чисел, які їй треба викинути.

Формат вхідних даних
Перший рядок вхідного потоку містить ціле число Т (1 ≤ T ≤ 5) — кількість
тестів. Далі йде опис тестів у такому форматі:
Перший рядок кожного тесту містить цілі числа N,M (1 ≤ N, M ≤ 100000)
— кількість чисел в Оксани та Юлі відповідно.
Другий рядок тесту містить цілі числа А1, А2, ... Аn — набір чисел
Оксани.
Третій рядок тесту містить В1, В2, ... Вm — набір чисел Юлі.
1 ≤ Ai, Bi ≤ 10^6

Формат вихідних даних
Для кожного тесту в окремому рядку вивести відповідь на задачу — одне
число: кількість чисел, які треба викинути Оксані зі свого набору.
Приклад вхідних даних
2
3 4
1 2 3
3 4 5 6
3 3
1 2 3
4 5 6
Приклад вихідних даних
1
0

T=int(input())
Ryadok=set()
L=[]
for i in range(T):
    N,M=map(int,input().split())
    A=set(map(int,input().split()))
    B=set(map(int,input().split()))
    Ryadok.add(len(A&B))
    L=list(Ryadok)
for K in L:
    print(K)

2

Re: Неправильна послідовність виводу, множина, список

1. Давайте змінним адекватні назви. Ryadok - це що таке? Який рядок? Може, результат? Чи відповідь? Чи ще якось?
2. Відповіді мають бути в тій же послідовності, що й вхідні дані. А ви їх пхаєте в множину, яка не зберігає ані послідовність, ані, що гірше, кількість введених чисел (якщо вони повторюються). Звісно, можете замінити тип на list, а метод додавання, відповідно, на append... але нащо? Вам же не треба їх зберігати, вам треба їх вивести. От і виводьте одразу.
3. Я, може, неуважно прочитав, але ніде не бачу в умові, що числа в обох дівчат мають бути різні. Отже, можуть бути й однакові. Тобто set для їхнього зберігання ніяк не підходить. Якщо потрібна пристойна швидкість, то можете погратися з dict (число:кількість), але є стандартний тип для цього - collections.Counter.

Подякували: leofun011

3

Re: Неправильна послідовність виводу, множина, список

Потрібно використати саме множини, бо на тренінгу це завдання стосується теми "Множини". Ryadok - це пуста множина, у яку заношу кількість спільних елементів з вхідних множин A i B. Не розумію, чому при перенесенні з множини у список, в останьому не зберігається правильна послідовність виводу.

4

Re: Неправильна послідовність виводу, множина, список

Якщо тема "множини", то це не означає, що інших контейнерів не можна використовувати. Якщо тема "стрічки", то це ж не означає, що не можна використовувати числа?

5

Re: Неправильна послідовність виводу, множина, список

Переробила, але є одна проблема. Допоможіть, будь ласка, вивести кількість вкінці, після введення даних. Поки змогла тільки після кожної ітерації циклу.

import collections
T=int(input())
L=[]
for i in range(T):
    N,M=map(int,input().split())
    A=collections.Counter(map(int,input().split()))
    B=collections.Counter(map(int,input().split()))
    L=dict(A&B)
    print(sum(L.values()))

6 Востаннє редагувалося koala (16.02.2021 23:09:43)

Re: Неправильна послідовність виводу, множина, список

А нащо? В умові нічого немає про те, що виводити треба лише після введення.
Ну і в умові не суму просили знайти.
Ой, то це ж не сума. Це взагалі казна-що. Ви його запускали?

Подякували: leofun011

7

Re: Неправильна послідовність виводу, множина, список

Працює вірно, проблема лише з виводом.
sum(L.values()) рахує кількість елементів колекції.
Я - не профі, недавно почала вивчати Pyhton. З колекціями сьогодні працювала вперше. Розумію, що є, напевно, кращий розв'язок.
БУДУ ДУЖЕ ВДЯЧНА, ЯКЩО ДОПОМОЖЕТЕ ПРАВИЛЬНО ВИВЕСТИ.
Пробувала через list. Виникає конфлікт цілої (int) суми і списку (list).

8

Re: Неправильна послідовність виводу, множина, список

list вам і потрібен, але я не знаю, що ви називаєте "конфліктом цілої (int) суми і списку (list)". Буду дуже вдячний, якщо ви замість загальних описів даватимете код і повідомлення компілятора про помилку.

9

Re: Неправильна послідовність виводу, множина, список

import collections
T=int(input())
L=[]
L2=[]
S=0
for i in range(T):
    N,M=map(int,input().split())
    A=collections.Counter(map(int,input().split()))
    B=collections.Counter(map(int,input().split()))
    L=dict(A&B)
    S=sum(L.values())
    L2.append(S)
for x in range(L2):
    x

Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
2
3 4
1 2 3
3 4 5 6
3 3
1 2 3
4 5 6
Traceback (most recent call last):
  File "C:\Python34\pr5_F_Slobodyan.py", line 13, in <module>
    for x in range(L2):
TypeError: 'list' object cannot be interpreted as an integer
>>>

10

Re: Неправильна послідовність виводу, множина, список

zoya07242 написав:
import collections
T=int(input())
L=[]
L2=[]
S=0
for i in range(T):
    N,M=map(int,input().split())
    A=collections.Counter(map(int,input().split()))
    B=collections.Counter(map(int,input().split()))
    L=dict(A&B)
    S=sum(L.values())
    L2.append(S)
for x in range(L2):
    print(x)

Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
2
3 4
1 2 3
3 4 5 6
3 3
1 2 3
4 5 6
Traceback (most recent call last):
  File "C:\Python34\pr5_F_Slobodyan.py", line 13, in <module>
    for x in range(L2):
TypeError: 'list' object cannot be interpreted as an integer
>>>

11

Re: Неправильна послідовність виводу, множина, список

Прихований текст
zoya07242 написав:
zoya07242 написав:
import collections
T=int(input())
L=[]
L2=[]
S=0
for i in range(T):
    N,M=map(int,input().split())
    A=collections.Counter(map(int,input().split()))
    B=collections.Counter(map(int,input().split()))
    L=dict(A&B)
    S=sum(L.values())
    L2.append(S)
for x in range(L2):
    print(x)

Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
2
3 4
1 2 3
3 4 5 6
3 3
1 2 3
4 5 6
Traceback (most recent call last):
  File "C:\Python34\pr5_F_Slobodyan.py", line 13, in <module>
    for x in range(L2):
TypeError: 'list' object cannot be interpreted as an integer
>>>

http://ruslan.rv.ua/python-essential/struct/sets/
https://realpython.com/python-sets/

Oksana = {1, 2, 3}
Yulya = {3, 4, 5, 6}
Oksana.intersection_update(Yulya)
print(len(Oksana))

Там нічого складного. Далі потрібно вкласти це все діло в цикл та вручну заповнити множини :)

Подякували: leofun011

12

Re: Неправильна послідовність виводу, множина, список

Поясніть, чому перший print працює вірно(1,0), а другий виводить обернений результат(0,1)

import collections
T=int(input())
L=[]
L2=[]
S=0
for i in range(T):
    N,M=map(int,input().split())
    A=collections.Counter(map(int,input().split()))
    B=collections.Counter(map(int,input().split()))
    L=dict(A&B)
    S=sum(L.values())
    print(sum(L.values()))
    L2.append(S)
for x in range(len(L2)):
    print(x)

Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:45:13) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
2
3 4
1 2 3
3 4 5 6
1
3 3
1 2 3
4 5 6
0
0
1
>>>

13

Re: Неправильна послідовність виводу, множина, список

Вам Python каже, що range - це функція, що приймає параметром integer. А вам, вочевидь, вона не потрібна. Ну і взагалі вас уже несе шкереберть. Могли б просто сказати, що ви dict і, тим більше, Counter ще не вивчали, аніж тулити їх абикуди.
Якщо (1) всі числа у кожної дівчини унікальні і (2) виведення має починатися після закінчення введення, то

tests = int(input())
result = []
for i in range(tests):
    n, m = map(int,input().split()) #це можна замінити на просто input(), бо ми не використовуємо ці значення
    oksana = set(map(int,input().split()))
    yulia = set(map(int,input().split()))
    result.append(len(oksana&yulia))
for i in result:
    print(i)

Я в першій відповіді мав на увазі щось таке (без цих двох додаткових умов):

from collections import Counter
tests = int(input())
result = []
for i in range(tests):
    input() #n та m нам не потрібні
    oksana = Counter(map(int,input().split())) #нам важливо, скільки чого в Оксани
    yulia = set(map(int,input().split())) #а у Юлі нас цікавить лише наявність
    to_trash = sum(oksana[i] for i in yulia) # скільки викинути
    print(to_trash)
Подякували: zoya072421

14

Re: Неправильна послідовність виводу, множина, список

Ще одне запитання:
Такий варіант розв'язку в системі автоматичної перевірки дає 50 із 100 балів. 5 тестів частково невірні. Наскільки я розумію, це перевіряються якісь додаткові умови. Які саме?

import collections
T=int(input())
L=[]
L2=[]
S=0
for i in range(T):
    N,M=map(int,input().split())
    A=collections.Counter(map(int,input().split()))
    B=collections.Counter(map(int,input().split()))
    L=dict(A&B)
    S=sum(L.values())
    L2.append(S)
for x in L2:
    print(x)

15

Re: Неправильна послідовність виводу, множина, список

Ні, ніяких додаткових умов. Просто цей код не робить того, що вам треба. Наприклад, якщо Оксана має [1,2,2,3], а Юля [2,3,3,4], то відповідь має бути 3, а не 2.

16 Востаннє редагувалося lucas-kane (17.02.2021 12:33:44)

Re: Неправильна послідовність виводу, множина, список

1. Коли ви присвоюєте значення M та N, а потім ніде їх не використовуєте, тоді вони вам не потрібні  :D
Звідси може і виникати помилки у проходженні тесту.

Як варіант можете для вводу даних із клави використати наступний код

Прихований текст
T = int(input("ENTER NUMBERS ITERATION: "))
result = []

for it in range(T):
    print("IT#{", (it + 1), "}!")
    M, N = [int(M) for M in input("\tEnter size: ").split()]

    Oksana = set()
    input_string = input("\t\tset Oksana: ")
    OList = input_string.split()
    for iO in range(M):
        Oksana.add(int(OList[iO]))

    Yulya = set()
    input_string = input("\t\tset Yulya: ")
    YList = input_string.split()
    for iY in range(N):
        Yulya.add(int(YList[iY]))

    L = len(Oksana)

    # видалити з даної множини ті елементи, що є в інших множинах
    # Oksana.difference_update(Yulya)

    Oksana -= Yulya
    result.append(L - len(Oksana))

print("RESULT!!!")
for it in result:
    print(it)

2. Щодо крайнього зауваження пана koala. В Python є два вбудованих класи множин: set (мутабельна множина), frozenset (немутабельна множина).
Коли ви оголосите варіант пана koala [1,2,2,3] то ваш скрипт переробить його на [1, 2, 3] і його довжина буде рівна 3-м.

Ще хотів зауважити, якщо ви проходите онлайн завдання і вашу проблему перевіряє комп'ютер, тоді можете використовувати читання з файлу https://www.w3schools.com/python/ref_file_readline.asp можливо так буде простіше зчитувати блоками вхідні дані

17

Re: Неправильна послідовність виводу, множина, список

Усім дякую за допомогу. Повернулася до множин, допрацювала і здала на 100балів )

T=int(input())
L=[]
for i in range(T):
    N,M=map(int,input().split())
    A=set(map(int,input().split()))
    B=set(map(int,input().split()))
    L.append(len(A&B))
print(*L,sep='\n')
Подякували: FakiNyan, 0xDADA11C72