UVA 177 PaperFolding 종이접기 자국(분형, 귀속)
종이의 방향을 정하고 규칙을 발견하기 어렵지 않은 분형이다.
실현 방면에서는 교체할 수도 있고 귀속할 수도 있다.
도형 출력에 있어서 x와 y 좌표를 저장한 다음 순서를 표시하거나 맵을 사용합니다.
//Rey 2015.8.3
#include
using namespace std;
// r -> rl -> open -> ru
// -> rlrl -> open -> r ud l -> open -> ru lu
// -> rlrlrlrl -> open -> r ud lr ud l -> open -> ru ludr dl -> rulu ldlu
// -> rlrlrlrlrlrlrlrl -> r ud lr ud lr ud lr ud l -> ru
const int maxn = 14;
const int maxL = (1<<13)+5;
int dir[maxL];
int Rotate[maxL];
int r[maxL];
int x[maxL],y[maxL];
// up right down left
// 0 1 2 3
int dx[] = {-1,0,0, 0};
int dy[] = { 0,1,0,-1};
int mx[] = { 0,0,1, 0};
int my[] = { 0,1,0,-1};
char decode[] = {'|','_','|','_'};
bool cmp(int a,int b) { return x[a] < x[b] || ( x[a] == x[b] && y[a] < y[b] ); }
void solve(int n)
{
int N = (1<<n);
// fold
for(int i = 0, tmp[2] = {1,3}; i < N; i++) dir[i] = tmp[i&1];
memset(Rotate,0,sizeof(int)*N);
//open
//mark
for(int i = 1 ; i <= n; i++) {
int seg = 1<<i;
for(int j = 1<1); j < N; j += seg<<1){
for(int k = 0; k < seg && j+k < N; k++)
Rotate[j+k]++;
}
}
//rotate and calculate position
int minx = 0,miny = 0;
x[0] = y[0] = 0;
for(int i = 1; i < N; i++){
int &u = dir[i] , u2 = dir[i-1];
u = (u + Rotate[i])%4;
x[i] = x[i-1] + dx[u2] + mx[u] ;
y[i] = y[i-1] + dy[u2] + my[u] ;
minx = min(minx,x[i]);
miny = min(miny,y[i]);
}
//normalize
for(int i = 0; i < N; i++){
x[i] -= minx;
y[i] -= miny;
}
for(int i = 0; i < N; i++) r[i] = i;
sort(r,r+N,cmp);
int prex = 0,prey = -1;
for(int i = 0; i < N; i++){
int id = r[i];
if(x[id] != prex) putchar('
'),prey = -1;
for(int j = prey+1; j < y[id]; j++) putwchar(' ');
putchar(decode[dir[id]]);
prey = y[id]; prex = x[id];
}
printf("
^
");
}
int main()
{
// freopen("out.txt","w",stdout);
int n;
while(scanf("%d",&n),n){
solve(n);
}
return 0;
}
다음으로 전송:https://www.cnblogs.com/jerryRey/p/4699728.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.