设为首页 加入收藏

TOP

scu oj 4445 Right turn 2015年四川省赛J题(模拟题)
2015-11-21 00:59:22 来源: 作者: 【 】 浏览:1
Tags:scu 4445 Right turn 2015年 四川省 模拟题

一般的模拟题。对于出现过的每一个x建立一个set 集合,对于y也如此。然后查找要走到哪个点即可,主要要对状态记录,判断是否无线循环,否者出现无线循环的情况,就tle了。

?

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
         #include
         
           #include
          
            #include
           
             using namespace std; const int mmax = 500010; const int inf=0x3fffffff; struct node { int x,y; void read() { scanf("%d %d",&x,&y); } node(int x,int y):x(x),y(y) {} node() {} bool operator < (const node &a) const { if(x==a.x) return y
            
             qx,qy; set
             
               Sx[2100],Sy[2100]; int dir[4][2]={1,0,0,-1,-1,0,0,1}; map
              
               q; bool vis[10100][4]; bool fuck(int x,int y) { int cnt=0; for(int i=0;i<4;i++) { int tx=x+dir[i][0]; int ty=y+dir[i][1]; // if(x==0 && y==0) // { // cout<
               
                ::iterator it; if(fuck(nowx,nowy)) { fg=0; break; } it=Sy[ qy[nowy] ].upper_bound(nowx); if(it!=Sy[ qy[nowy] ].end()) { int tx=*it; tx--; nowx=tx; nowdir++; nowdir%=4; cnt++; } else break; } else if(nowdir==1) { if(!qx.count(nowx)) break; set
                
                 ::iterator it; if(fuck(nowx,nowy)) { fg=0; break; } it=Sx[ qx[nowx] ].lower_bound(nowy); if(it!=Sx[ qx[nowx] ].begin()) { it--; int ty=*it; ty++; nowy=ty; nowdir++; nowdir%=4; cnt++; } else break; } else if(nowdir==2) { if(!qy.count(nowy)) break; set
                 
                  ::iterator it; if(fuck(nowx,nowy)) { fg=0; break; } it=Sy[ qy[nowy] ].lower_bound(nowx); if(it!=Sy[ qy[nowy] ].begin()) { it--; int tx=*it; tx++; nowx=tx; nowdir++; nowdir%=4; cnt++; } else break; } else if(nowdir==3) { if(!qx.count(nowx)) break; set
                  
                   ::iterator it; if(fuck(nowx,nowy)) { fg=0; break; } it=Sx[ qx[nowx] ].upper_bound(nowy); if(it!=Sx[ qx[nowx] ].end()) { int ty=*it; ty--; nowy=ty; nowdir++; nowdir%=4; cnt++; } else break; } } if(!fg) puts("-1"); else printf("%d\n",cnt); } return 0; }
                  
                 
                
               
              
             
            
           
          
         
       
      
     
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C and C++ Calling Convention 下一篇sgu-262 Symbol Recognition

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: