時間限制: 1 sec 記憶體限制: 128 mb
穀倉是乙個簡單的多邊形。它的每一條邊或平行於x軸,或平行於y軸。從任意乙個點沿順時針方向走,橫邊和縱邊是交替出現的。多邊形一共有n個點,編號為1到n。其中1號點為出口。奶牛貝西已經完全記住了穀倉的地圖。它從某乙個點出發,只能沿著邊界走,在開燈的情況,它能很快知道怎麼走才能更快到達出口。可是有一天,燈熄滅了。它一下慌了神,然後它忘了自己在哪個點了。但是幸運的是它仍然記得整個穀倉的地圖,而且它能夠憑觸覺知道當前點的內角有多大,它也能感覺到當前點是不是出口,而且經過一條邊後也能精確地計算出該邊的長度。現在,為了尋找出口,它決定採取這樣的策略:沿著順時針方向繼續走下去,直到它能夠判斷出自己的位置,然後再選擇距離最短的方向(順時針或逆時針)走到出口。求最壞的情況下,貝西走到出口要比燈沒壞的情況下多花多少時間。
第一行包含n(4<=n<=200),接下來n行每行包含兩個整數,表示多邊形的n個頂點(xi,yi),按順時針的方向給出。這些點的範圍均在[-100000,100000]
輸出貝西按照上述策略在最壞情況下比正常情況下要多花的時間。
40 00 10
1 10
1 0
2
貝西如果在出口處,肯定可以感知到,這絕對不會是最壞情況。現在考慮它在其他3個點時的情形:它當前可以感知到內角的大小。但因為內角都是90度,所以他無法確定自己位置。於是它按照既定的策略,順時針走:
1. 如果它在開始在點2,它需要走到點3,此時,它知道自己在**了。於是它找最短的路徑,不管哪邊,都是11.所以,它一共需要走12個單位。如果是開燈的情況下,只需要走10個單位。所以,它要多走兩個單位。
2. 如果它在點3,它要走11個單位。開燈的情況下也要走11個單位。
3. 如果它在點4,它要走1個單位。開燈的情況下也要走1個單位。
於是最壞的情況下,它要多走兩個單位。
這題其實很有意思,關鍵在判斷怎樣才算是知道自己在**了。
對每個內角用叉乘判斷角度並標號(我的處理應該是麻煩了,可以不用把邊和點連起來的,分開存就行了)。
凡是奶牛走過的,都將成為它能夠獲知的資訊(判斷依據),也就是說走過的路和角度按照順序都成為新的雜湊標準。
然後就是模擬了。
雜湊用vector + map比較好寫,具體見**
code:
#include#include#include#include#include#include#includeusing namespace std;
const int max = 200;
struct nodel[max + 5];
int n;
int x[max + 5], y[max + 5];
int dis[2][max + 5];
map, int>hash;
void getint(int & num)
num *= ***;
}int get_angle(int a, int b, int c)
void pre_line()
l[n].a = l[n - 1].b;
l[n].b = get_angle(n - 1, n, 1);
l[n].len = fabs(x[n] - x[n - 1] + y[n] - y[n - 1]);
}void pre_dis()
int main()
} int ans = 0;
bool *** = 0;
for(int i = 2; i < n; ++ i)
for(int j = i + 1; j <= n; ++ j)
} if(! ***) ans = max(ans, dis[1][i]);
} ans = max(ans, dis[1][n] - min(dis[0][n], dis[1][n]));
printf("%d\n", ans);
return 0;
}
303 序號互換
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 dr.kong設計了乙個聰明的機械人卡多,卡多會對 電子 中的單元格座標快速計算出來。單元格的行座標是由數字編號的數字序號,而列座標使用字母序號。觀察字母序號,發現第1列到第26列的字母序號分別為a,b,z,接著,第27列序號為...
矩陣快速冪 bzoi4000 棋盤
bzoj4000傳送門 我一上來打了個傻乎乎的狀壓。成功tle 50 不要阻止我裝sb。其實這道題敘述有點問題,給的那個3 p的矩陣,第一行是第0行。那麼就發現轉移只跟自己上一行的狀態有關,但n太大了,而狀態很少,少到能寫進乙個矩陣,快速冪get。只要構造出f i j i狀態能轉移到j狀態,則f i...
南陽 303序號互換
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 dr.kong設計了乙個聰明的機械人卡多,卡多會對 電子 中的單元格座標快速計算出來。單元格的行座標是由數字編號的數字序號,而列座標使用字母序號。觀察字母序號,發現第1列到第26列的字母序號分別為a,b,z,接著,第27列序號為...