스 택 시퀀스 문제 요약
3823 단어 알고리즘 학습
대체적으로 이미 알 고 있 는 요소 의 스 택 서열 을 구 한 다음 에 스 택 서열 을 구 하 는 것 이다.예 를 들 어 스 택 에 들 어 가 는 것 이 1, 2, 3, n 인 다음 에 가능 한 스 택 시퀀스 수 를 구하 고 정확 한 스 택 시퀀스 인지 판단 합 니 다.
다음은 내 가 만난 두 가지 문제 다.
묘사 하 다.
닝 닝 이 고려 한 것 은 다음 과 같은 문제 이다. 하나의 조작 수 서열 은 1, 2 에서 n 까지 이 고 창고 A 의 깊이 는 n 보다 크다.
현재 두 가지 조작 을 진행 할 수 있 습 니 다.
1. 하나의 수 를 조작 수 시퀀스 의 헤드 에서 스 택 의 헤드 로 이동 합 니 다 (데이터 구조 스 택 에 대응 하 는 push 작업)
2. 스 택 의 끝 에서 출력 시퀀스 의 끝 으로 숫자 를 이동 합 니 다 (데이터 구조 에 대응 하 는 pop 작업)
이 두 가지 조작 을 사용 하면 하나의 조작 수 서열 에서 일련의 출력 서열 을 얻 을 수 있 습 니 다. 다음은 1, 2, 3 에서 2, 3, 1 의 과정 을 이유 로 합 니 다.
동작 수: 1, 2, 3
창고:
출력 단자:
동작 수: 23
창고: 1 (창고 바닥)
출력 단자:
동작 수: 3
창고: 21 (창고 바닥)
출력 단자:
동작 수: 3
창고: 1 (창고 바닥)
출력 단자: 2
동작 수:
창고: 3 1 (창고 바닥)
출력 단자: 2
동작 수:
창고: 1 (창고 바닥)
출력 단자: 23
동작 수:
창고:
출력 단자: 23 1
현재 임의의 N 에 대해 입력 단의 데 이 터 는 반드시 1, 2, 3... N 입 니 다.
임의의 서열 에 대해 규칙 에 따라 이러한 서열 을 만 들 수 있 습 니까?
입력
첫 번 째 줄 은 정수 n (n < = 1000) 을 포함 하고 수열 의 길 이 를 표시 하 며 두 번 째 줄 은 n 개의 수 a1, a2,..., an 을 포함 하여 기대 순 서 를 표시 합 니 다.(a1,a2,…,an) ∈ Permutation{1, 2, …, n}
출력
만족 할 수 있다 면 Yes 를 출력 하 십시오. 그렇지 않 으 면 No 를 출력 합 니 다.
샘플 입력
5
1 2 3 5 4
샘플 출력
Yes
이 문제 풀이 사상 은 스 택 시퀀스 i 에 있 는 요소 A [i], i 위치 에 있 는 요소 입 니 다. A [i] 보다 작은 요소 가 존재 하면 내림차 순 으로 배열 해 야 합 니 다. 그렇지 않 으 면 오류 가 발생 합 니 다.
#include "stdio.h"
int main()
{
int num;
int *A;
int i,j,total;
int max=0;
int flag=0;
int wrong =0;
int temp,k;
while(scanf("%d",&num)!=EOF)
{
A =(int *)malloc(sizeof(int)*num);
for(i=0;iif(A[k]/ * A [i] 후의 요 소 를 확보 하고 A [i] 보다 작은 일정한 내림차 순 으로 배열 합 니 다 * /
{
if(A[k]
}
}
if(wrong==1)
{
printf("No");
break;
}
}
if(wrong==0)
printf("Yes");
free(A);
}
return 0;
}
다음 문 제 는 가능 한 스 택 시퀀스 를 구 하 는 것 입 니 다.
묘사 하 다.
닝 닝 이 고려 한 것 은 다음 과 같은 문제 이다. 하나의 조작 수 서열 은 1, 2 에서 n 까지 이 고 창고 A 의 깊이 는 n 보다 크다.
현재 두 가지 조작 을 진행 할 수 있 습 니 다.
1. 하나의 수 를 조작 수 시퀀스 의 헤드 에서 스 택 의 헤드 로 이동 합 니 다 (데이터 구조 스 택 에 대응 하 는 push 작업)
2. 스 택 의 끝 에서 출력 시퀀스 의 끝 으로 숫자 를 이동 합 니 다 (데이터 구조 에 대응 하 는 pop 작업)
이 두 가지 조작 을 사용 하면 하나의 조작 수 서열 에서 일련의 출력 서열 을 얻 을 수 있 습 니 다. 다음은 1, 2, 3 에서 2, 3, 1 의 과정 을 이유 로 합 니 다.
동작 수: 1, 2, 3
창고:
출력 단자:
동작 수: 23
창고: 1 (창고 바닥)
출력 단자:
동작 수: 3
창고: 21 (창고 바닥)
출력 단자:
동작 수: 3
창고: 1 (창고 바닥)
출력 단자: 2
동작 수:
창고: 3 1 (창고 바닥)
출력 단자: 2
동작 수:
창고: 1 (창고 바닥)
출력 단자: 23
동작 수:
창고:
출력 단자: 23 1
현재 임의의 N 에 대해 입력 단의 데 이 터 는 반드시 1, 2, 3... N 입 니 다.
나타 날 수 있 는 출력 단 데이터 시퀀스 의 종 수 를 구하 십시오.
입력
첫 번 째 행 위 는 T 조 데이터 가 있 음 을 나타 내 는 숫자 T 입 니 다.
각 조 의 데 이 터 는 하나의 정수 n (1 ≤ n ≤ 9) 만 포함 합 니 다.
출력
각 그룹의 데이터 에 대해 출력 이 얻 을 수 있 는 출력 시퀀스 의 총 항목
샘플 입력
1
3
샘플 출력
5
이 문제 의 풀이 방향 은 바로 재 귀 를 이용 하 는 것 이다. 모든 요 소 는 창고 에 한 번 만 들 어 갈 수 있 기 때문에 모든 요소 가 창고 에 들 어간 후에 이 상황 의 횟수 를 통계 하 는 것 이다.
#include "stdio.h"
int sum;
void dfs(int top,int head,int n)
{
if(head==n+1)
{
sum++;
return;
}
if(top>0)
{
dfs(top-1,head,n); /* , */
}
if(head
물론 제목 이 많이 바 뀌 었 으 니 창고 의 성격 을 잘 파악 한 후에 먼저 나 가면 된다.이렇게 하면 우리 가 문 제 를 푸 는 이기 가 될 거 야.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 매 결점의 왼쪽 아이와 오른쪽 아이를 교환하여 ~2020.8.13~ 학습노트두 갈래 체인 시계를 두 갈래 나무의 저장 구조로 삼아 두 갈래 나무의 각 결점의 왼쪽 아이와 오른쪽 아이를 교환한다. 두 갈래 나무의 순서를 입력하십시오.알림: 두 갈래 나무의 순서 서열은 문자열입니다. 문자가'#...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.