10226 — Породы твердой древесины
Ввод
Первая строка — количество тестовые примеры, за которыми следует пустая строка. Каждый тестовый пример вашей программы состоит из списка видов каждого дерева, наблюдаемого спутником; одно дерево в строке. Название вида не превышает 30 символов. Насчитывается не более 10 000 видов и не более 1 000 000 деревьев. Между каждыми последовательными тестовыми наборами есть пустая строка.
Выходные данные
Для каждого тестового примера выведите название каждого вида, представленного в популяции, в в алфавитном порядке, за которым следует процент населения, которое он представляет, до 4 знаков после запятой. Выведите пустую строку между двумя последовательными тестовыми наборами.
Образец ввода
1
Красная ольха
Ясень
Осина
Липа
Ясень
Бук
Желтая береза
Ясень
Вишня
Тополь
Ясень
Кипарис
Красный вяз
Эвкалипт
Каркас
Белый дуб
Гикори
Пекан
Твердый клен
Белый дуб
Мягкий клен
Красный дуб
Красный дуб
Белый дуб
Поплан
Сассафрас
Платан
Черный орех
Ива
Выход образца
Ясень 13.7931
Осина 3.4483
Липа 3.4483
Бук 3.4483
Черный орех 3.4483
Вишня 3.4483
Тополь 3.4483
Кипарис 3.4483
Эвкалипт 3.4483
Каркас 3.4483
Клен твердый 3.4483
Гикори 3.4483
Пекан 3.4483
Поплан 3.4483
> Красная ольха 3.4483
Красный вяз 3.4483
Красный дуб 6.8966
Сассафрас 3.4483
Мягкий клен 3.4483
Платан 3.4483
Белый Дуб 10.3448
Ива 3.4483
Береза ​​желтая 3.4483

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 10226 - Hardwood Species
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
#include <iomanip> // fixed, setprecision
#include <map> // map<>, map<>iterator
using namespace std;
map <string, int> tree; // map
map <string, int>::iterator it; // iterator it
int main()
{
    string line, name;
    int n;
    cin >> n; // input test cases
    getline(cin, line); // get off line.
    getline(cin, line);
    while(n--){
        int count = 0; // initialize count
        tree.clear(); // clear tree.
        while(!cin.eof()){ // while not end of file
            getline(cin,name); // get name
            if(name[0]=='\0') // if name = \0 >> stop
                break;
            count++; // add count
            it=tree.find(name);
            if(it==tree.end()){ // can't find name >> 1
                tree[name]=1;
            }else{
                tree[name]++;
            }
        }
        for(it=tree.begin(); it!=tree.end();it++){
            float per = 100.0*it->second/count; // calculate percentage.
            cout << fixed << setprecision(4) << it->first << " "<< per << endl; // output data.
        }
        cout << endl;
    }
    return 0;
}

Напоминаем: функция карты

10189 — Сапер
Ввод
Ввод будет состоять из произвольного числа полей. Первая строка каждого поля содержит два целых числа n и m (0 ‹ n, m ≤ 100) — количество строк и столбцов поля соответственно. Следующие n строк содержат ровно m символов и представляют поле. Каждый безопасный квадрат представлен символом . (без кавычек), а каждый мой квадрат представлен символом (также без кавычек). Первая строка поля, где n = m = 0, представляет собой конец ввода и не должна обрабатываться.
Вывод
Для каждого поля вы должны напечатать следующее сообщение в строке только:
Поле #x: Где x обозначает номер поля (начиная с 1). В следующих n строках должно быть поле, в котором символы . заменены на количество мин, примыкающих к этому квадрату. Между выводами поля должна быть пустая строка.
Образец ввода
4 4


.…

3 5
**…

.

