1、只需要按距离原点的远近排序然后按照规则输出就可以了。昨天居然没看这么水的题= =!
2、不过代码写得有点丑。。哎。。。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct node
{
int x,y;
int step;
}t[100010];
bool cmp(node a,node b)
{
return a.step<b.step;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int cnt=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&t[i].x,&t[i].y);
t[i].step = abs(t[i].x)+abs(t[i].y);
if(t[i].x==0 || t[i].y==0)
cnt++;
}
sort(t,t+n,cmp);
printf("%d\n",cnt*4+(n-cnt)*6);
for(int i=0;i<n;i++)
{
if(t[i].x>0 && t[i].y>0)
{
printf("1 %d %c\n",t[i].x,'R');
printf("1 %d %c\n",t[i].y,'U');
printf("2\n");
printf("1 %d %c\n",t[i].x,'L');
printf("1 %d %c\n",t[i].y,'D');
printf("3\n");
}
else if(t[i].x<0 && t[i].y>0)
{
printf("1 %d %c\n",-t[i].x,'L');
printf("1 %d %c\n",t[i].y,'U');
printf("2\n");
printf("1 %d %c\n",-t[i].x,'R');
printf("1 %d %c\n",t[i].y,'D');
printf("3\n");
}
else if(t[i].x<0 && t[i].y<0)
{
printf("1 %d %c\n",-t[i].x,'L');
printf("1 %d %c\n",-t[i].y,'D');
printf("2\n");
printf("1 %d %c\n",-t[i].x,'R');
printf("1 %d %c\n",-t[i].y,'U');
printf("3\n");
}
else if(t[i].x>0 && t[i].y<0)
{
printf("1 %d %c\n",t[i].x,'R');
printf("1 %d %c\n",-t[i].y,'D');
printf("2\n");
printf("1 %d %c\n",t[i].x,'L');
printf("1 %d %c\n",-t[i].y,'U');
printf("3\n");
}
else if(t[i].x>0 && t[i].y==0)
{
printf("1 %d %c\n",t[i].x,'R');
printf("2\n");
printf("1 %d %c\n",t[i].x,'L');
printf("3\n");
}
else if(t[i].x<0 && t[i].y==0)
{
printf("1 %d %c\n",-t[i].x,'L');
printf("2\n");
printf("1 %d %c\n",-t[i].x,'R');
printf("3\n");
}
else if(t[i].x==0 && t[i].y<0)
{
printf("1 %d %c\n",-t[i].y,'D');
printf("2\n");
printf("1 %d %c\n",-t[i].y,'U');
printf("3\n");
}
else if(t[i].x==0 && t[i].y>0)
{
printf("1 %d %c\n",t[i].y,'U');
printf("2\n");
printf("1 %d %c\n",t[i].y,'D');
printf("3\n");
}
}
}
return 0;
}