10038 — Jolly Jumpers
Въвеждане
Всеки ред на въвеждане съдържа цяло число n ≤ 3000, последвано от n цели числа, представляващи последователността.
Изход
За всеки входен ред генерирайте изходен ред, казващ „Jolly“ или „Не е весело“.
Примерно въвеждане
4 1 4 2 3
5 1 4 2 -1 6
Примерен резултат
Весел
Не е весел

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 10038 - Jolly Jumpers
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
using namespace std;
int main()
{
    int n; // how many numbers
    while (cin >> n){
        int s[3005], t[3005]={0}; // series[] and test series
        bool ok = 1; // check Jolly or not
        
        cin >> s[0]; // initialize seriers[0]
        for (int i=1; i<n; i++){
            cin >> s[i]; // input series
            int temp = abs(s[i]-s[i-1]); // compare series
            if(temp <= 3000) t[temp]++; // input compare series
        }
        
        for (int i=1; i<n ;i++){ // check 1~n-1 in test[]
            if(t[i]==0){ // if there miss one in test[]
                ok = 0; // not jolly
                break;
            }
        }
        
        if(ok)
            cout << "Jolly" << endl;
        else
            cout << "Not Jolly" << endl;
    }
    
    return 0;
}

10056 — Каква е вероятността?
Вход
Входът ще съдържа цяло число S (S ≤ 1000) на първо място, което показва колко набора от входове има. Следващите S реда ще съдържат S набора входове. Всеки ред съдържа цяло число N (N ≤ 1000), което обозначава
броя играчи, число с плаваща запетая p, което показва вероятността за случване на успешно събитие при едно хвърляне (Ако успехът означава получаване на 3, тогава p е вероятността да получите 3 при
едно хвърляне. За нормален зар вероятността да получите 3 е 1/6, а I (I ≤ N) серията на играча, чиято вероятност за победа трябва да се определи (серия не варира от 1 до N). Можете да предположите,
че няма да бъде дадена невалидна стойност на вероятността § като вход.
Изход
За всеки набор от вход, изход в един ред вероятността I-ят играч да спечели. Изходното число с плаваща запетая винаги ще има четири цифри след десетичната запетая, както е показано в примерния изход.
Примерно въвеждане
2
2 0,166666 1
2 0,166666 2
Примерен резултат
0,5455
0,4545

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 10056 - What is the Probability ?
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
/*
 設p = 獲勝的機率, q = 沒有獲勝的機率 = 1 - p, n = 總共的玩家數, x = 第幾個玩家要贏
 算式就是這樣:
 
 p * q ^ (x - 1) + p * q ^ (n + x - 1) + p * q ^ (2 * n + x - 1)...
 
 接下來我們可以把 p * q ^ (x - 1)提出來:
 
 ( p * q ^ (x - 1) ) * ( 1 + q ^ n + q ^ (2 * n)... )
 
 1 + q ^ n + q ^ (2 * n)...很明顯是個無窮等比級數,所以利用無窮等比級數公式代掉後,會變成以下式子:
 
 ( p * q ^ (x - 1) ) * ( 1 / (1 - q ^ n) )
 
 整理一下:
 
 ( p * q ^ (x - 1) ) / (1 - q ^ n)
 */
#include <iostream>
#include <cmath> // pow()
#include <iomanip> // fixed, setprecision
using namespace std;
int main()
{
    int caseNum; // case number
    cin >> caseNum; // input case number
    while(caseNum--){
        int n, x; // n: number of player, x: which player to win.
        double p, q, ans; // p: probability to win, q: probability to lose
        
        cin >> n >> p >> x; // input
        q = 1 - p; // lose probability
        if(q == 1) // can't win
            cout << "0.0000" << endl;
        else {
            ans = pow(q, x-1)*p/(1-pow(q,n)); // formula
            cout << fixed << setprecision(4) << ans << endl; // output
        }
    }
    return 0;
}

10170 — Хотелът с безкрайни стаи
Вход
Входът съдържа кръгли числата S (1 ≤ S ≤ 10000) и D (1 ≤ D ‹ 1015) във всеки ред. S означава първоначалния размер на групата, а D означава, че ще трябва да намерите размера на групата, отседнала в хотела на D-тия ден (започвайки от 1). Всички входни и изходни цели числа ще бъдат по-малки от 1015. Размерът на групата S означава, че на първия ден група от S членове идват в хотела и остават за S дни, след което идва група от S + 1 членове според описаното по-горе правила и т.н.
Изход
За всеки входен ред отпечатайте на един ред размера на групата, отседнала в хотела на D-ти ден.
Примерно въвеждане
1 6
3 10
3 14
Примерен резултат
3
5
6

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 10170 - The Hotel with Infinite Rooms
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
/*
 1. first = 1, day = 6
 1ppl 1
 2ppl 2 3
 3ppl 4 5 6
 
 2. first = 3, day = 10
 3ppl 1 2 3
 4ppl 4 5 6 7
 5ppl 8 9 10 11 12
*/
#include <iostream>
using namespace std;
int main()
{
    long long int first, day; // initial
    while(cin >> first >> day){ // input
        while((day - first)>=0) {
            day = day - first; // remain day
            if(day !=0)
                first++; // add people
        }
        cout << first << endl; // output
    }
    return 0;
}

10268–498-bis
Въвеждане
Вашата програма трябва да приема четен брой редове текст. Всяка двойка линии ще представлява един проблем. Първият ред ще съдържа едно цяло число — стойност за x. Вторият ред ще съдържа списък с цели числа a0, a1, …, an−1, an, които представляват набор от коефициенти на полином. Входът завършва с ¡EOF¿.
Изход
За всяка двойка редове вашата програма трябва да оцени производната на полином за дадената стойност x и го изведете в един ред.
Примерно въвеждане
7
1 -1
2
1 1 1
Примерен резултат
1
5

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 10268 - 498-bis
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.

#include <iostream>
using namespace std;
int main()
{
    long long int x, sum; // initial x and sum up
    int a[1000000]; // array for input
    while (cin >> x){ // input x value
        int count; // count how many integer inside.
        for(count=0;;count++){
            cin >> a[count]; // input data to a[]
            if(getchar()=='\n') // stop at '\n'
                break;
        }
        sum = 0; // initial value to 0
        int exp = 1; // initial exponential value to 1
        for(int i = count-1 ; i>=0; i--){
            sum += a[i]*exp*(count-i); // a[last digit]*1*1+a[last digit-1]*x*2+a[last digit-2]*x*x*3...
            exp*=x; // for 1, x, x^2, x^3, x^4
        }
        cout << sum << endl; // output answer
    }
    return 0;
}

10783 — Нечетна сума
Вход
Може да има няколко теста . Първият ред на въвеждане ви дава броя на тестовите случаи, T (1 ≤ T ≤ 100). След това следват T тестови случая. Всеки тестов случай се състои от 2 цели числа a и b (0 ≤ a ≤ b ≤ 100) в два отделни реда.
Изход
За всеки тест случай трябва да отпечатате един ред изход — серийният номер на тестовия случай, последван от сумата на нечетните цели числа в диапазона [a, b].
Примерен вход
2
1
5
3
5
Примерен резултат< br /> Случай 1: 9
Случай 2: 8

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 10783 - Odd Sum
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.

#include <iostream>
using namespace std;
int main()
{
    int cases, a, b, sum; // how many cases
    cin >> cases; // input cases
    for (int i=0; i<cases; i++){ // for loop for how many cases
        cin >> a >> b; // input a and b
        if(a==b and a%2==0) // if a = b and there were even then output 0
            sum = 0;
        else{
            if (a%2 == 0) // because a <= b if a is even then move forward b.
                a++;
            if (b%2 == 0) // because a <= b if b is even then move forward a.
                b--;
            if(a>b){ // if a++ and b-- then swap
                int tmp;
                tmp = a;
                a = b;
                b = tmp;
            }
            sum = 0; // initial answer
            for (int i=a; i<=b; i=i+2) // sum up from a to b
                sum += i;
        }
        cout << "Case " << i+1 << ": " << sum << endl;
    }
    return 0;
}

10812 — Beat the Spread!
Въвеждане
Първият ред на въвеждане съдържа n, броя на тестовите случаи. Следват n реда, всеки от които представлява тестов случай. Всеки тест дава s и d, неотрицателни цели числа, представляващи сумата и (абсолютната) разлика между двата крайни резултата.
Изход
За всеки тестов случай, извежда ред, даващ двата крайни резултата, най-големият първи. Ако няма такива резултати,
изведете ред, съдържащ „невъзможно“. Спомнете си, че футболните резултати винаги са неотрицателни цели числа.
Примерно въвеждане
2
40 20
20 40
Примерен резултат
30 10
невъзможно

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 10812 - Beat the Spread!
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n; // input how many data.
    for (int i=0; i < n; i++){
        int a, b, scoreA, scoreB; // initial variable
        cin >> a >> b;
        scoreA = (a+b)/2;
        scoreB = (a-b)/2;
        if (scoreA < scoreB) { // swap if scoreB > scoreA
            int tmp;
            tmp = scoreA;
            scoreA = scoreB;
            scoreB = tmp;
        }
        if(scoreA < 0 or scoreB < 0 or (a+b)%2==1 or (a-b)%2==1) // impossible if scoreA,B < 0 or a+b are odds.
            cout << "impossible";
        else{
            cout << scoreA << " " << scoreB;
        }
    }
    return 0;
}

