ACdream HUT新生摸底训练赛 B - 娜娜梦游仙境系列——跳远女王 bfs

题意:bfs

解题思路:建图bfs,要特判一下能否直接跳。

解题思路:

  1 // File Name: b.cpp
  2 // Author: darkdream
  3 // Created Time: 2015年04月12日 星期日 20时03分02秒
  4
  5 #include<vector>
  6 #include<list>
  7 #include<map>
  8 #include<set>
  9 #include<deque>
 10 #include<stack>
 11 #include<bitset>
 12 #include<algorithm>
 13 #include<functional>
 14 #include<numeric>
 15 #include<utility>
 16 #include<sstream>
 17 #include<iostream>
 18 #include<iomanip>
 19 #include<cstdio>
 20 #include<cmath>
 21 #include<cstdlib>
 22 #include<cstring>
 23 #include<queue>
 24 #include<ctime>
 25 #define LL long long
 26
 27 using namespace std;
 28 int t;
 29 vector<int>mp[10005];
 30 int n;
 31 int d,yd;
 32 int dis(double x1,double y1,double x2,double y2)
 33 {
 34     double ans = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
 35     if(ans <= d )
 36         return 1;
 37     return 0 ;
 38 }
 39 struct node{
 40   int x, y;
 41 }p[10005];
 42 int vis[10005];
 43 int ok ;
 44 struct qunode{
 45    int num ,step ;
 46    qunode(){}
 47    qunode(int _num,int _step)
 48    {
 49        num = _num;
 50        step = _step ;
 51    }
 52 };
 53 int bfs()
 54 {
 55     ok = 0 ;
 56     queue<qunode> qu;
 57     qu.push(qunode(0,0));
 58     int mians = yd;
 59     /*for(int i = 1;i <= n;i ++)
 60     {
 61       for(int j = 0 ;j<mp[i].size();j ++)
 62           printf("%d ",mp[i][j]);
 63       printf("******\n");
 64     }*/
 65     while(!qu.empty())
 66     {
 67         qunode tmp = qu.front();
 68         //printf("%d\n",tmp.num);
 69         qu.pop();
 70         mians = min(mians,yd-p[tmp.num].y);
 71
 72         if(tmp.num == n+1)
 73         {
 74            ok =1;
 75            return  tmp.step;
 76         }
 77         for(int i = 0 ;i < mp[tmp.num].size(); i ++)
 78         {
 79            if(!vis[mp[tmp.num][i]])
 80            {
 81               // printf("%d to %d\n",tmp.num,mp[tmp.num][i]);
 82               vis[mp[tmp.num][i]] = 1;
 83               qu.push(qunode(mp[tmp.num][i],tmp.step+1));
 84            }
 85         }
 86
 87     }
 88     return mians;
 89 }
 90 int main(){
 91     scanf("%d",&t);
 92     while(t--){
 93         ok = 0 ;
 94         memset(vis,0,sizeof(vis));
 95        for(int i = 0;i <= 10000;i ++)
 96            mp[i].clear();
 97
 98        scanf("%d %d %d",&yd,&n,&d);
 99        for(int i = 1;i <= n;i ++)
100        {
101            scanf("%d %d",&p[i].x,&p[i].y);
102        }
103              if(yd <= d )
104                  mp[0].push_back(n+1);
105        for(int i = 1;i <= n;i ++ )
106        {
107           if(p[i].y <= d)
108           {
109              mp[0].push_back(i);
110           }
111           if(yd - p[i].y <= d)
112           {
113             mp[i].push_back(n+1);
114           }
115           for(int j = i+1;j <= n;j ++)
116           {
117                 if(dis(p[i].x,p[i].y,p[j].x,p[j].y))
118                 {
119                    mp[i].push_back(j) ;
120                    mp[j].push_back(i);
121                 }
122           }
123        }
124        int tt = bfs();
125        if(ok)
126            printf("YES\n%d\n",tt);
127        else printf("NO\n%d\n",tt);
128     }
129 return 0;
130 }

时间: 2024-08-04 14:08:55

ACdream HUT新生摸底训练赛 B - 娜娜梦游仙境系列——跳远女王 bfs的相关文章

ACdream HUT新生摸底训练赛 E - 娜娜梦游仙境系列——莫名其妙的插曲 数论

解题思路:其实就是找能组成的最大集合.max(a[1],a[2],a[3].........a[n])/gcd(a[1],a[2],a[3],......a[n]) 解题代码: 1 // File Name: e.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月13日 星期一 13时56分11秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #i

ACdream HUT新生摸底训练赛 C 娜娜梦游仙境系列——吃不完的糖果 DP

解题思路:环形数组最大字串,穿过和不穿过的DP 解题代码: 1 // File Name: c.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月12日 星期日 19时52分24秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<st

ACdream HUT新生摸底训练赛 D - 娜娜梦游仙境系列——村民的怪癖 KMP

解题思路:用next数组进行跳转次数统计. 解题代码: 1 // File Name: d.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月12日 星期日 19时40分52秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stac

ACdream HUT新生摸底训练赛 F - 娜娜梦游仙境系列——多民族王国 并查集

解题思路:并查集水题,多年前曾经用暴力水过. 解题代码: 1 // File Name: c.c 2 // Author: darkdream 3 // Created Time: 2013年03月01日 星期五 00时37分28秒 4 5 #include<stdio.h> 6 #include<string.h> 7 #include<stdlib.h> 8 #include<time.h> 9 #include<math.h> 10 11

B - 娜娜梦游仙境系列——跳远女王

B - 娜娜梦游仙境系列——跳远女王 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 娜 娜觉得钢琴很无趣了,就抛弃了钢琴,继续往前走,前面是一片湖,娜娜想到湖的对岸,可惜娜娜找了好久都没找到小桥和小船,娜娜也发现自己不是神仙,不能像 八仙过海一样.正当娜娜发愁的时候,娜娜发现湖上面有一些石头!娜娜灵机一动,发现可以沿着石头跳吖跳吖,这样

A - 娜娜梦游仙境系列——诡异的钢琴

A - 娜娜梦游仙境系列——诡异的钢琴 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 从前,有一个ACdream王国,王国里住着一位公主,她叫娜娜,娜娜公主有一天做了一个很长很长的梦~她说她从来没有遇到过这些奇妙的东西~ 现在站在娜娜面前的是一台钢琴,这是一台看上去很正常的钢琴,上面有88个键(频率从27赫兹

E - 娜娜梦游仙境系列——莫名其妙的插曲

E - 娜娜梦游仙境系列——莫名其妙的插曲 E - 娜娜梦游仙境系列——莫名其妙的插曲 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 娜 娜因为帮桃花村民们解决了一大难题而受到村民们的尊敬,不过由于娜娜还想继续探索这个神奇的世界,只好恋恋不舍地与村民告别.当娜娜离开村庄的一刻,娜娜 失忆了!她不记得桃花村的一切,她不记得之前吃了很多糖果

G - 娜娜梦游仙境系列——梦醒

G - 娜娜梦游仙境系列——梦醒 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)     Special Judge Submit Status Problem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过头哟~”,娜娜问:“我怎样才能醒过

D - 娜娜梦游仙境系列——村民的怪癖

D - 娜娜梦游仙境系列——村民的怪癖 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近.忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之.复前行,欲穷其林.林尽水源,便得一山,山有小口,仿佛若有光.便