0 0
Пример вывода
Поле №1:
100
2210
1
10
1110
Поле №2:
**100
33200
1*100

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 10189 - Minesweeper
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
using namespace std;
char line[101][101]; // cin by line
int ans[101][101]; // count and record answer
int n,m; // line and column
int field = 0; // count field
// input function
void input(int n, int m){
    for (int i=0; i<n; i++){
        cin >> line[i]; // input by line.
        for (int j=0; j<m;j++){
            ans[i][j]=0; // reset ans[][]
        }
    }
}
// add up when met mines
void addMine(int i, int j){
    for (int ii=i-1; ii<=i+1; ii++){
        for (int jj = j-1; jj<=j+1; jj++){
            if (ii<0 or jj<0 or ii>n or jj>m)
                continue;
            ans[ii][jj]++;
        }
    }
}
// output function
void output(int n, int m) {
    for (int i=0; i<n; i++){
        for (int j=0; j<m; j++){
            if(line[i][j]=='*') // call addMine function when met mines
                addMine(i, j);
        }
    }
    // output field
    if(field >=1 ) cout << endl;
    cout << "Field #" << field << ":" << endl;
    // output answer
    for (int i=0; i<n; i++){
        for (int j=0; j<m; j++){
            if(line[i][j]=='*')
                cout << "*";
            else
                cout << ans[i][j];
        }
        cout << endl;
    }
}
int main()
{
    while(cin >> n >> m){
        if(n==0 and m==0) break; // stop when 0 0
        input(n, m);
        field++;
        output(n, m);
    }
    return 0;
}

10409 — Die Game
Ввод
Ввод состоит из одного или нескольких последовательности команд, каждая из которых соответствует одной игре. Первая строка последовательности команд содержит положительное целое число, представляющее количество следующих командных строк в последовательности. Вы можете предположить, что это число меньше или равно 1024. Строка, содержащая ноль, указывает на конец ввода. Каждая командная строка включает команду север, восток, юг и запад. Вы можете предположить, что ни в одной строке нет пробелов.
Вывод
Для каждой последовательности команд выведите одну строку, содержащую только число вверху лицо в момент завершения игры.
Образец ввода
1
север
3
север
восток
юг
0
Пример вывода
5
1

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 10409 - Die Game
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
using namespace std;
int main()
{
    int N; // numbers of command lines
    string move; // record which command
    int tmp, up, down, n, s, w, e; // record dice
    while(cin >> N and N!=0){ // input command numbers
        // reset dice faces.
        up = 1; n = 2; w = 3; e = 4; s = 5; down = 6;
        // input
        for (int i=0; i<N;i++){
            cin >> move; // input command
            // change when met certain condition.
            if (move == "north"){
                tmp = up; up = s; s = down; down = n; n = tmp;
            }
            if (move == "south"){
                tmp = up; up = n; n = down; down = s; s = tmp;
            }
            if (move == "east"){
                tmp = w; w = down; down = e; e = up; up = tmp;
            }
            if (move=="west"){
                tmp = w; w = up; up = e; e = down; down = tmp;
            }
        }
        // output data.
        cout << up << endl;
    }
    return 0;
}

