結果
| 問題 | No.675 ドットちゃんたち | 
| コンテスト | |
| ユーザー |  hato_gen_tsuki | 
| 提出日時 | 2018-05-09 14:47:52 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.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 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 8 | 
ソースコード
#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;
}
            
            
            
        