511 - I2P2013 Scoreboard

Time

2014/01/08 18:30:00 2014/01/08 18:30:10

Clarification

# Problem Asker Description Reply Replier Reply Time For all team

5501 - I2P_LAB01_1   

Description

雞、兔共有a隻腳,若雞與兔的頭數互換,則共有b隻腳,請問雞、兔原各有多少頭?

Hint:

#include 

int main(void)
{
    int a, b;  /* input */
    int x, y;  /* x:雞的個數  y:兔的個數 */
    
    /* ??? */

    printf("%d %d", x, y);

    return 0;
}

Input

正整數a, b

Output

 雞的個數、兔的個數 (注意順序)

Sample Input  Download

Sample Output  Download

Tags




Discuss




5506 - I2P_LAB02_1   

Description

給定正整數A

B為A的所有位數往右移, 並且第一位為A之最後一位

(e.g. A = 1234, B = 4123)

求A+B

Input

A的位數

12位(含)以內的正整數A

Output

A+B

Sample Input  Download

Sample Output  Download

Tags




Discuss




5510 - I2P_LAB02_2   

Description

給定一個位數最少為3, 最多為12的正整數X

取其最小三位數為Y

並將Y的位數順序反轉為Z

求Y+Z

並將結果的數字0~9輸出成對應的英文A~J

(0->A, 1->B, 2->C, ..., 9->J)

 

E.g.

X = 1234

Y = 234

Z = 432

Y+Z = 666

輸出: AGGG

 

註: 結果請輸出成4位數, 位數不足則補0

Input

 一個位數最少為3, 最多為12的正整數X

Output

 (Y+Z)所對應的4個英文字母

Sample Input  Download

Sample Output  Download

Tags




Discuss




5514 - I2P_LAB03_1   

Description

已知費氏數列的定義為:

F0 = 0

F1 = 1

Fn = Fn-1 + Fn-2 , for n >1

 

給定一非負整數n

請印出Fn為多少

Input

一非負整數n, n<40

Output

Fn

Sample Input  Download

Sample Output  Download

Tags




Discuss




5518 - I2P_LAB03_2   

Description

已知某數列的定義為:

給定F0、F1

Fn = (Fn+1 - Fn-1) / 2, for n > 1

 

給定一小於20的非負整數n

請印出Fn為多少

Input

F0  F1

n

 

n為一小於 20的非負整數

F0、F1為介於-20~20的整數

Output

Fn

 

Fn為一介於-231~231-1的整數

Sample Input  Download

Sample Output  Download

Tags




Discuss




5522 - I2P_LAB04_1   

Description

已知帕斯卡三角形中,第n列的第k個元素為

C(n, k) = 1,  for k = 0 or k = n

C(n, k) = C(n-1, k-1) + C(n-1, k),  for 0 < k < n

(對於每一個第n列,k的範圍為0~n)

 

給定某非負整數n

請從帕斯卡三角形的第n列依序印到第0列

在每個數字的後面加上空白,並在每列的最後加上換行

Input

小於等於30的非負整數n

Output

從帕斯卡三角形的第n列依序印到第0列

 

註: 三角形中的任一元素均不會超過231-1

Sample Input  Download

Sample Output  Download

Tags




Discuss




5526 - I2P_LAB04_2   

Description

已知兩矩陣A、B相乘規則如下:

若C = A x B

C(i, j) = Σ A(i, k) x B(k, j), for all pairs (i, j) in C

 

A為M1 x N1的矩陣

B為M2 x N2的矩陣

其中N1 = M2

請輸出A x B的結果

 

hint:

需要三層for迴圈

 

Input

M1 N1

A矩陣

M2 N2

B矩陣

 

矩陣內的元素均為-231~231-1的整數

M1、N1、M2、N2均為小於等於10的正整數

Output

A x B

 

請在每個數字的後面加上空白,並在每列的最後加上換行

矩陣內的元素均為-231~231-1的整數

Sample Input  Download

Sample Output  Download

Tags




Discuss




5530 - I2P_LAB05_1   

Description

請完成車子吃寶物的遊戲, 其中

map 是一個二維陣列
用來表示地圖的內容
map_reset() 的作用是清除地圖內容以及重設邊界
map_show() 則是把 map 的內容顯示到螢幕上