10415 — Eb Alto Saxophone Player
Ввод
Первая строка ввод представляет собой одно целое число t (1 ≤ t ≤ 1000), указывающее количество тестовых случаев. Для каждого случая есть только одна строка, содержащая песню. Единственными допустимыми символами являются {'c','d','e','f','g','a','b','C','D','E','F', Г, А, Б}. В песне не более 200 нот, и песня может быть пустой.
Выходные данные
Для каждого теста выведите 10 чисел, обозначающих число нажатий для каждого пальца. Числа разделяются одним пробелом.
Образец ввода
3
cdefgab
BAGFEDC
CbCaDCbCbCCbCbabCCbCbabae
Вывод образца
0 1 1 1 0 0 1 1 1 1
1 1 1 1 0 0 1 1 1 0
1 8 10 2 0 0 2 2 1 0

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 10415 - Eb Alto Saxophone Player
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int t; // number of tests
    char note[]="XcdefgabCDEFGAB";
    char finger[16][11]= {
        "0000000000", "0111001111", "0111001110", "0111001100", "0111001000", "0111000000", "0110000000", "0100000000", "0010000000", "1111001110", "1111001100", "1111001000", "1111000000", "1110000000", "1100000000"};
    cin >> t;
    cin.ignore(); // ignore for recognize as getline.
    while(t--){
        int ans[10] = {0}; // initialize answer
        char read[201];
        cin.getline(read, 201); // intput request
        int length = (int)strlen(read); // get length
        int current = 0, next; // initialize current and next.
        
        for(int i=0; i< length; i++){ //for loop for whole line in read
    
            for(next=1; note[next]!=read[i]; next++); // find out which note number, next = note number
            
            for (int j=0; j<10 ; j++){ // mark ans when change finger.
                if (finger[current][j]=='0' and finger[next][j]=='1')
                    ans[j]++;
            }
            
            current=next; // push forward
        }
        // Output
        for (int i=0; i<10; i++){
            cout << ans[i] << " ";
        }
        cout << endl;
    }
    return 0;
}

118 — Исследователи плоского мира-мутанты
Ввод
Первая строка ввода: верхние правые координаты прямоугольного мира, нижние левые координаты предполагаются равными 0,0. Остальные входные данные состоят из последовательности позиций робота и инструкций (две строки на робота).
Позиция состоит из двух целых чисел, определяющих начальные координаты робота и ориентацию (N,S,E,W), все разделены пробелом на одной строке. Инструкция робота — это последовательность букв L, R и F в одной строке. Каждый робот обрабатывается последовательно, т. е. заканчивает выполнение инструкций робота до того, как следующий робот начнет выполнение. Ввод завершается концом файла. Можно предположить, что все начальные позиции робота находятся в пределах заданной сетки. Максимальное значение для любой координаты – 50. Длина всех строк инструкций не должна превышать 100 символов.
Вывод
Для каждой позиции/инструкции робота. на входе выход должен указывать конечное положение сетки и ориентацию робота. Если робот падает за край сетки, после позиции и ориентации должно быть напечатано слово ПОТЕРЯН.
Образец ввода
5 3
1 1 E
RFRFRFRF
3 2 N
FRRFLLFFRRFLL
0 3 W
LLFFFLFLFL
Пример вывода
1 1 E
3 3 N ПОТЕРЯНО
2 3 S

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 118 - Mutant Flatworld Explorers
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
#include <cstring>
using namespace std;
// function for change direction
char findDir(char now, char cmd){
    switch(cmd){
        case 'R':
            switch(now){
                case 'N':
                    now = 'E';
                    break;
                case 'S':
                    now = 'W';
                    break;
                case 'W':
                    now = 'N';
                    break;
                case 'E':
                    now = 'S';
                    break;
            }
            break;
        case 'L':
            switch(now){
                case 'N':
                    now = 'W';
                    break;
                case 'S':
                    now = 'E';
                    break;
                case 'W':
                    now = 'S';
                    break;
                case 'E':
                    now = 'N';
                    break;
            }
            break;
    }
    return now;
}
int main()
{
    int edgeX, edgeY; // edge of the map
    cin >> edgeX >> edgeY;
    int x, y; // first position of the robot
    char dir; // direction of the robot
    char instruct[101];
   
    while(cin >> x >> y >> dir){ // input x, y, direction
        cin.ignore(); // prevent enter
        cin.getline(instruct, 101); // get input
        int length = (int)strlen(instruct); // get length of input
        bool lost=false; // initialize lost bool.
        
        for (int i=0; i<length; i++){ // check every word
            if(instruct[i]!='F'){
                dir = findDir(dir, instruct[i]);
            }else{
                if (dir=='N')
                    y=y+1;
                else if (dir=='S')
                    y=y-1;
                else if (dir=='W')
                    x=x-1;
                else if (dir=='E')
                    x=x+1;
                
                if(x>edgeX or y>edgeY or x<0 or y<0){ // out of range >> lost
                    lost=true;
                    if (dir=='N')
                        y=y-1;
                    else if (dir=='S')
                        y=y+1;
                    else if (dir=='W')
                        x=x+1;
                    else if (dir=='E')
                        x=x-1;
                    break;
                }
            }
        }
        // output
        cout << x << " " << y << " " << dir;
        if(lost) cout << " LOST";
        cout << endl;
    }
    return 0;
}

