1 条题解
-
0
解题思路
这是一个图形绘制的题目,它根据输入的字符串
s
中的字符('A' 或 'V')来生成一系列的线段,最终绘制出一个图形。1. 初始设置
- 初始位置设置为
(300, 420)
,然后移动到(310, 420)
并绘制第一条线段。 - 变量
sx
和sy
记录上一个点的坐标,ex
和ey
记录当前点的坐标。
2. 处理输入字符串
- 对于字符串
s
中的每个字符:- 如果是
'A'
,则计算下一个点的坐标 : - 如果是
'V'
,则计算下一个点的坐标 :
- 如果是
- 更新
sx
和sy
为上一个点的坐标,ex
和ey
为当前点的坐标,并绘制线段到 。
3. 输出结果
- 最后输出
stroke
和showpage
,表示绘制完成并显示页面。
数学公式说明
- 对于
'A'
和'V'
的计算,可以理解为基于向量的旋转:'A'
表示逆时针旋转 90 度:'V'
表示顺时针旋转 90 度:
示例
假设输入字符串为
"AVA"
,则绘制过程如下:- 初始线段: 到 。
- 遇到
'A'
,计算新点 。 - 遇到
'V'
,计算新点 。 - 遇到
'A'
,计算新点 。 最终绘制的图形由这些线段组成。
#include <cstdio> #include <algorithm> #include <queue> #define maxn 202 using namespace std; char s[maxn]; int main(){ while(~scanf("%s",s)){ puts("300 420 moveto\n310 420 lineto"); int sx=300,sy=420; int ex=310,ey=420; int x,y; for(int i=0;s[i]!=0;++i){ if(s[i]=='A'){ x=ey-sy+ex; y=sx-ex+ey; } else if(s[i]=='V'){ x=sy-ey+ex; y=ex-sx+ey; } sx=ex; sy=ey; ex=x; ey=y; printf("%d %d lineto\n",x,y); } puts("stroke\nshowpage"); } return 0; }
- 初始位置设置为
- 1
信息
- ID
- 1557
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者