blocks 也是二維陣列
記錄磚牆的位置
會透過 blocks_read() 從input 中讀取位置資訊
然後用 blocks_put_on_map() 在地圖 map 裡面的對應位置放置磚牆
磚牆是固定的
車子前進時如果遇到磚牆會被擋住

jewels 二維陣列記錄寶物的位置
會藉由 jewels_read() 從檔案 input 中讀取位置資訊
然後用 jewels_put_on_map() 在地圖 map 裡面的對應位置放置寶物
車子只要碰到寶物就會撿起來 (包含寶物一開始就在車子下)

car 二維陣列記錄車子的外觀 @ @ 表示車頭方向
車子的起始位置是row: 3, column: 4 (車子最左上角的座標)
用來記錄車子目前位置的變數是 car_row 和 car_col
車子的方向則是由 car_direction 表示
我們可以用 0, 1, 2, 3 來分別代表車子朝向 右、下、左、上
所以如果 car_direction 的值等於 2 表示車子目前朝左
遊戲一開始是初始成朝上
car_earnings 則是記錄撿到的寶物數量

需要自行完成的函數是
car_rotate90() 和 car_move()
car_rotate90() 要將 car 二維陣列順時鐘旋轉 90 度
並且更新 car_direction 的值 讓它符合目前方向

car_move() 則要將 car 依照目前方向
向前移動一格
在移動之前必須先判斷是否會被磚牆擋住
不能超出 map 原本的外牆
移動之後
要將碰到的寶物撿起來 (撿走之後就沒了 不能重複撿)

車子的移動是根據input的指示
只有兩種動作
'R' 代表順時鐘旋轉九十度
'F' 代表前進一格
做完全部的動作之後
最後要輸出車子目前的狀態

#include 
#define MAP_SIZE 12
#define CAR_SIZE 3

int map[MAP_SIZE][MAP_SIZE];
void map_reset(void);
void map_show(void);

int blocks[MAP_SIZE][MAP_SIZE];
void blocks_read(void);
void blocks_put_on_map(void);

int jewels[MAP_SIZE][MAP_SIZE];
void jewels_read(void);
void jewels_put_on_map(void);

int car[CAR_SIZE][CAR_SIZE] = {{'@', 'O', '@'}, {'O', 'O', 'O'}, {'O', 'O', 'O'}};
int car_row = 3, car_col = 4;
int car_direction = 3;
int car_earnings;
void car_rotate90(void);
void car_put_on_map(void);
void car_move(void);

