http://acm.hdu.edu.cn/showproblem.php?pid=1033

这题的题干说的很绕,结合样例不难理解题意,走折线,A代表顺时针,V代表逆时针,给一个包含A和V的字符串,输出走过的点。

不难发现,不管是顺时针走还是逆时针走,x和y坐标的变化都是不一定的。而根据折线的特点我们知道单纯的向一个方向走的周期是4,沿着这个思路模拟出坐标变化就容易多了

#include <iostream>
#include <cstring>
using namespace std ;
char a[2001] ;
int sx,sy ;
int flag ;
int len ;
int main()
{
    while(~scanf("%s",a))
    {
        printf("300 420 moveto\n310 420 lineto\n") ;
        len=strlen(a) ;
        sx=310,sy=420 ;
        flag=2 ;
        for(int i=0;i<len;i++) 
        {
            if(a[i]=='A')
            {
                flag++ ;
                if(flag>4)
                    flag=1 ;
            }
            else{
                flag-- ;
                if(flag<0)
                    flag=3 ;
            }
            if(flag%4==3)
                sy-=10 ;
            else if(flag%4==1)
                sy+=10 ;
            else if(flag%4==2)
                sx+=10 ;
            else if(flag%4==0)
                sx-=10 ;
            printf("%d %d lineto\n",sx,sy) ;
        }
        printf("stroke\nshowpage\n") ;
    }
    return 0 ;
}
View Code