LiveArchive4403 ASCII Diamondi
解説
描画する文字の位置に対応する文字を探してやれば、描画する長方形の範囲の計算量 40000 × テストケース 125 で解ける。
#include <bits/stdc++.h> using namespace std; #define SIZE_N (2*N-1) char change(int x, int y, int N) { int ax = N, ay = N; x %= SIZE_N; y %= SIZE_N; x = max(x, SIZE_N-x-1); y = max(y, SIZE_N-y-1); if((x+1-ax)+(y+1-ay) >= N) return '.'; return ((x+1+y+1)%N) % 26 + 'a'; } int main() { int N, y1, x1, y2, x2; int Tcnt = 1; while(cin >> N >> y1 >> x1 >> y2 >> x2) { if(N == 0) break; cout << "Case " << Tcnt++ << ":\n"; for(int Y=y1; Y<=y2; Y++) { for(int X=x1; X<=x2; X++) { printf("%c", change(X, Y, N)); } puts(""); } } return 0; }