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 }
  • 相关阅读:
    Python基础04 字典基本操作
    Python基础03 列表、元组基本操作
    Python基础02 字符串基本操作
    Python基础07 函数作用域、嵌套函数、闭包函数、高阶函数及装饰器的理解
    Python随机数random模块学习,并实现生成6位验证码
    Python与时间相关的time、datetime模块的使用
    Python PIL库安装
    Python中可变对象和不可变对象
    Mac环境下Docker及Splash的安装运行教程
    redis 链表(list)操作
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580175.html
Copyright © 2011-2022 走看看