11150 — Cola
Ввод
Ввод состоит из нескольких строк, каждая из которых содержит целое число N (1 ≤ N ≤ 200).
Вывод
Для каждого случая ваша программа должна вывести максимальное количество бутылок колы, которое вы можете наслаждаться. Вы можете одолжить пустые бутылки у других, но если вы это сделаете, убедитесь, что у вас есть достаточно бутылок, чтобы впоследствии вернуть их. Примечание: употребление слишком большого количества колы вредно для здоровья, поэтому… не пытайтесь повторить это дома! :-)
Пример ввода
8
Пример вывода
12

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 11150 - Cola
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
using namespace std;
int main()
{
    int N;
    while(cin >> N){
        int ans=0, plus=0;
        ans = N;
        while(N>=3){
            plus = N%3;
            N=N/3;
            ans += N;
            N+=plus;
        }
        if(N==2) // if remain 2 borrow one from friend and give it back.
            ans++;
        
        cout << ans << endl;
    }
    return 0;
}

11321 — Сортировать! Сортировать!! и Сортировка!!!
Входные данные
Входной файл содержит 20 наборов входных данных. Каждый набор начинается с двух целых чисел N (0 ‹ N ≤ 10000) и M (0 ‹ M ≤ 10000), обозначающих количество чисел в этом наборе. Каждая из следующих N строк содержит по одному числу. Все эти числа должны соответствовать 32-битному целому числу со знаком. Ввод завершается строкой, содержащей два нуля.
Вывод
Для каждого набора входных данных создайте N + 1 строк выходных данных. Первая строка каждого набора содержит значения N и M. Следующие N строк содержат N чисел, отсортированных по упомянутым выше правилам. Печатать
последние два нуля входного файла также в выходной файл.
Образец ввода
15 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0 0
Вывод образца
15 3
15
9
3
6
12
13
7
1
4
10
11
5
2
8
14
0 0

//  Author: Sian Jyun, Kuo
//  Date: Sep.21.2019
//  Purpose: 11321 - Sort! Sort!! and Sort!!!
//
//  Created by Sian Jyun, Kuo on 2019/9/21.
//  Copyright © 2019 Sian Jyun Kuo. All rights reserved.
#include <iostream>
#include <algorithm> // sort
using namespace std;
int M,N;
// cmp for sort
bool cmp(int x, int y){
    int xOdd=abs(x%2);
    int yOdd=abs(y%2);
    if (x%M!=y%M) return x%M < y%M; // N numbers in ascending order of their modulo M value.
    else if (xOdd!=yOdd) return xOdd > yOdd; /* If there is a tie
    between an odd number and an even number (that is their modulo M value is the same) then the odd
    number will precede the even number.*/
    else if(xOdd==1) return x>y; /* If there is a tie between two odd numbers (that is their modulo
M value is the same) then the larger odd number will precede the smaller odd number*/
    else return x<y; /* if there is a tie between two even numbers (that is their modulo M value is the same) then the smaller even number will precede the larger even number.*/
}
int main()
{
    int a[10005];
    while(cin >> N >> M){
        if(M==0 and N==0) break; // 0 0 break
        for (int i=0; i<N;i++) // input
            cin >> a[i];
        sort(a, a+N, cmp); // sort with cmp
        
        cout << N << " " << M; // output N M
        for(int i=0; i<N;i++) // output a[i]
            cout << a[i] << endl;
        
        cout << "0 0";
    }
    return 0;
}