結果

問題 No.675 ドットちゃんたち
ユーザー hato_gen_tsukihato_gen_tsuki
提出日時 2018-05-09 14:47:52
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 82 ms / 2,000 ms
コード長 2,540 bytes
コンパイル時間 566 ms
コンパイル使用メモリ 63,356 KB
実行使用メモリ 18,944 KB
最終ジャッジ日時 2024-06-28 02:42:43
合計ジャッジ時間 2,278 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 16 ms
18,816 KB
testcase_01 AC 16 ms
18,688 KB
testcase_02 AC 16 ms
18,688 KB
testcase_03 AC 16 ms
18,816 KB
testcase_04 AC 15 ms
18,816 KB
testcase_05 AC 49 ms
18,688 KB
testcase_06 AC 82 ms
18,816 KB
testcase_07 AC 65 ms
18,816 KB
testcase_08 AC 60 ms
18,944 KB
testcase_09 AC 70 ms
18,816 KB
testcase_10 AC 77 ms
18,688 KB
testcase_11 AC 66 ms
18,816 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <stdio.h>

using namespace std;

int main (){
	long long int NNN,PX,PY;
	cin >> NNN >> PX >> PY;
	long int command[100000]={0};
	int check[100000]={0};
	long long int temp;
	for(int i =0;i<NNN;i++){
		cin >> temp;
		if(temp==1){
			check[i]=temp;
			cin >> temp;
			command[i]=temp;
			temp=0;
		}
		if(temp==2){
			check[i]=temp;
			cin >> temp ;
			command[i]=temp;
			temp=0;
		}
		if(temp==3){
			check[i]=temp;
			command[i]=-1;
		}
	}
	long long int matcom[100000][3][3]={0}; //各コマンドを行列化して格納する
	long long int ruicom[100000][3][3]={0}; //行列の積を格納する
	long long int comtemp=0;
	for(int i=0;i<NNN;i++){
		comtemp=0;	
		//command Dx
		if(check[i]==1){
			comtemp = command[i];

			for(int j=0;j<3;j++){
				for(int k=0;k<3;k++){
					if(j==k){
						matcom[i][j][k]=1;
					}
					else{
						matcom[i][j][k]=0;
					}

				}
			}

			matcom[i][0][2]=comtemp;
		}

		//command 90deg
		else if(check[i]==3){
			matcom[i][0][0]=0;
			matcom[i][0][1]=1;
			matcom[i][0][2]=0;
			matcom[i][1][0]=-1;
			matcom[i][1][1]=0;
			matcom[i][1][2]=0;
			matcom[i][2][0]=0;
			matcom[i][2][1]=0;
			matcom[i][2][2]=1;
		}

		//command Dy
		else if(check[i]==2){
			for(int j=0;j<3;j++){
				for(int k=0;k<3;k++){
					if(j==k){
						matcom[i][j][k]=1;
					}
					else{
						matcom[i][j][k]=0;
					}

				}
			}
			matcom[i][1][2]=command[i];
		}
		/*
		for(int j=0;j<3;j++){
			for(int k=0;k<3;k++){
				prlong long intf("%d",matcom[i][j][k]);
			}
			prlong long intf("\n");

		}
		prlong long intf("\n");
		*/

		

	}




	for(int i =NNN-1;i>-1;i--){
		//i=0は、なにもかけなくていいです
		if(i==NNN-1){
			for(int j=0;j<3;j++){
				for(int k=0;k<3;k++){
					ruicom[i][j][k]=matcom[i][j][k];
				}
			}
		}
		else {
			for(int j=0;j<3;j++){
				for(int k=0;k<3;k++){
					ruicom[i][j][k]=0;
					for(int l=0;l<3;l++){
						ruicom[i][j][k] += ruicom[i+1][j][l]*matcom[i][l][k];
					}
				}
			}			
		}
/*
		for(int j=0;j<3;j++){
			for(int k=0;k<3;k++){
				prlong long intf("%d",ruicom[i][j][k]);
			}
			prlong long intf("\n");
		}
		prlong long intf("\n");
	
*/	
	}
	long long int ansx=0;
	long long int ansy=0;
	for(int i=NNN-1;i>-1;i--){
		ansx = ruicom[NNN-1-i][0][0] * PX + ruicom[NNN-1-i][0][1]* PY + ruicom[NNN-1-i][0][2] * 1;
		ansy = ruicom[NNN-1-i][1][0] * PX + ruicom[NNN-1-i][1][1]* PY + ruicom[NNN-1-i][1][2] * 1;

		printf("%lld %lld\n",ansx,ansy);
	}

	return 0;
}
0