【Usaco2009 gold 】拯救奶牛
Description
貝希被困在一個三角形的迷宮之中。這個迷宮有N行(1 <= N <= 1000000)。比如下圖是一個3行的迷宮。
迷宮的第i行有2*i-1個三角形,從左到右分別編號為(i,1)、(i,2)等等。貝希每次可以從一個三角形走到任意一個一個跟當(dāng)前的三角形有鄰邊的三角形。比如說,如果她目前處于三角形(3,3),那么,她可以走到三角形(3,2)、(3,4)和(4,4)。貝希每次需要一分鐘的時間來移動到下一個三角形。
農(nóng)夫約翰發(fā)現(xiàn)貝希被困了!于是她跟蹤貝希的iPhone手機(jī)(可憐的觸摸屏~),得知貝希目前處于三角形(Si,Sj)。因?yàn)榧s翰對貝希有著無窮無盡的濃濃愛意,所以他希望貝希能盡可能快地回到他的身邊。
在迷宮的三角形之中,有M(1 <= M <= 10000)個是出口。在任何一個出口都可以讓貝希逃離迷宮。一旦貝希進(jìn)入一個作為出口的三角形,她用多一分鐘就可以逃離這個迷宮。
找到一個可以讓貝希逃離迷宮最小時間T,并輸出她應(yīng)該從哪一個出口逃離迷宮,這個出口記為(OUTi,OUTj)。如果有多個出口同時需要時間T,輸出那個行的編號小的出口,如果仍然有多個出口,輸出那個列的編號小的。
Input
第一行:兩個由空格隔開的整數(shù):N和M。
第二行:兩個由空格隔開的整數(shù):Si和Sj。
第三到第M+2行:第i+2行有兩個由空格隔開的整數(shù)Ei和Ej,表示三角形(Ei,Ej)是出口。
Output
第一行:兩個由空格隔開的整數(shù):OUTi和OUTj。
第二行:一個單獨(dú)的整數(shù):T。
Sample Input
4 2
2 1
3 5
4 4
Sample Output
4 4
4
solution
這題感覺就是亂搞搞求個答案就可以了的說。。。
可能代碼你們看不懂。。。(我打的很丑**(⊙o⊙)…**)
code
#include<cstdio>
using namespace std;
int n,m,x1,y1,ansx,ansy,ans=(1<<30),s;
inline int read()
{
int x=0; char c=getchar();
while (c<'0' || c>'9') c=getchar();
while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
void doit(int x,int y,int x1,int y1)
{
int le,ri,cg=0;
if (! (y & 1)) x--,y--,cg--;
if (y1 & 1) x1++,y1++,cg--;
le=y+1,ri=y+(x1-x<<1)-1;
s=(x1-x<<1)-1+cg+1;
if (y1<le) s+=le-y1;
else if (y1>ri) s+=y1-ri;
}
int main()
{
freopen("save.in","r",stdin);
freopen("save.out","w",stdout);
n=read(),m=read();
x1=read(),y1=read();
for (int i=1,x,y;i<=m;i++)
{
x=read(),y=read();
if (x<x1)
{
doit(x,y,x1,y1);
if (s<ans) ans=s,ansx=x,ansy=y;
else if (s==ans && y<ansy) ansx=x,ansy=y;
}
else
{
doit(x1,y1,x,y);
if (s<ans) ans=s,ansx=x,ansy=y;
else if (s==ans && y<ansy) ansx=x,ansy=y;
}
}
printf("%d %d
%d
",ansx,ansy,ans);
return 0;
}
轉(zhuǎn)載需注明出處。
總結(jié)
以上是生活随笔為你收集整理的【Usaco2009 gold 】拯救奶牛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双氧水可以洗耳朵吗 双氧水怎么洗耳朵
- 下一篇: 伏羲八卦方位图(浅谈伏羲八卦,速记先天方