日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[匈牙利] 洛谷 P2526 小狗散步

發(fā)布時(shí)間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [匈牙利] 洛谷 P2526 小狗散步 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目背景

Grant喜歡帶著他的小狗Pandog散步。Grant以一定的速度沿著固定路線走,該路線可能自交。Pandog喜歡游覽沿途的景點(diǎn),不過(guò)會(huì)在給定的N個(gè)點(diǎn)和主人相遇。小狗和主人同時(shí)從(X1,Y1)點(diǎn)出發(fā),并同時(shí)在(Xn,Yn)點(diǎn)匯合。小狗的速度最快是Grant的兩倍。當(dāng)主人從一個(gè)點(diǎn)以直線走向另一個(gè)點(diǎn)時(shí),Pandog跑向一個(gè)它感興趣的景點(diǎn)。Pandog每次與主人相遇之前最多只去一個(gè)景點(diǎn)。

題目描述

你現(xiàn)在的任務(wù)是:為Pandog尋找一條路線(有可能與主人的路線部分相同),使它能夠游覽最多的景點(diǎn),并能夠準(zhǔn)時(shí)與主人在給定地點(diǎn)相遇或者匯合。

輸入輸出格式

輸入格式:

?

輸入文件第一行是兩個(gè)整數(shù)N和M( 1≤N,M≤100 );

輸入文件第二行的N個(gè)坐標(biāo)給出了Grant的散步路線,即Pandog和主人相遇地點(diǎn);

輸入文件第三行的M個(gè)坐標(biāo)給出了所有Pandog感興趣的景點(diǎn)。

所有輸入的坐標(biāo)均不相同,且絕對(duì)值不超過(guò)1000。

?

輸出格式:

?

輸出小狗的移動(dòng)路線。

第一行是經(jīng)過(guò)的點(diǎn)數(shù),第二行依次為經(jīng)過(guò)的點(diǎn)的坐標(biāo)(直角坐標(biāo)系)

?

輸入輸出樣例

輸入樣例#1:
4 5 1 4 5 7 5 2 -2 4 -4 -2 3 9 1 2 -1 3 8 -3 輸出樣例#1:
6 1 4 3 9 5 7 5 2 1 2 -2 4

?

題解

  • 可以發(fā)現(xiàn),主人的路線是一定的,我們可以預(yù)處理出當(dāng)前主人在x,小狗可以瀏覽的景點(diǎn)個(gè)數(shù),存在一個(gè)數(shù)組里
  • 因?yàn)槲覀円蟮氖切」纷疃酁g覽的景點(diǎn)數(shù),那么顯然可以最大匹配
  • 然后就沒(méi)了

代碼

1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <cmath> 5 #define N 110 6 #define sqr(x) (x)*(x) 7 using namespace std; 8 struct edge {int x,y;}a[N],b[N]; 9 int n,m,map[N][N],vis[N],p[N],ans=0; 10 double calc(edge x,edge y) { return sqrt(sqr(x.x-y.x)+sqr(x.y-y.y)); } 11 int xyl(int x) 12 { 13 for (int i=1;i<n;i++) 14 if (map[x][i]&&!vis[i]) 15 { 16 vis[i]=1; 17 if (!p[i]||xyl(p[i])) { p[i]=x; return 1; } 18 } 19 return 0; 20 } 21 int main() 22 { 23 scanf("%d%d",&n,&m); 24 for (int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); 25 for (int i=1;i<=m;i++) scanf("%d%d",&b[i].x,&b[i].y); 26 for (int i=1;i<=n;i++) 27 for (int j=1;j<=m;j++) 28 if (calc(a[i],a[i+1])*2>calc(a[i],b[j])+calc(b[j],a[i+1])) 29 map[j][i]=1; 30 for (int i=1;i<=m;i++) memset(vis,0,sizeof(vis)),ans+=xyl(i); 31 printf("%d\n",ans+n); 32 for (int i=1;i<=n;i++) 33 { 34 printf("%d %d ",a[i].x,a[i].y); 35 if (i<n&&p[i]) printf("%d %d ",b[p[i]].x,b[p[i]].y); 36 } 37 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Comfortable/p/10296289.html

總結(jié)

以上是生活随笔為你收集整理的[匈牙利] 洛谷 P2526 小狗散步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。