結果

問題 No.675 ドットちゃんたち
ユーザー bal4ubal4u
提出日時 2019-08-18 20:14:57
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 13 ms / 2,000 ms
コード長 1,601 bytes
コンパイル時間 1,096 ms
コンパイル使用メモリ 29,412 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-07-24 19:01:06
合計ジャッジ時間 3,809 ms
ジャッジサーバーID
(参考情報)
judge13 / judge15
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 0 ms
4,380 KB
testcase_01 AC 0 ms
4,376 KB
testcase_02 AC 1 ms
4,376 KB
testcase_03 AC 1 ms
4,384 KB
testcase_04 AC 0 ms
4,384 KB
testcase_05 AC 3 ms
4,380 KB
testcase_06 AC 13 ms
4,380 KB
testcase_07 AC 10 ms
4,384 KB
testcase_08 AC 7 ms
4,384 KB
testcase_09 AC 12 ms
4,384 KB
testcase_10 AC 12 ms
4,380 KB
testcase_11 AC 13 ms
4,380 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: 関数 ‘in’ 内:
main.c:7:14: 警告: 関数 ‘getchar_unlocked’ の暗黙的な宣言です [-Wimplicit-function-declaration]
    7 | #define gc() getchar_unlocked()
      |              ^~~~~~~~~~~~~~~~
main.c:15:24: 備考: in expansion of macro ‘gc’
   15 |         int n = 0, c = gc();
      |                        ^~
main.c: 関数 ‘out’ 内:
main.c:8:15: 警告: 関数 ‘putchar_unlocked’ の暗黙的な宣言です [-Wimplicit-function-declaration]
    8 | #define pc(c) putchar_unlocked(c)
      |               ^~~~~~~~~~~~~~~~
main.c:27:17: 備考: in expansion of macro ‘pc’
   27 |         if (!n) pc('0');
      |                 ^~

ソースコード

diff #

// yukicoder: 675 ドットちゃんたち
// 2019.8.18 bal4u

#include <stdio.h>

#if 1
#define gc() getchar_unlocked()
#define pc(c) putchar_unlocked(c)
#else
#define gc() getchar()
#define pc(c) putchar(c)
#endif

int in() {  // 整数の入力(負数対応)
	int n = 0, c = gc();
	if (c == '-') {	c = gc();
		do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
		return -n;
	}
	do n = 10*n + (c & 0xf), c = gc(); while (c >= '0');
	return n;
}

void out(int n) {  // 整数の表示(出力)
	int i; char b[30];

	if (!n) pc('0');
	else {
		if (n < 0) pc('-'), n = -n;
		i = 0; while (n) b[i++] = n % 10 + '0', n /= 10;
		while (i--) pc(b[i]);
	}
}

int x[100003], y[100003], r[100003];
int X, Y, R;

void rot(int dx, int dy, int r) {
	if      (r == 0) X += dx, Y += dy;
	else if (r == 1) X -= dy, Y += dx;
	else if (r == 2) X -= dx, Y -= dy;
	else             X += dy, Y -= dx;
}

void pr(int x, int y, int r) {
	int xx, yy;
	if      (r == 0) xx =  x, yy =  y;
	else if (r == 1) xx = -y, yy =  x;
	else if (r == 2) xx = -x, yy = -y;
	else             xx =  y, yy = -x;
	out(xx), pc(' '), out(yy), pc('\n');
}

int main()
{
	int i, N, Px, Py, Nx, Ny, Nr;
	
	N = in(), Px = in(), Py = in();
	for (i = 1; i <= N; i++) {
		int cmd, dx, dy;
		cmd = gc() & 3, gc();
		if (cmd != 3) {
			if (cmd == 1) dx = in(), dy = 0;
			else          dx = 0, dy = in();
			rot(dx, dy, R);
		} else if (++R == 4) R = 0;
		x[i] = X, y[i] = Y, r[i] = R;
	}
	Nx = x[N], Ny = y[N], Nr = (4-r[N]) % 4;

	for (i = 0; i < N; i++) {
		X = 0, Y = 0;
		rot(Px, Py, r[i]);
		pr(X+Nx-x[i], Y+Ny-y[i], Nr);
	}
	return 0;
}
0