poj 百練2785 武林

2021-06-20 02:45:19 字數 3375 閱讀 6260

總時間限制: 

1000ms

記憶體限制: 

65536kb

描述

在乙個有12行12列的方形的武林世界裡,少林、武當和峨嵋三派的**們在為獨霸武林而互相廝殺。武林世界的第一行的一列格仔的座標是(1, 1),第一行第二列座標是(1, 2)……右下角的座標為(12, 12)。如圖:

少林派**總是在同一列回不停地行走。先往下走,走到頭不能再走時就往上走,再到頭則又往下走……比如,(1, 1) -> (2, 1) -> (3, 1)。

武當派**總是在同一行來回不停地行走。先往右走,走到頭不能再走時就往左走,再到頭則又往右走……比如,(2, 1) -> (2, 2) -> (2, 3)。

峨嵋派**總是在右下-左上方向來回不停走,先往右下方走,走到頭不能再走時就往左上方走,再到頭則又往右下方走……比如,(1, 1) -> (2, 2) -> (3, 3)。峨嵋**如果位於(1,12)或(12,1),那當然只能永遠不動。

每次走動,每個**必須,而且只能移動乙個格仔。

每名**有內力、武藝、和生命力三種屬性。這三種屬性的取值範圍都是大於等於0,小於等於100。

當有兩名不同門派的**進入同乙個格仔時,一定會發生一次戰鬥,而且也只有在這種情況下,才會發生戰鬥。(同派**之間當然不會自相殘殺;乙個格仔裡三派**都有時,大家都會因為害怕別人漁翁得利而不敢出手;而多名同門派**也不會聯手對付敵人,因為這有悖於武林中崇尚的單打獨鬥精神,會被人恥笑)

一次戰鬥的結果將可能導致參戰雙方生命力發生變化,計算方法為:

戰後生命力 = 戰前生命力 - 對方攻擊力

而不同門派的**攻擊力計算方法不同:

少林派攻擊力 = (0.5 * 內力 + 0.5 * 武藝) * (戰前生命力 + 10) / 100

武當派攻擊力 = (0.8 * 內力 + 0.2 * 武藝) * (戰前生命力 + 10) / 100

峨嵋派攻擊力 = (0.2 * 內力 + 0.8 * 武藝) * (戰前生命力 + 10) / 100

對攻擊力的計算過程為浮點運算,最終結果去掉小數點後部分取整,使得攻擊力總是整數。

一次戰鬥結束後,生命力變為小於或等於0的**,被視為「戰死」,會從武林中消失。

兩名不同門派的**相遇時,只發生一次戰鬥。

初始狀態下,不存在生命值小於或等於0的**,而且乙個格仔裡有可能同時有多個**。

一系列戰鬥從初始狀態就可能爆發,全部戰鬥結束後,仍然活著的**才開始一齊走到下乙個格仔。總之,不停地戰鬥-行走-戰鬥-行走……所有**都需等戰鬥結束後,才一齊走到下乙個格仔。

你需要做的是,從乙個初始狀態,算出經過n步(n < 1000)後的狀態。所有的**先進行完全部戰鬥(當然也可能沒有任何戰鬥發生),然後再一齊走到下乙個格仔,這稱為一步。

所有**總數不會超過1000。

輸入第一行是測試資料的組數,隨後是各組測試資料。

每組資料第一行是行走步數 n。

接下來的若干行,每行描述一名**的位置及其各項引數。描述**時,格式為「**代號 行號 列號 內力 武藝 生命力」。**代號就是乙個字母:

『s』 代表少林派**

『w』 代表武當派**

『e』 代表峨嵋派**

比如:w 10 2 10 3 10

表示第10行第2列有一名武當派**,他的內力是 10,武藝是3,生命力是10。

每組測試資料以乙個結束標誌行結尾。結束標誌行只含有乙個字元』0』。

輸出針對每組測試資料,您的輸出應該是4行,前3行每行是用空格分隔的兩個整數,前乙個是某派**總數,後乙個是本派所有**生命力之和。規定第1行代表少林派,第2行代表武當派,第3行代表峨嵋派。第4行是 「***」表示結束。

樣例輸入

2

1s 1 2 20 20 20

w 2 1 20 20 2002

s 1 2 20 20 20

w 2 1 20 20 20

e 12 12 20 20 100

0

樣例輸出

1 20

1 20

0 0***

1 14

1 14

1 100

***

說明:改了一晚的錯,rp值低,模擬題都a的很痛苦。
c++語言: 

c++

#include

#include

struct

person

person[1010];

struct

station

sta[13][13];

intatk(

inti)

return

(( int) 

x);}

void

move(

inti)

}

else

}

break;

case'w':

if(person[i].flag)

}

else

}

break;

default:

intk 

= 1;

if((person[i].x==12&&person[i].y==1)||(person[i].x==1&&person[i].y==12)) 

k=0;

if(k)

}

else

}

}

break;

}

}

intmain()

while(n--)

}

for(i=1; 

i<=12; 

i++)

for(j=1; 

j<=12; 

j++)

sta[i][j].sum 

= sta[i][j].num[0] 

= sta[i][j].num[1] 

= 0;

}

}

for(i=0; 

i<2; 

i++) 

w[i]=s[i]=e[i]=0;

for(i=0; 

i}

}

printf("%d %d\n", 

s[0], 

s[1]);

printf("%d %d\n", 

w[0], 

w[1]);

printf("%d %d\n", 

e[0], 

e[1]);

printf("***\n");

}

return

0;

}

POJ 百練 1088 滑雪

時間限制 1000ms 記憶體限制 65536kb 描述 michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表...

poj 百練 2801填詞

總時間限制 1000ms 記憶體限制 65536kb 描述 alex喜歡填詞遊戲。填詞是遊戲是乙個非常簡單的遊戲。填詞遊戲包括乙個n m大小的矩形方格盤和p個單詞。玩家需要把每個方格中填上乙個字母使得每個單詞都能在方格盤上找到。每個單詞都能找到要滿足下面的條件 每個方格都不能同時屬於超過乙個的單詞。...

POJ 百練 1017 裝箱問題

問題描述 乙個工廠製造的產品形狀都是長方體,它們的高度都是 h,長和寬都相等,一共有六個 型號,他們的長寬分別為 1 1,2 2,3 3,4 4,5 5,6 6.這些產品通常使用乙個 6 6 h 的長方 體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的 包裹數量。他們...