środa, 6 grudnia 2017

00019 - 499 - Czy umiesz potęgować - www.pl.spoj.com

Treść zadania:
Dla danych dwóch liczb naturalnych a i b, wyznaczyć ostatnią cyfrę liczby ab.

Zadanie
Napisz program, który:

•wczyta ze standardowego wejścia: podstawę a oraz wykładnik b,
•wyznaczy ostatnią cyfrę liczby ab,
•wypisze wynik na standardowe wyjście.

Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤10), oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku podany jest w jednym wierszu, zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją), takie, że (1 ≤ a,b ≤ 1 000 000 000).

Wyjście
Dla każdego przypadku z wejścia Twój program powinien wypisać (w osobnej linii dla każdego przypadku z wejścia) cyfrę jedności liczby ab zapisanej dziesiętnie.

Przykład
Dla danych wejściowych:

2
2 3
3 3

poprawną odpowiedzią jest:

8
7


Kod źródłowy C++:
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int d;
    cin>>d;
    int a[d],b[d];
    for(int i=0; i<d; ++i)
    {
        cin>>a[i]>>b[i];
    }
    for(int i=0 ; i<d ; ++i)
    {
        int c = a[i]%10;
        switch(c)
        {
            case 9:
                if(b[i]%2)
                {
                    cout<<"9"<<endl;
                }
                else
                {
                    cout<<"1"<<endl;
                }
                break;
            case 8:
                if(!(b[i]%4))
                {
                    cout<<"6"<<endl;
                }
                else if(!(b[i]%2))
                {
                    cout<<"4"<<endl;
                }
                else if(b[i]>8)
                {
                    for(int k=3 ; k<=1000000000 ; k+=4)
                    {
                        if(!(b[i]%k))
                        {
                            cout<<"2"<<endl;
                            break ;
                        }
                    }
                }
                else
                {
                    cout<<"8"<<endl;
                }
                break;
            case 7 :
                if(!(b[i]%4))
                {
                    cout<<"1"<<endl;
                }
                else if(!(b[i]%2))
                {
                    cout<<"9"<<endl;
                }
                else if(b[i]>7)
                {
                    for(int k=3 ; k<=1000000000 ; k+=4)
                    {
                        if(!(b[i]%k))
                        {
                            cout<<"3"<<endl;
                            break ;
                        }
                    }
                }
                else
                {
                    cout<<"7"<<endl;
                }
                break;
            case 6 :
                cout<<"6"<<endl;
                break;
            case 5 :
                cout <<"5"<<endl;
                break;
            case 4 :
                if(!(b[i]%2))
                {
                    cout<<"6"<<endl;
                }
                else
                {
                    cout<<"4"<<endl;
                }
                break;
            case 3 :
                if(!(b[i]%4))
                {
                    cout<<"1"<<endl;
                }
                else if(!(b[i]%2))
                {
                    cout<<"9"<<endl;
                }
                else if(b[i]>3)
                {
                    for(int k=3 ; k<=1000000000 ; k+=4)
                    {
                        if(!(b[i]%k))
                        {
                            cout<<"7"<<endl;
                            break;
                        }
                    }
                }
                else
                {
                    cout<<"3"<<endl;
                }
                break;
            case 2:
                if(!(b[i]%4))
                {
                    cout<<"6"<<endl;
                }
                else if(!(b[i]%2))
                {
                    cout<<"4"<<endl;
                }
                else if(b[i]>2)
                {
                    for(int k=3 ; k<=1000000000; k+=4)
                    {
                        if(!(b[i]%k))
                        {
                            cout<<"8"<<endl;
                            break ;
                        }
                    }
                }
                else
                {
                    cout<<"2"<<endl;
                }
                break;
            case 1:
                cout<<"1"<<endl;
                break ;
            case 0:
                cout<<"0"<<endl;
                break ;
            default :
                cout<<a[i]%10<<endl;
                break;
        }
    }
    return 0 ;
}


Źródło: http://pl.spoj.com/problems/PA05_POT/

poniedziałek, 4 grudnia 2017

00018 - 609 - Pole pewnego koła - www.pl.spoj.com