int main(void)
{
    int ch;

    jewels_read();
    blocks_read();
    

    while ((ch=getchar()) != EOF) {
        if (ch=='R') {
            car_rotate90();
        }
        if (ch=='F') {
            car_move();
        }

        map_reset();
        jewels_put_on_map();
        blocks_put_on_map();
        car_put_on_map();
        /*可以利用map_show()把目前狀態印出來, 但上傳時記得拿掉*/
        /*map_show();*/
    }


    printf("%d\n", car_earnings);
    printf("%d %d\n", car_row, car_col);
    char dirs[] = "RDLU";
    printf("%c\n", dirs[car_direction]);

    return 0;
}
void blocks_read(void)
{
    int n, i;
    int row, col;
    scanf("%d", &n);
    for (i=0; i 
  

Input

jewels個數

jewels位置

blocks個數

blocks位置

車子移動動作的序列

Output

最終得分

車子最終位置

車子最終方向

Sample Input  Download

Sample Output  Download

Tags




Discuss




5534 - I2P_LAB05_2   

Description

請完成車子吃寶物的遊戲, 其中

map 是一個二維陣列
用來表示地圖的內容
地圖的大小為12x12
map_reset() 的作用是清除地圖內容以及重設邊界
map_show() 則是把 map 的內容顯示到螢幕上

blocks 也是二維陣列
記錄磚牆的位置
會透過 blocks_read() 從input 中讀取位置資訊
然後用 blocks_put_on_map() 在地圖 map 裡面的對應位置放置磚牆
磚牆是固定的
車子前進時如果遇到磚牆會被擋住

jewels 二維陣列記錄寶物的位置
會藉由 jewels_read() 從檔案 input 中讀取位置資訊
然後用 jewels_put_on_map() 在地圖 map 裡面的對應位置放置寶物
車子只要碰到寶物就會撿起來 (包含寶物一開始就在車子下)

car 二維陣列記錄車子的外觀 @ @ 表示車頭方向
車子的大小為4x4
車子的起始位置是row: 3, column: 4 (車子最左上角的座標)
用來記錄車子目前位置的變數是 car_row 和 car_col
車子的方向則是由 car_direction 表示
我們可以用 0, 1, 2, 3 來分別代表車子朝向 右、下、左、上
所以如果 car_direction 的值等於 2 表示車子目前朝左
遊戲一開始是初始成朝上
car_earnings 則是記錄撿到的寶物數量

需要自行完成的函數是
car_rotate90() 和 car_move()
car_rotate90() 要將 car 二維陣列逆時鐘旋轉 90 度
並且更新 car_direction 的值 讓它符合目前方向

car_move() 則要將 car 依照目前方向
向前移動一格
在移動之前必須先判斷是否會被磚牆擋住
不能超出 map 原本的外牆
移動之後
要將碰到的寶物撿起來 (撿走之後就沒了 不能重複撿)

車子的移動是根據input的指示
只有兩種動作
'L' 代表逆時鐘旋轉九十度
'F' 代表前進一格
做完全部的動作之後
最後要輸出車子目前的狀態

#include 
#define MAP_SIZE 12
#define CAR_SIZE 4

int map[MAP_SIZE][MAP_SIZE];
void map_reset(void);
void map_show(void);

int blocks[MAP_SIZE][MAP_SIZE];
void blocks_read(void);
void blocks_put_on_map(void);

int jewels[MAP_SIZE][MAP_SIZE];
void jewels_read(void);
void jewels_put_on_map(void);

int car[CAR_SIZE][CAR_SIZE] = {{'@', 'O', 'O', '@'}, {'O', 'O', 'O', 'O'}, {'O', 'O', 'O', 'O'}, {'O', 'O', 'O', 'O'}};
int car_row = 3, car_col = 4;
int car_direction = 3;
int car_earnings;
void car_rotate90(void);
void car_put_on_map(void);
void car_move(void);

int main(void)
{
    int ch;

    jewels_read();
    blocks_read();
    

    while ((ch=getchar()) != EOF) {
        if (ch=='L') {
            car_rotate90();
        }
        if (ch=='F') {
            car_move();
        }

        map_reset();
        jewels_put_on_map();
        blocks_put_on_map();
        car_put_on_map();
        /*可以利用map_show()把目前狀態印出來, 但上傳時記得拿掉*/
        /*map_show();*/
    }


    printf("%d\n", car_earnings);
    printf("%d %d\n", car_row, car_col);
    char dirs[] = "RDLU";
    printf("%c\n", dirs[car_direction]);
    return 0;
}
void blocks_read(void)
{
    int n, i;
    int row, col;
    scanf("%d", &n);
    for (i=0; i 
  

Input

jewels個數

jewels位置

blocks個數

blocks位置

車子移動動作的序列

Output

最終得分

車子最終位置

車子最終方向

Sample Input  Download

Sample Output  Download

Tags




Discuss




5538 - I2P_LAB06_1   

Description

輸入 3x3 二維陣列代表地圖,其中包含 1 和 9 以及 0,例如

1 0 0

0 0 0

9 0 0

 

從數字 1 的位置開始走,只能往右下左上(R,D,L,U)四個方向移動,目標是要走過每個位置,而且每個位置只能走過一次,直到走到 9 的位置為止

你的程式要輸出YES / NO,代表 1 是否能夠走到 9

 

hint:

1. 可以把 map 開大一點,int map[5][5]; 但是最好是先把內容填成 -1,讓外緣一圈邊界的值都是 -1,這樣可以區別 0 和 -1。此外走過之後的位置也要填上適當的整數值。

2. 建議可以嘗試隨機的方法,概念如下:

從 1 的位置開始,隨機選擇 4 個方向中任一個,如果可以走,就移到新的位置,並且在地圖上將該位置標記為 2,

然後繼續進行同樣的隨機動作,找尋可以標為 3 的位置。如果隨機選定的方向不能走 (超出地圖或是已經走過),

就在原來的位置重新再隨機挑選方向。

假如上述的隨機嘗試經過 10 次之後都失敗 (移動不了),就將全部的狀態還原,回到 1 的位置重新開始。

假如從 1 開始走,走到失敗之後重設為原始狀態,這樣的情況經歷了一百萬次還是走不到 9,就讓程式結束並且輸出 No.

 

底下是模擬丟骰子的程式碼:

#include 
#include 
int main(void)
{
    int i, x;
    for (i=0; i<100; i++) {
        x = rand()%6 + 1;
        printf("%3d", x);
    }
    return 0;
}

Input

N

地圖1

地圖2

...

地圖N

 

N代表有幾組地圖

Output

YES / NO

YES / NO

...

YES / NO

 

總共有N筆答案

每筆答案的後面請加上換行

並且注意字母全部為大寫

Sample Input  Download

Sample Output  Download

Tags




Discuss




5542 - I2P_LAB06_2   

Description

輸入 3x3 二維陣列代表地圖,其中包含 1 和 M 以及 0,例如

1 0 0

0 0 0

M 0 0

 

從數字 1 的位置開始走,只能往右下左上(R,D,L,U)四個方向移動,目標是要走過M個位置,而且每個位置只能走過一次,直到走到 M 為止

你的程式要輸出YES / NO,代表 1 是否能夠走到 M

 

hint:

1. 可以把 map 開大一點,int map[5][5]; 但是最好是先把內容填成 -1,讓外緣一圈邊界的值都是 -1,這樣可以區別 0 和 -1。此外走過之後的位置也要填上適當的整數值。

2. 建議可以嘗試隨機的方法,概念如下:

從 1 的位置開始,隨機選擇 4 個方向中任一個,如果可以走,就移到新的位置,並且在地圖上將該位置標記為 2,

然後繼續進行同樣的隨機動作,找尋可以標為 3 的位置。如果隨機選定的方向不能走 (超出地圖或是已經走過),

就在原來的位置重新再隨機挑選方向。

假如上述的隨機嘗試經過 10 次之後都失敗 (移動不了),就將全部的狀態還原,回到 1 的位置重新開始。

假如從 1 開始走,走到失敗之後重設為原始狀態,這樣的情況經歷了一百萬次還是走不到 M,就讓程式結束並且輸出 No.

 

底下是模擬丟骰子的程式碼:

#include 
#include 
int main(void)
{
    int i, x;
    for (i=0; i<100; i++) {
        x = rand()%6 + 1;
        printf("%3d", x);
    }
    return 0;
}

 

Input

N

M1

地圖1

M2

地圖2

...

MN

地圖N

 

N代表有幾組地圖

1 < Mi < 10, for i=1, 2, ..., N

Output

YES / NO

YES / NO

...

YES / NO

 

總共有N筆答案

每筆答案的後面請加上換行

並注意字母全部為大寫

Sample Input  Download

Sample Output  Download

Tags




Discuss




5546 - I2P_LAB07_1   

Description

N個皇后放在西洋棋棋盤上

棋盤中任何橫列、直行、以及斜線都只能有一個皇后

請修改範例程式

算出有幾種放置方式

若無解則答案為0

 

hint:

#include 
#define MAX 12

/* q[i] 記錄的是在第 i 列 (row) 出現的皇后,要擺在第幾行 (column) */ 
/* 譬如,q[] 的內容如果是 {2, 0, 3, 1},表示四個皇后分別放在棋盤的 (0,2), (1,0), (2,3), (3,1) 四個位置 */

int q[MAX] = {0};
int N;

void place(int row);
int valid(int row, int col);

int main(void)
{
    scanf("%d", &N);

    place(0);
    /* printf(???); */
 
    return 0;
}

/* 
判斷目前的狀況下,如果在 row, col 位置放入新的皇后
是否會和之前的皇后衝突
如果是合法的放置方式 return 1;
如果有衝突 return 0;
*/
int valid(int row, int col)
{
    int i;
    for (i=0; i<=row-1; i++) {
    /*
        if ( ??? )
            return 0; 
    */            
    }
    return 1;
}

void place(int row)
{
    int j;
    if (row == N) {
        /* ??? */
    } else {
        for (j=0; j 
  

Input

N

 

N為1~12的正整數

Output

有幾種擺法

(不須加換行)

Sample Input  Download

Sample Output  Download

Tags




Discuss




5550 - I2P_LAB08_1   

Description

把讀取到的資料儲存在整數陣列 data 裏面。 (不要排序,按照原始資料順序存放即可。)
撰寫程式找出陣列裏哪個區間的資料值的總和最小,然後輸出其總和。

例如:
資料是 {3, -5, -1, 10, -4, 5, -3},程式要輸出 -6,
因為總和最小的區間是從 index 1 到 index 2 (index 從 0 開始),也就是 -5 -1,這樣加起來是 -6 (=-5+-1)
而其他區間內的資料總和都大於 -6。譬如區間 [2, 3] 總和是 9 (=-1+10),區間 [0, 3] 總和為 7 (=3-5-1+10)。


Input

資料長度

資料序列

 

資料序列為整數型態且資料長度不超過100筆。

Output

輸出該陣列區間最小總和。

 

注意: 區間長度最小為1

e.g.

資料是 {-10, 1, 2, 3, 4}

要輸出-10,因為index 0~index 0也算一個區間

Sample Input  Download

Sample Output  Download

Tags




Discuss




5554 - I2P_LAB08_2   

Description

給定一些不同的整數

請將這些整數由小到大排序好

並依序輸出其 index

其中 index 為每個數字被讀進來時的順序

 

hint:

可以利用 Bubble sort 做排序。

主要的概念就是不斷地把陣列相鄰的元素拿來比較,如果大小順序不對,就用 swap 的方式把兩個元素交換。

就像水裡的泡泡浮上來的過程,比較大的數會不斷往後跑,因此最後整個陣列就會由小排到大。

Input

N

元素元素... 元素N

 

N為1~100的正整數

Output

index第1小的元素 index第2小的元素 ... index第N小的元素

 

注意: index 的範圍為 1~N

請在每個 indexi 的後面加上空白

最後不需加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5558 - I2P_LAB09_1   

Description

小智在火箭隊的地下基地裡遇到了迷宮.

迷宮裡每個 entry 上都有東南西北的方向, 表示要往哪個方向移動到下一個 entry.

那麼給定小智走進迷宮的起始位置, 小智走迷宮會有兩種狀況:

1. 跟著每個 entry 的方向走, 最後走出迷宮.

2. 跟著每個 entry 的方向走, 最後一直在裡面兜圈子.

 

假設小智站在迷宮北方選擇一個 column 走進迷宮,

請問小智最後有沒有走出迷宮?

如果有, 請印出小智走過 N 個 entry.

如果沒有, 請印出小智走過 A 個 entry 後踏入循環路線, 並印出循環路線的總長為 B 個 entry.

 

例如:

Grid1:  N為10

Grid2:  A為3, B為8

 

hint:

1. 假設讀進來 map 大小為 (row, col), 可以開一個大小為 (row+2, col+2) 的 map, 外面一圈填上 -1, 裡面放讀到的 map.
    這樣有助於判斷什麼時候走到地圖外 (走到 -1 就是走到原本的地圖外)

2. 可以印出地圖檢查自己每一步有沒有走對, 或檢查讀地圖有沒有讀對

3. 另外開一個 (row+2, col+2) 的 array 裡面都是 0, 當走到某個位置 (x, y) 就在 array 的 (x, y) 位置紀錄目前已經走過幾個 entry.
    這樣有助於判斷循環路線有多長, 因為只要遇到 array 裡不是 0 的地方就表示以下兩點皆成立:
        (1) 這個位置走過了
        (2) 這個位置是循環路線的起點, 把你現在走過的 entry 數減去這個位置的 entry 數能算出循環路線的長度

Input

Grid的row數  Grid的column數  小智從哪個column走進迷宮

迷宮

 

註: 迷宮大小不超過10x10,  最小為2x2

Output

N

A B

 

註: 最後不需加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5562 - I2P_LAB09_2   

Description

喵喵想抓在迷宮裡的皮卡丘.

迷宮裡每個 entry 上都有東南西北的方向, 表示要往哪個方向移動到下一個 entry.

那麼給定喵喵走進迷宮的起始位置, 喵喵走迷宮會有三種狀況:

跟著每個 entry 的方向走, 最後

1. 走出迷宮.

2. 一直在裡面兜圈子.

3. 找到皮卡丘.

 

假設喵喵站在迷宮北方選擇一個 column 走進迷宮,

請問喵喵最後有沒有抓到皮卡丘?

如果沒有抓到皮卡丘最後走出迷宮, 請印出喵喵走過 E 個 entry.

如果沒有抓到皮卡丘也沒能走出迷宮, 請印出喵喵走過 A 個 entry 後踏入循環路線, 並印出循環路線的總長為 B 個 entry.

如果抓到皮卡丘, 請印出喵喵找到皮卡丘之前走過 D 個 entry, 並且後面加上字串pika.

 

例如:

 

Map1:  E為10

Map2:  A為3, B為8

Map3:  D為10

 

hint:

1. 假設讀進來 map 大小為 (row, col), 可以開一個大小為 (row+2, col+2) 的 map, 外面一圈填上 -1, 裡面放讀到的 map.
    這樣有助於判斷什麼時候走到地圖外 (走到 -1 就是走到原本的地圖外)

2. 可以印出地圖檢查自己每一步有沒有走對, 或檢查讀地圖有沒有讀對

3. 另外開一個 (row+2, col+2) 的 array 裡面都是 0, 當走到某個位置 (x, y) 就在 array 的 (x, y) 位置紀錄目前已經走過幾個 entry.
    這樣有助於判斷循環路線有多長, 因為只要遇到 array 裡不是 0 的地方就表示以下兩點皆成立:
        (1) 這個位置走過了
        (2) 這個位置是循環路線的起點, 把你現在走過的 entry 數減去這個位置的 entry 數能算出循環路線的長度

Input

Map的row數  Map的column數  喵喵從哪個column走進迷宮

迷宮

 

註: 迷宮大小不超過10x10,  最小為2x2

      P 為皮卡丘的位置

Output

E

A B

D pika

 

註: 最後不需加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5566 - I2P_LAB10_1   

Description

給定一個大小為 N x N 的地圖

每個entry的內容為0或1

 

可以對地圖做以下三種指令

L: 逆時針旋轉90度

R: 順時針旋轉90度

U: 放大兩倍 (每個entry會複製成4份)

 

給定一串執行的指令

請將最後的地圖印出

Input

N

地圖

指令

 

註: N為小於10的正整數

指令的個數至少為1

Output

地圖最後的樣子

 

註: 地圖最後的大小不超過32x32

請在每一列的最後加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5570 - I2P_LAB10_2   

Description

給定一個大小為 N x N 的地圖

每個entry的內容為0或1

 

可以對地圖做以下四種指令

L: 逆時針旋轉90度

R: 順時針旋轉90度

U: 放大兩倍 (每個entry會複製成4份)

F: 左右翻轉

例如:

010

100

100

 左右翻轉完後為

010

001

001

再順時針轉90度為

000

001

110

再做一次放大後為

000000

000000

000011

000011

111100

111100

 

給定一串執行的指令

請將最後的地圖印出

Input

地圖

指令

 

註: N為小於10的正整數

指令的個數至少為1

Output

地圖最後的樣子

 

註: 地圖最後的大小不超過32x32

請在每一列的最後加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5574 - I2P_LAB11_1   

Description

字元群為一串小寫字母( a-z )所組成。
對於兩個字元群,每種字母數目相同就算同個字元群
如 abb 與 bab,視為同字元群,
abb 與 aab,則視為不同字元群。

輸入 N 個字元群
每個字元群間用換行隔開,
請找出出現最少次的字元群
並將次數印出。

hint:
將句子讀進來後,
讓每個字元群輪流當主角,
逐一檢查是否和其他字元群相同。

Input

N

字元群1

字元群2

...

字元群N

 

每個字元群由3個字母組成,1<=N<=100

Output

最少出現字元群之出現次數

 

註: 最後不須加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5578 - I2P_LAB11_2   

Description

字元群為一串小寫( a-z )或大寫( A-Z )字母所組成。
對於兩個字元群,每種字母 (大小寫算同一種) 數目相同就算同個字元群
如 abb 與 bab,視為同字元群,
abB 與 bAb,視為同字元群,
abb 與 aab,則視為不同字元群。
abb 與 aaB,也視為不同字元群。

輸入 N 個字元群
每個字元群間用換行隔開,
請找出出現最少次的字元群
並將次數印出。

hint:
1. 將句子讀進來後,讓每個字元群輪流當主角,逐一檢查是否和其他字元群相同。
2. A 的 ASCII code 是 65, a 的 ASCII code 是 97。

Input

N

字元群1

字元群2

...

字元群N

 

每個字元群由3個字母組成,1<=N<=100

Output

最少出現字元群之出現次數

 

註: 最後不須加上換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5582 - I2P_LAB12_1   

Description

輸入多筆產品資料,包括產品名稱、價格、賣家評價,
以及一個搜尋產品名稱的字串,搜尋字串只會包含產品名稱的開頭字母。
請找出所有名稱開頭相符的產品(大小寫有區別),並印出產品的詳細資料。
順序由低價到高價,若價格相同,則依照賣家評價,由高到低排序。
假設查詢後都至少會有一個結果。

 

註:

如果出現TLE請試著用qsort來改善程式的執行速度。

 

hint:

1. 可以用struct把產品名稱、產品價錢與賣家評價包起來,然後針對struct裡的產品名稱做排序,最後將搜尋到的結果再針對價錢跟評價排序。
2. 如果用fgets吃字串,請先確認你吃進來的產品名稱與搜尋字串是對的。

Input

產品資料筆數 n (0 < n <= 16000)

接下來 3n 行關於產品的描述,每一個產品描述有 3 行:
產品名稱(不超過18個字元的字串)
產品價格(整數)
賣家評價(浮點數)

查詢字串(不超過18個字元)

註: 最後有換行

Output

查詢到的產品,一行一個產品,格式為:

產品名稱, NT$產品價格, 評價


註: 最後須換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5586 - I2P_LAB12_2   

Description

給定一個由英文字串組成的字典
請在裡面搜尋由指定的字首開頭的單字
並以字典排序的順序印出,
若沒有符合的單字,則印出None

註:
單字全部皆為小寫
給定的字典不一定已經排序

Hint:
1.比對字串可使用strncmp http://www.cplusplus.com/reference/cstring/strncmp/
2.若發生TLE,請改進sort或search方法

3.請注意,OJ在測試時是有限制記憶體使用量。
4.若發生 Memory Limit Exceeded,表示超過記憶體限制量,請改變記憶體配置方式 ( 使用動態方式配置單字長度或字典大小 )
   ( 顯示SIGSEGV,也可能是因為上述問題所致,請照上述建議方向或減少程式記憶體使用量對code做修改 )
 

Input

N

單字1

...

單字N

M

字首1

...

字首M

註:
單字最長不超過1000個字母,
1 <= N <= 100000
1 <= M <= 500

Output

搜尋到的所有符合字首的單字
若沒有符合的單字,則印出None

註: 最後須換行

Sample Input  Download

Sample Output  Download

Tags




Discuss




5590 - I2P_LAB13_2   

Description

輸入:
3
1 3 2 2
1 1 4 4
5 2 3 2
2 2 3 3
 
1 3 2 2
1 1 4 4
5 2 3 2
2 4 3 3
 
1 3 2 2
7 1 4 4
5 2 3 2
2 2 3 3
 
輸入資料包含 N 個固定大小 4x4 的二維陣列,每個二維陣列代表可用來放置的棋盤,棋盤格中數字代表分數。
 
目標: 找出每個棋盤中分數最高的放置方法,輸出最高能夠得的分數。
 
放置的棋子形狀只有底下這一種,但可以旋轉四個方向。
 
   ■
■ ■ ■
 
以上面的輸入來說,每個棋盤分數最高的放置方法分別像底下這樣:
 
1 3 2 2
1 1 4 4
5 2 3 2
2 2 3 3
 
1 3 2 2
1 1 4 4
5 2 3 2
2 4 3 3
 
1 3 2 2
7 1 4 4
5 2 3 2
2 2 3 3
 
所以應該要輸出
13
14
16

Input

N

二維陣列1
二維陣列1

...
二維陣列N

Output

最高分數1

最高分數2

...
最高分數N

 

註: 最後須換行

Sample Input  Download

Sample Output  Download

Tags




Discuss