11349 — Симетрична матрица
Вход
Първият ред на входа съдържа броя тестови случаи T ≤ 300. Тогава T тестови случая следват всеки описан по следния начин. Първият ред на всеки тест съдържа n — размерността на квадратната матрица. След това n реда следват всеки от тогава съдържащите ред i. Редът съдържа точно n елемента, разделени с интервал. j-то число в ред i е елементът Mij от матрицата, който трябва да обработите.
Изход
За всеки тестов случай изведете един ред 'Test #t: S'. Където t е тестовото число, започващо от 1. Редът S е равен на „Симетричен“, ако матрицата е симетрична и „Несиметричен“ във всеки друг случай.
Примерен вход
2
N = 3
5 1 3
2 0 2
3 1 5
N = 3
5 1 3
2 0 2
0 1 5
Примерен резултат
Тест №1: Симетричен.
Тест № 2: Несиметричен.

//  Author: Sian Jyun, Kuo
//  Date: Sep.17.2019
//  Purpose: 11349 - Symmetric Matrix
//
//  Created by Sian Jyun Kuo on 2019/9/17.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
using namespace std;
int main()
{
    long long n[101][101]; // initial matrix
    int T, N; // T: cases, N: NxN matrix
    cin >> T;
    for(int i=1; i<=T; i++){
        cin.ignore(4); // ignore "N = "
        cin >> N; // input N
        for (int i= 0; i<N;i++){ // input n[][] matrix
            for(int j=0; j<N; j++){
                cin >> n[i][j];
            }
        }
        int flag = 1; // flag for true or false
        for (int i= 0; i<N;i++){
            for(int j=0; j<N; j++){
                if (n[i][j] < 0 or n[i][j] != n[N-1-i][N-1-j]){ // must n[][] >=0 and compare matrix
                    flag = 0; // false
                    break;
                }
            }
            if(!flag) break;
        }
        cout << "Test #" << i << ": "; // output
        if(flag)
            cout << "Symmetric." << endl; // true >> symmetric
        else
            cout << "Non-symmetric." << endl; // false >> non-symmetric
    }
    return 0;
}