Treść zadania:
Wyznacz pole koła, którego okrąg jest przecięciem dwóch identycznych sfer o promieniu r. Odległość pomiędzy środkami sfer wynosi d. Wartości r oraz d podane na wejściu są liczbami zmiennoprzecinkowymi. Można założyć, że 1 <= d < 2 * r <= 2000.














Wejście
Na wejściu podane są dwie liczby zmiennoprzecinkowe r d oddzielone spacją, oznaczające odpowiednio promień sfery i odległość między środkami sfer.

Wyjście
Należy wypisać pojedynczą liczbę zmiennoprzecinkową S oznaczającą pole koła. Dopuszczalny błąd wyniku wynosi 0.01.

Uwaga. W roli separatora dziesiętnego należy używać kropki (nie: przecinka). Można przyjąć, że stosunek obwodu koła do jego średnicy wynosi 3.141592654.

Liczba punktów za zadanie jest równa liczbie poprawnie rozwiązanych testów / 5. Testów jest 20.

Przykład

Przykład 1

Wejście:
10 10

Wyjście:
235.62

Przykład 2

Wejście:
1000 1500

Wyjście:
1374446.79


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define M_PI 3.141592654

int main()
{
    double r, d;
    for(;scanf("%lf%lf",&r,&d)!=EOF;)
    {
        d=d/2;
        printf("%.2lf\n",M_PI*(sqrt((r*r)-(d*d)))*(sqrt((r*r)-(d*d))));
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    double r, d;
    cout.setf(ios::fixed);
    cout.precision(2);
    for(;cin>>r>>d;)
    {
        d=d/2;
        cout<<M_PI*(sqrt((r*r)-(d*d)))*(sqrt((r*r)-(d*d)))<<endl;
    }
    return 0;
}


Kod źródłowy w Python 2:
import math
input_data = raw_input('')
if input_data == '':
    exit(0)
list = input_data.split(' ')
output = a = b = r_n = 0.000000000
pi = 3.141592654
a = float(list[0])
b = float(list[1])/2
if float(list[1]) >= 2*a:
    output = 0.00
elif float(list[1]) == 0:
    output = pi * a * a
else:
    r_n = math.sqrt((a * a) - (b * b))
    output = pi * r_n * r_n
print output
exit(0)


Kod źródłowy w Python 3:
import math
input_data = input('')
if input_data == '':
    exit(0)
list = input_data.split(' ')
output = a = b = r_n = 0.000000000
pi = 3.141592654
a = float(list[0])
b = float(list[1])/2
if float(list[1]) >= 2*a:
    output = 0.00
elif float(list[1]) == 0:
    output = pi * a * a
else:
    r_n = math.sqrt((a * a) - (b * b))
    output = pi * r_n * r_n
print (output)
exit(0)


Źródło: http://pl.spoj.com/problems/ETI06F1/

środa, 29 listopada 2017

00017 - 1055 - Parzyste nieparzyste - www.pl.spoj.com

Treść zadania:
Wczytaj ciąg liczb. Następnie wypisz wczytane liczby w taki sposób, aby najpierw pojawiły się te, które wystąpiły na pozycjach parzystych, a następnie te, które wystąpiły na pozycjach nieparzystych; z zachowaniem pierwotnej kolejności w obrębie obu grup. Numerujemy od 1.

Wejście
Najpierw t - liczba testów. Następnie dla każdego testu liczba n i n liczb, n <= 100.

Wyjście
Dla każdego testu n liczb w opisanym porządku.

Przykład

Wejście:
2
4 1 2 3 5
3 9 8 7

Wyjście:
2 5 1 3
8 9 7


Kod źródłowy w C:
#include <stdio.h>

int main()
{
    int input[101];
    int t, i, q;
    scanf("%d",&t);
    while(t != 0)
    {
        scanf("%d",&q);
        for(i=1; i<=q; ++i)
        {
            scanf("%d",&input[i]);
        }
        for(i=1; i<=q; ++i)
        {
            if(i%2==0)
            {
                printf("%d ",input[i]);
            }
        }
        for(i=1; i<=q; ++i)
        {
            if(i%2!=0)
            {
                printf("%d ",input[i]);
            }
        }
        printf("\n");
        --t;
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int input[101];
    int t, i, q;
    cin>>t;
    while(t--)
    {
        cin>>q;
        for(i=1; i<=q; ++i)
        {
            cin>>input[i];
        }
        for(i=1; i<=q; ++i)
        {
            if(i%2==0)
            {
                cout<<input[i]<<" ";
            }
        }
        for(i=1; i<=q; ++i)
        {
            if(i%2!=0)
            {
                cout<<input[i]<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}


Źródło: http://pl.spoj.com/problems/PP0602A/

poniedziałek, 27 listopada 2017

00016 - 626 - Obżartuchy - www.pl.spoj.com

Treść zadania:

Co roku w Megabajtolandii odbywa się Zlot Obżartuchów. Podczas każdego zlotu tradycją jest, że pierwszego dnia wszyscy uczestnicy obżerają się ciastkami przez całą dobę non-stop, nie mając ani ułamka sekundy przerwy. Jak tylko obżartuch skończy jeść jedno ciastko to od razu musi zabrać się za następne (nie dotyczy to sytuacji pod koniec doby, kiedy to uczestnikowi nie wolno napocząć ciastka jeśli wie, że nie zdąży go zjeść przed końcem doby). Kolejnym ważnym elementem tradycji jest to, że każdy obżartuch je każde swoje ciastko w niezmiennym przez całą dobę, charakterystycznym dla siebie tempie.

Na najbliższy Zlot zostały zaproszone tylko te obżartuchy, które już uczestniczyły w poprzednich Zlotach. Dzięki temu wiadomo z góry w jakim tempie każdy z nich je ciastka (obżartuchy nie lubią zmieniać swojego wyuczonego tempa). Na podstawie tych danych, organizatorzy Zlotu chcą określić ile należy kupić ciastek. Sytuację utrudnia fakt, że ciastka w sklepie sprzedawane są w pudełkach o stałej wielkości, a nie na sztuki - przez to być może trzeba będzie kupić trochę więcej ciastek niż zostanie zjedzonych.

Zadanie
Mając daną liczbę obżartuchów zaproszonych na Zlot oraz czas jedzenia pojedynczego ciastka (podany w sekundach) przez każdego z nich Twój program powinien policzyć ile należy kupić pudełek z ciastkami.

Specyfikacja wejścia
W pierwszej linii wejścia znajduje się jedna dodatnia liczba całkowita, oznaczająca liczbę zestawów testowych, które dalej pojawią się na wejściu. Każdy zestaw ma następującą postać. W pierwszej linii znajdują się dwie liczby całkowite N i M oddzielone pojedynczą spacją (1 ≤ N ≤ 10.000, 1 ≤ M ≤ 1.000.000.000). Oznaczają one odpowiednio liczbę zaproszonych obżartuchów na Zlot oraz liczbę ciastek w jednym pudełku. Kolejne N wierszy zestawu zawiera po jednej liczbie całkowitej dodatniej niewiększej niż 100.000. Są to czasy (w sekundach) jedzenia pojedynczego ciastka przez kolejnych obżartuchów.

Specyfikacja wyjścia
Dla każdego zestawu danych pojawiającego się na wejściu należy wypisać dokładnie jedną liczbę całkowitą (każdą w osobnej linii), oznaczającą liczbę pudełek z ciastkami, jaką organizatorzy muszą kupić na Zlot.

Przykład

Wejście
2
2 10
3600
1800
3 356
123
32999
10101

Wyjście
8
2

Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int t, n, m, i, j, output;
    double c;
    int tab[10000];
    scanf("%d",&t);
    for(i=0; i<t; ++i)
    {
        scanf("%d%d",&n,&m);
        for(j=0; j<n; ++j)
        {
            scanf("%d",&tab[j]);
        }
        c=0;
        for(j=0; j<n; ++j)
        {
            c=c+(86400/tab[j]);
        }
        output=ceil(c/m);
        printf("%d\n",output);
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int t, n, m;
    double c;
    int tab[10000];
    cin>>t;
    for(int i=0; i<t; ++i)
    {
        cin>>n>>m;
        for(int j=0; j<n; ++j)
        {
            cin>>tab[j];
        }
        c=0;
        for(int j=0; j<n; ++j)
        {
            c=c+(86400/tab[j]);
        }
        cout<<ceil(c/m)<<endl;
    }
    return 0;
}


Kod źródłowy w Python 2:
t = int(raw_input(""))
day = 86400
for i in range(0, t, +1):
    wyn = second = cookies = box_quantity = mod = 0
    wej_str = raw_input("")
    wej = wej_str.split(" ")
    obz = int(wej[0])
    boxes = int(wej[1])
    for j in range (0, obz, +1):
        second = int(raw_input(""))
        cookies = int(day / second)
        wyn = wyn + cookies
    mod = wyn%boxes
    box_quantity = wyn/boxes
    if mod > 0:
        box_quantity = box_quantity + 1
    print box_quantity


Kod źródłowy Python 3:
t = int(input(""))
day = 86400
for i in range(0, t, +1):
    wyn = second = cookies = box_quantity = mod = 0
    wej_str = input("")
    wej = wej_str.split(" ")
    obz = int(wej[0])
    boxes = int(wej[1])
    for j in range (0, obz, +1):
        second = int(input(""))
        cookies = int(day / second)
        wyn = wyn + cookies
    mod = wyn%boxes
    box_quantity = wyn/boxes
    if mod > 0:
        box_quantity = box_quantity + 1
    print (int(box_quantity))


Źródło:
http://pl.spoj.com/problems/GLUTTON/

środa, 22 listopada 2017

00015 - 1032 - Podzielność - www.pl.spoj.com

Treść zadania:

Wypisz wszystkie liczby ai podzielne przez x i niepodzielne przez y, gdzie 1 < ai < n < 100000.

Wejście
Najpierw w oddzielnej linii t liczba przypadków testowych następnie w kolejnych t liniach liczby n x y.

Wyjście
W kolejnych t liniach oddzielone pojedynczym odstępem liczby spełniające warunki zadania wypisane od najmniejszej do największej.

Przykład

Wejście:
2
7 2 4
35 5 12

Wyjście:
2 6
5 10 15 20 25 30


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t, n, x, y, i, j;
    scanf("%d", &t);
    for (i=0; i<t; ++i)
    {
        scanf("%d %d %d",&n,&x,&y);
        for (j=0; j<n; ++j)
        {
            if ((j%x == 0) && (j%y != 0))
            {
                printf("%d ",j);
            }
        }
        printf("\n");
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int t, n, x, y, i, j;
    cin>>t;
    for (i=0; i<t; ++i)
    {
        cin>>n>>x>>y;
        for (j=0; j<n; ++j)
        {
            if ((j%x == 0) && (j%y != 0))
            {
                cout<<j<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

Źródło:
http://pl.spoj.com/problems/PP0601B/

poniedziałek, 20 listopada 2017

00014 - 1011 - Połowa - www.pl.spoj.com

Treść zadania:

Dla podanego ciągu długości 2*k, wypisz na standardowe wyjście dokładnie pierwszą połowę ciągu.

Wejście
W pierwszej linijce wejścia znajduje się jedna liczba całkowita t (1<=t<=100). Każdy wiersz o numerze od 2 do t+1, zawiera ciąg długości 2*k (1<=k<=1000).

Wyjście
Dla każdego przypadku testowego na wyjściu powinien pojawić się ciąg będący pierwszą połową wczytanego ciągu.

Example

Wejście:
3
pierwszy
lubiec
ktotozrobi

Output:
pier
lub
ktoto

Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

char characters[50000];

int main()
{
    char c;
    int i=0,j,k=0,l=0;
    scanf("%d",&i);
    for(j=0;j<=i;++j)
    {
        for(k=0;scanf("%c",&c)==1, c != '\n';++k)
        {
            characters[k]=c;
        }
        characters[k]='\0';
        for(k=0;characters[k]!='\0';++k)
        {
            ++l;
        }
        l=l/2;
        for(k=0;k<l;++k)
        {
            printf("%c",characters[k]);
        }
        l=0;
        printf("\n");
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <stdio.h>

using namespace std;

char characters[50000];

int main()
{
    char c;
    int i=0,j,k=0,l=0;
    cin>>i;
    for(j=0;j<=i;++j)
    {
        c=getchar();
        for(k=0;c==1, c != '\n';++k)
        {
            characters[k]=c;
            c=getchar();
        }
        characters[k]='\0';
        for(k=0;characters[k]!='\0';++k)
        {
            ++l;
        }
        l=l/2;
        for(k=0;k<l;++k)
        {
            cout<<characters[k];
        }
        l=0;
        cout<<endl;
    }
    return 0;
}


Źródło:
http://pl.spoj.com/problems/POL/

środa, 15 listopada 2017

00013 - 723 - ROL - www.pl.spoj.com

Treść zadania:

Przesuń elementy tablicy cyklicznie w lewo.

Wejście
Najpierw liczba testów t (t ≤ 100). Następnie dla każdego testu liczba n (1 < n ≤ 100) i n liczb.

Wyjście
Dla każdego testu n liczb w zmienionym porządku.

Przykład

Wejście:
2
7 1 2 3 4 5 6 7
3 2 1 10

Wyjście:
2 3 4 5 6 7 1
1 10 2

Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t, n, i, j;
    int tab [100];
    scanf("%d",&t);
    for(i=0; i<t; ++i)
    {
        scanf("%d",&n);
        for(j=0; j<n; ++j)
        {
            scanf("%d",&tab[j]);
        }
        for(j=1; j<n; ++j)
        {
            printf("%d ",tab[j]);
        }
        printf("%d\n",tab[0]);
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int t, n;
    int tab [100];
    cin>>t;
    for(int i=0; i<t; ++i)
    {
        cin>>n;
        for(int j=0; j<n; ++j)
        {
            cin>>tab[j];
        }
        for(int j=1; j<n; ++j)
        {
            cout<<tab[j]<<" ";
        }
        cout<<tab[0]<<endl;
    }
    return 0;
}


Źródło:
http://pl.spoj.com/problems/PTROL/

poniedziałek, 13 listopada 2017

00012 - 997 - Kalkulator - www.pl.spoj.com


Treść zadania:

Napisz program, który działa jak prosty kalkulator obsługujący pięć operacji: dodawanie, odejmowanie, mnożenie, dzielenie i obliczanie reszty z dzielenia liczb całkowitych.

Wejście
Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Zestawy składają się z jednoznakowego symbolu operacji do wykonania (+ dodawanie, - odejmowanie, * mnożenie, / dzielenie całkowitoliczbowe, % reszta z dzielenia) oraz następujących po nim dwóch liczb całkowitych. Poszczególne składowe zestawu zostaną rozdzielone spacjami, a same zestawy znakiem nowej linii. Liczba testów nie przekracza 100, wynik zawiera się w typie int32.

Wyjście
Na wyjściu programu ma się pojawić ciąg liczb będących rezultatem wykonania pojawiających się na wejściu poleceń. Poszczególne liczby należy rozdzielić znakami nowej linii. Uwaga! Można założyć, że dane wejściowe nie zawierają polecenia dzielenia przez 0.

Przykład

Wejście:
+ 7 9
- 0 4
* 5 6
/ 8 3
% 5 2

Wyjście:
16
-4
30
2
1

Kod źródłowy w C++:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    char i;
    int x, y;
    while (!(cin >> i).eof())
    {
        cin>>x>>y;
        switch(i)
        {
            case '+':
                cout<<x+y<<endl;
                break;
            case '-':
                cout<<x-y<<endl;
                break;
            case '*':
                cout<<x*y<<endl;
                break;
            case '/':
                cout<<x/y<<endl;
                break;
            case '%':
                cout<<x%y<<endl;
                break;
        }
    }
    return 0;
}


Kod źródłowy w Python 2:
def multiplication(a,b):
    return a*b
def division(a, b):
    return a/b
def addition(a,b):
    return a+b
def subtraction(a,b):
    return a-b
def modulo(a,b):
    return a%b
output = 0
while True:
    try:
        scan = str(raw_input())
    except EOFError:
        exit(0)
    output = 0
    l = scan.split(' ')
    if l[0] == "+":
        output = addition(int(l[1]), int(l[2]))
    elif l[0] == "-":
        output = subtraction(int(l[1]), int(l[2]))
    elif l[0] == "*":
        output = multiplication(int(l[1]), int(l[2]))
    elif l[0] == "/":
        output = division(int(l[1]), int(l[2]))
    elif l[0] == "%":
        output = modulo(int(l[1]), int(l[2]))
    print output


Kod źródłowy w Python 3 V1:
def multiplication(a,b):
    return a*b
def division(a, b):
    return a/b
def addition(a,b):
    return a+b
def subtraction(a,b):
    return a-b
def modulo(a,b):
    return a%b
output = 0
while True:
    try:
        scan = str(input())
    except EOFError:
        exit(0)
    output = 0
    l = scan.split(' ')
    if l[0] == "+":
        output = addition(int(l[1]), int(l[2]))
    elif l[0] == "-":
        output = subtraction(int(l[1]), int(l[2]))
    elif l[0] == "*":
        output = multiplication(int(l[1]), int(l[2]))
    elif l[0] == "/":
        output = division(int(l[1]), int(l[2]))
    elif l[0] == "%":
        output = modulo(int(l[1]), int(l[2]))
    print (int(output))


Kod źródłowy w Python 3 V2:
def calculating(n):
  n = n.split(' ', 2)
  print(int(eval( n[1]+n[0]+n[2])))
while True:
  try:
    calculating(input())
  except EOFError:
    exit(0)


Źródło:
http://pl.spoj.com/problems/CALC/

środa, 8 listopada 2017

00011 - 1139 - Nowa działka - www.pl.spoj.com


Treść zadania:
Tata Jasia kupił nową działkę. Był ze swojego zakupu bardzo dumny!
Pierwsze co zrobił po podpisaniu umowy to zabrał całą rodzinę,
aby obejrzeć nową działkę. Wśród nich był Jaś.

Jasiowi działka też bardzo się podobała. Tata poinstruował go,
że zgodnie z obserwacjami Jasia, działka ma kształt idealnego kwadratu.
Jaś natychmiast przypomniał sobie ze szkoły ostatnią lekcję matematyki,
na której to uczył się, jak obliczać powierzchnie kwadratów.
Wystarczyło więc, żeby znał długość jednego boku działki,
a już wiedziałby, jaką powierzchnię ma całość.
Potrzebował tylko tego jednego wymiaru.

Tata zajął się z mamą rozpatrywaniem wizji na temat wykorzystania
tak wspaniałego kawałka ziemi. Jaś więc nie mając w nich pomocy,
nie zwracając na nich uwagi, poszedł do narożnika działki.
Tam stanął i zacząć stawiać wzdłuż płotu równe kroki.
Gdy doszedł do drugiego narożnika znał już długość jednego boku,
dzięki czemu mógł już obliczyć powierzchnię całej działki! Niestety,
samo rachowanie nie jest jeszcze jego mocną stroną,
więc potrzebuje pomocy.

Znając liczbę kroków wyliczonych przez Jasia,
oblicz powierzchnię działki w „krokach kwadratowych Jasia”.

Wejście
Pierwsza linia wejścia zawiera liczbę całkowitą D (1 ≤ D ≤ 500)
oznaczającą liczbę zestawów danych. Każdy zestaw składa się z jednej
dodatniej liczby całkowitej X (1 ≤ X ≤ 1000) określającej liczbę
kroków wyliczonych przez Jasia.

Wyjście
Dla każdego zestawu danych należy wypisać w osobnej linii jedną
liczbę oznaczającą powierzchnię działki w „krokach kwadratowych Jasia”.
Przykład

Wejście:
2
5
3

Wyjście:

25
9


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int D,j=0;
    unsigned long long int X=0;
    scanf("%d",&D);
    for(j;j<D;++j)
    {
        scanf("%d",&X);
        printf("%d\n",X*X);
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int D,j=0;
    unsigned long long int X=0;
    cin>>D;
    for(j;j<D;++j)
    {
        cin>>X;
        cout<<X*X<<endl;
    }
    return 0;
}


Kod źródłowy w Python 3:
for x in range(int(input())):
    print(pow(int(input()),2))

Źródło:
http://pl.spoj.com/problems/MWPZ06X/

poniedziałek, 6 listopada 2017

00010 - 522 - Przedszkolanka - www.pl.spoj.com


Treść
W ostatnim czasie przedszkole opanowała nietypowa epidemia.
Nie dotknęła ona przedszkolaków, tylko panie opiekujące się
dziećmi. Pośród nielicznych zdrowych pozostała, ulubiona
przez wszystkie maluchy, pani Agnieszka. Postanowiła osłodzić
podopiecznym nieobecność wychowawczyń i rozdać im trochę
cukierków. Przedszkolanka wie, że następnego dnia będzie
się zajmowała jedną z dwóch grup. Zna też liczbę dzieci w
każdej z nich. Chce teraz dobrać taką liczbę słodyczy, by
można nią było obdarować wszystkie dzieci, niezależnie od
grupy, którą będzie prowadziła. Musi przy tym spełnić
kilka warunków. Po pierwsze, każdy z przedszkolaków powinien
otrzymać jednakową (oczywiście niezerową) liczbę cukierków.
Po drugie, liczba słodyczy powinna być taka, by można było
rozdać je wszystkie. Po trzecie, ponieważ budżet przedszkola
jest ograniczony, pani Agnieszka musi kupić minimalną liczbę
cukierków spełniającą dwa wcześniejsze warunki.
Pomóż sympatycznej przedszkolance i napisz program,
który obliczy, ile cukierków powinna kupić.


Wejście
Dane podawane są na standardowe wejście.
W pierwszym wierszu podana jest liczba N
(1<=N<=20) zestawów danych. Dalej podawane
są zestawy danych zgodnie z poniższym opisem:

Jeden zestaw danych
W pierwszym i jedynym wierszu zestawu danych znajdują się
dwie liczby całkowite a i b (10<=a,b<=30), oddzielone
pojedynczą spacją, oznaczające odpowiednio liczbę
przedszkolaków w grupach, z których jedna zostanie
przydzielona pani Agnieszce.

Wyjście

Wyniki programu powinny być wypisywane na standardowe
wyjście. W kolejnych wierszach należy podać odpowiedzi
obliczone dla kolejnych zestawów danych. Wynikiem dla
jednego zestawu jest liczba cukierków, jaką powinna
zakupić przedszkolanka.


Przykład

dane wejściowe:
2
12 15
11 22

wynik:
60
22

Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int nwd (int a, int b)
{
    int c;
    for(;b!=0;)
    {
        c=a;
        a=b;
        b=c%b;
    }
    return a;
}

int nww (int a, int b)
{
    return a*b/nwd(a,b);
}

int main()
{
    int N, a, b;
    scanf("%d", &N);
    while(N != 0)
    {
        scanf("%d %d",&a,&b);
        printf("%d\n",nww(a,b));
        --N;
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int nwd (int a, int b)
{
    int c;
    for(;b!=0;)
    {
        c=a;
        a=b;
        b=c%b;
    }
    return a;
}

int nww (int a, int b)
{
    return a*b/nwd(a,b);
}


int main()
{
    int N, a, b;
    cin>>N;
    while(N != 0)
    {
        cin>>a>>b;
        cout<<nww(a,b)<<endl;
        --N;
    }
    return 0;
}


Kod źródłowy w Python 2:
def nww(x,y):
    if x == y:
        return y
    if x < y:
        (x,y)=(y,x)
    c = y
    while True:
        y = y + c
        if y%x == 0:
            return y
N = int(raw_input(''))
for i in range(0, N, +1):
    data = (raw_input('')).split(' ')
    a = int(data[0])
    b = int(data[1])
    output = nww(a,b)
    print output


Kod źródłowy w Python 3:
def nww(x,y):
    if x == y:
        return y
    if x < y:
        (x,y)=(y,x)
    c = y
    while True:
        y = y + c
        if y%x == 0:
            return y
N = int(input(''))
for i in range(0, N, +1):
    data = (input('')).split(' ')
    a = int(data[0])
    b = int(data[1])
    output = nww(a,b)
    print (output)


Źródło:
http://pl.spoj.com/problems/PRZEDSZK/

środa, 1 listopada 2017

00009 - 968 - Suma - www.pl.spoj.com

Treść zadania:

Napisz program, który oblicza sumę pojawiających się na wejściu liczb.

Wejście
Na wejście programu podana zostanie pewna nieokreślona, ale niewielka
ilość małych liczb całkowitych (z zakresu -100..100).
Poszczególne liczby zostaną rozdzielone znakiem nowej linii.

Wyjście
Na wyjściu ma się pojawić ciąg liczbowy, którego i-ta pozycja jest
równa sumie i pierwszych wczytanych z wejścia liczb. Poszczególne
liczby należy rozdzielić znakami nowej linii.

Przykład

Wejście:
6
8
-3

Wyjście:
6
14
11


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j=0, k;
    while(scanf("%d", &i) != EOF)
    {
        j+=i;
        printf("%d\n",j);
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int main()
{
    int i, j=0, k;
    while(scanf("%d", &i) != EOF)
    {
        j+=i;
        cout<<j<<endl;
    }
    return 0;
}


Kod źródłowy Python 2:
output = a = 0
scan = ''
while True:
 try:
  scan = raw_input()
 except EOFError:
  exit(0)
 if scan == '':
  exit(0)
 else:
  a = int(scan)
  output = output + a
 print output
exit(0)


Kod źródłowy w Python 3:
output = a = 0
scan = ''
while True:
    try:
        scan = input()
    except EOFError:
        exit(0)
    if scan == '':
        exit(0)
    else:
        a = int(scan)
    output = output + a
    print (output)
exit(0)


Źródło:
http://pl.spoj.com/problems/SUMA/

poniedziałek, 30 października 2017

00008 - 1016 - Prędkość średnia - ww.pl.spoj.com

Treść zadania:

Pociąg z miejscowości A do B jedzie z prędkością v1, a wraca
z miejscowości B do A z prędkością v2. Obliczyć średnią prędkość
na całej trasie. Uwaga: Dane wejściowe będą tak dobrane,
aby wynik był liczba całkowitą.

Wejście
Na wejściu znajduje się dokładnie jedna liczba całkowita
t (1<=t<=1000) oznaczająca liczbę zestawów danych. W wierszach
od 2 do t+1 znajdują się dwie liczby całkowite oddzielone
spacja v1 oraz v2 (1<=v1,v2<=10000).

Wyjście
Wyjście składa się z t wierszy. W każdym wierszu powinna
znaleźć się dokładnie jedna liczba całkowita oznaczająca
średnią prędkość.

Przykład

Wejście:
2
50 50
60 40

Wyjście:
50
48


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t, V1, V2;
    scanf("%d", &t);
    while(t != 0)
    {
        scanf("%d %d",&V1,&V2);
        printf("%d\n",2*V1*V2/(V1+V2));
        --t;
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int t, V1, V2;
    cin>>t;
    while(t != 0)
    {
        cin>>V1>>V2;
        cout<<2*V1*V2/(V1+V2)<<endl;
        --t;
    }
    return 0;
}


Źródło:
http://pl.spoj.com/problems/VSR/

środa, 25 października 2017

00007 - 606 - Tablice - www.pl.spoj.com

Treść zadania:

Odwróć kolejność elementów w tablicy.

Wejście
Najpierw liczba testów t (t ≤ 100). Następnie dla każdego
testu liczba n (n ≤ 100) i n liczb oddzielonych spacjami.

Wyjście
Dla każdego testu n liczb w porządku odwrotnym niż na wejściu.

Przykład

Wejście:
2
7 1 2 3 4 5 6 7
3 3 2 11

Wyjście:
7 6 5 4 3 2 1
11 2 3


Kod źródłowy w C++:
#include <iostream>
#include <vector>
#include <cstdio>

using namespace std;

int main()
{
int t, y, temp;
vector <int> numbers;
scanf("%d",&t);
for (int i=0; i<t; i++)
{
    scanf("%d",&y);
    for (int j=0; j<y; j++)
    {
        scanf("%d",&temp);
        numbers.push_back(temp);
    }
    for (int k=numbers.size()-1; k<=numbers.size(); k--)
    {
        printf("%d ",numbers[k]);
    }
    numbers.clear();
    puts("");
}
    return 0;
}


Kod źródłowy w Python 2:
a = int(raw_input(''))
for i in range(0, a, +1):
 s = result = ''
 l = []
 s = str(raw_input(''))
 l = s.split(' ')
 l3 = list(l)
 l3.remove(l3[0])
 l3.reverse()
 for j in range(0, len(l3), +1):
  if j < len(l3)-1:
   result += str(l3[j]) + " "
  else:
   result += str(l3[j])
 print result


Kod źródłowy w Python 3:
a = int(input(''))
for i in range(0, a, +1):
 s = result = ''
 l = []
 s = str(input(''))
 l = s.split(' ')
 l3 = list(l)
 l3.remove(l3[0])
 l3.reverse()
 for j in range(0, len(l3), +1):
  if j < len(l3)-1:
   result += str(l3[j]) + " "
  else:
   result += str(l3[j])
 print (result)


Źródło: http://pl.spoj.com/problems/PP0502B/