總提交: 68次 通過: 7次
由於小光剛剛學習幾何變換,老師只會給出四種變換,如下:
平移變換: (x’,y’)=(x+p,y’+q) 程序的輸入格式爲:1 p q (p,q爲整數)
縮放變換: (x’,y’)=(x*L,y*L) 程序的輸入格式爲:2 L (L爲整數)
上下翻轉: (x’,y’)=(x,-y) 程序的輸入格式爲:3
左右翻轉: (x’,y’)=(-x,y) 程序的輸入格式爲:4
然後N個點(x,y) 其中x,y均爲整數
M (1<=M<=10^5)
然後M個變換,輸入格式如上所述。
可見格式 | 帶空格和換行符的格式 | 帶空格和換行符的格式說明 |
2 1 1 2 2 1 1 1 1
Original | Transformed | 帶空格和換行符的格式說明 |
2 2 3 3
合工大AC情況:
# include <stdio.h>
# define N 100001
int A[2][N];
int main(){
int W[4]={1,0,1,0},n,m,L,i,P,Q;
while(scanf("%d",&n)==1)
{
for(i=0;i<n;i++)
scanf("%d%d",&A[0][i],&A[1][i]);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&L);
if(L==1){
scanf("%d%d",&P,&Q);
W[1]+=P;
W[3]+=Q;
}
else if(L==2){
scanf("%d",&P);
Q=0;
while(Q<4)
W[Q++]*=P;
}
else if(L==3){
W[2]=-W[2];
W[3]=-W[3];
}
else{
W[0]=-W[0];
W[1]=-W[1];
}
}
for(i=0;i<n;i++)
printf("%d %d\n",W[0]*A[0][i]+W[1],W[2]*A[1][i]+W[3]);
W[0]=W[2]=1;
W[1]=W[3]=0;
}
return 0;
}