zoukankan      html  css  js  c++  java
  • Wheels(bfs遍历,CERC 2014)

    原题链接:http://acm.hnu.cn/online/?action=problem&type=show&id=13397

    对于每一个已经开始运动的轮子要求它周围和他相接触的轮子的运动状态,然后让那些轮子依次进入队列= =

    速度关系== 高中学过物理应该都知道吧

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<math.h>
      4 #include<algorithm>
      5 #include<iostream>
      6 #include<queue>
      7 using namespace std;
      8 #define maxn 2000
      9 struct node
     10 {
     11     int x,y,r,rate1,rate2;
     12     int flag;
     13 };
     14 int hash[maxn];
     15 node a[maxn];
     16 queue<node>q;
     17 int  dis(node a,node b)
     18 {
     19     int f=0;
     20     double len=pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0);
     21     if(len-pow(a.r+b.r,2.0)<=0.00000001)
     22     f=1;
     23     return f;
     24 }
     25 int gcd(int x,int y)
     26 {
     27     int ans;
     28     if(y!=0)
     29     ans=gcd(y,x%y);
     30     else
     31     ans=x;
     32     return ans;
     33 }
     34 int main()
     35 {
     36     int t,n;
     37     scanf("%d",&t);
     38     while(t--)
     39     {
     40         while(!q.empty())
     41          q.pop();
     42         memset(hash,0,sizeof(hash));
     43         scanf("%d",&n);
     44         for(int i=0;i<n;i++)
     45         {
     46             scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].r);
     47             a[i].flag=0;
     48         }
     49         a[0].flag=1;
     50         a[0].rate1=1;
     51         a[0].rate2=1;
     52         q.push(a[0]);
     53         while(!q.empty())
     54         {
     55             node now=q.front();
     56             q.pop();
     57             for(int i=1;i<n;i++)
     58             {
     59                 if(hash[i])
     60                 continue;    
     61                 node b;
     62                 if(dis(a[i],now)&&hash[i]==0)
     63                 {
     64                     if(now.flag==1)
     65                     a[i].flag=-1;
     66                     else if(now.flag==-1)
     67                     a[i].flag=1;
     68                         b.x=a[i].x;
     69                         b.y=a[i].y;
     70                         b.r=a[i].r;
     71                         hash[i]=1;
     72                         a[i].rate1=now.rate1*now.r;
     73                         a[i].rate2=now.rate2*a[i].r;
     74                          int cnt=gcd(a[i].rate1,a[i].rate2);
     75                           a[i].rate1/=cnt;
     76                           a[i].rate2/=cnt;
     77                         q.push(a[i]);
     78                     }
     79                 }
     80             }
     81         for(int i=0;i<n;i++)
     82         {
     83             if(a[i].flag==0)
     84             {
     85                 printf("not moving\n");
     86             }
     87             else if(a[i].flag==1)
     88             {
     89                 if(a[i].rate2==1)
     90                 printf("%d clockwise\n",a[i].rate1);
     91                 else
     92                 printf("%d/%d clockwise\n",a[i].rate1,a[i].rate2);
     93             }
     94             else
     95             {
     96                 if(a[i].rate2==1)
     97                 printf("%d counterclockwise\n",a[i].rate1);
     98                 else
     99                 printf("%d/%d counterclockwise\n",a[i].rate1,a[i].rate2);
    100             }
    101         }
    102         }
    103     return 0;
    104 }
  • 相关阅读:
    Cooperate with Myself
    A brief introduction of myself
    计算1+11+111+1111+........
    Jav实现F(n)=F(n-1)+F(n-2)+.....+F(1)+1
    查找二维数组中是否有符合的目标值
    排序算法
    时间复杂度
    Java代码实现单例模式
    查找一个字符串中重复出现字符的个数
    null,“”,empty的区别
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580175.html
Copyright © 2011-2022 走看看