데이터 구조의 선형 표 제목 총화

제목 은 모두 유 여가 의 에서 나 왔 다.
제목 은 모두 대열, 창고, 체인 시계 가 연결 되 어 있다.문 제 를 푸 는 과정 에서 STL 과 배열 시 뮬 레이 션 두 가지 방식 을 교차 시 켜 사용 하면 데이터 구조 에 대한 이 해 를 강화 할 수 있다.
"Accordian" Patience uva 127
52 장의 카드 를 주 고 각 카드 가 그의 왼쪽 이나 왼쪽 세 번 째 카드 와 색깔 이 같 거나 숫자 가 같 으 면 해당 카드 의 위 에 올 려 놓는다.통계 마지막 에 몇 무더기 의 카드 가 남 았 는데, 한 무더기 의 카드 가 몇 장 씩 있다.
사고방식 은 52 개의 창 고 를 구축 하고 시 뮬 레이 션 을 하 는 것 이다. 왼쪽 에서 시작 하고 매번 조작 할 때마다 왼쪽 에서 다시 시작한다.배열 시 뮬 레이 션 스 택.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 55
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
struct Card
{
    char a[3];
} card[maxn];
int s[maxn][maxn];
int top[maxn];
bool com(Card x,Card y)
{
    if(x.a[0]==y.a[0]||x.a[1]==y.a[1])
        return 1;
    return 0;
}
int main()
{
    while(1)
    {
        for(int i=0; i<52; i++)
        {
            scanf("%s",card[i].a);
            top[i]=1;
            s[i][1]=i;
            if(card[i].a[0]=='#')
                return 0;
        }
        while(1)
        {
            bool jud=0;
            for(int i=0; i<52; i++)
            {
                if(top[i]>0)
                {
                    int rec=0,s1=-1,s2=-1;
                    for(int j=i-1; j>=0; j--)
                    {
                        if(top[j]>0)
                        {
                            rec++;
                            if(rec==1)
                                s1=j;
                            if(rec==3)
                            {
                                s2=j;
                                break;
                            }
                        }
                    }
                    if(s2!=-1)
                    {
                        if(com(card[s[s2][top[s2]]],card[s[i][top[i]]]))
                        {
                            jud=1;
                            top[s2]++;
                            s[s2][top[s2]]=s[i][top[i]];
                            top[i]--;
                            break;
                        }
                    }
                    if(s1!=-1)
                    {
                        if(com(card[s[s1][top[s1]]],card[s[i][top[i]]]))
                        {
                            jud=1;
                            top[s1]++;
                            s[s1][top[s1]]=s[i][top[i]];
                            top[i]--;
                            break;
                        }
                    }
                }
            }
            if(jud==0)
                    break;
        }
        int ans=0;
        for(int i=0; i<52; i++)
        {
            if(top[i])
                ans++;
        }
        if(ans>1)
        printf("%d piles remaining: ",ans);
        else printf("1 pile remaining: ");
        int jud2=0;
        for(int i=0; i<52; i++)
        {
            if(top[i]&&jud2==0)
            {
                printf("%d",top[i]);
                jud2=1;
            }
            else if(top[i])
                printf(" %d",top[i]);
        }
        printf("
"); } }

The Blocks Problem uva 101
나무토막 놀이,
모두 네 가지 조작 으로 나 무 를 이동한다.
위의 문제 와 유사 하고 스 택 의 조작 이 므 로 각각 시 뮬 레이 션 하면 된다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 30
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int top[maxn];
int b[maxn][maxn];
int main()
{
    int tot;
    scanf("%d",&tot);
    for(int i=0; i

The Dole Queue uva 133
두 사람 이 한 대열 에 있 고 하 나 는 처음부터 세 고 하 나 는 끝에서부터 세 며 각각 K, M 까지 셀 때 이 사람의 위치 번 호 를 출력 한 다음 에 사람 이 팀 에서 나온다.링크 제목 입 니 다. 직접 배열 로 썼 습 니 다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 30
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int main()
{
    int tot,k,m,rec1,rec2;
    int vv[maxn];
    while(scanf("%d%d%d",&tot,&k,&m))
    {
        if(!tot&&!k&&!m)
            return 0;
        memset(vv,0,sizeof(vv));
        int ans=0,fro=0,las=tot+1,i,j;
        while(ans!=tot)
        {
            i=0;
            j=0;
            while(itot)
                    fro-=tot;
                if(!vv[fro])
                    i++;

                if(i==k)
                    rec1=fro;


            }
            while(j

ShellSort uva 10152
맨 위 에서 맨 아래 까지 의 모든 거북이 의 이름 을 알려 주 고 위 에서 아래로 의 모든 거북이 의 이름 을 알려 준다.매번 조작 은 어떤 거북 이 를 팀 수비 의 위치 로 끌 어 올 리 는 것 이다.최소한 의 조작 을 통 해 초기 배열 을 요구 하 는 배열 로 만들어 야 한다.
이 문 제 는 제 가 생각 한 시간 이 비교적 길 어서 처음에는 어떻게 처리 해 야 할 지 몰 랐 습 니 다. 처음에 두 개의 머리 부터 두 개의 대열 을 비교 한 것 같 았 습 니 다. 다른 곳 을 발견 하면 요구 하 는 거북 이 를 팀 의 선두 에 올 렸 습 니 다.이것 은 옳지 않다 는 것 을 알 수 있다. 왜냐하면 나중에 제기 한 거북 이 는 먼저 제기 한 거북이 위로 올 라 가 문제 의 뜻 에 부합 되 지 않 기 때문이다.생각해 보 니 대열 을 찾 는 것 이 조작 후 마지막 으로 존재 하 는 다른 거북이 일 것 이다.그리고 원 하 는 대열 에 있 는 이 거북이 이전의 거북 이 를 거꾸로 출력 하 세 요.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 160
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int main()
{
    char name[205][85];
    char aa[85];
    int pre[205];
    int nex[205];
    int vv[205];
    int tot;
    scanf("%d",&tot);
    for(int ii=0; ii=0;i--)
        puts(name[nex[i]]);
        printf("
"); } }

Parentheses Balance uva 673
괄호 일치 문제.모든 괄호 가 좌우 로 일치 하고 '([)]' 와 같은 오류 가 발생 하지 않 으 며 괄호 가 남아 있 지 않 으 면 Yes 를 출력 합 니 다. 그렇지 않 으 면 No.스 택 을 만 들 고 왼쪽 괄호 를 스 택 에 들 어 가 는 것 이 생각 입 니 다. 다음 반 괄호 가 스 택 의 첫 번 째 와 일치 하면 스 택 에서 계속 나 가 고 일치 하지 않 으 면 No 로 돌아 갑 니 다.마지막 으로 스 택 이 비어 있 지 않 으 면 No 로 돌아 갑 니 다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 140
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int main()
{
    char aa[maxn];
    int tot;
    scanf("%d",&tot);
    getchar();

    for(int i=0; iqq;
        while(!qq.empty())
        {
            qq.pop();
        }
        int len=strlen(aa);
        int jud=0;
        for(int i=0; i

Matrix Chain Multiplication uva 442
행렬 체인 곱 하기 문제.또한 괄호 와 일치 하 는 문제 로 행렬 을 조작 하 는 것 입 니 다. 매 행렬 의 곱셈 은 하나의 괄호 안에서 진행 되 기 때문에 오른쪽 괄호 가 나타 날 때마다 스 택 에서 두 개의 행렬 을 꺼 내 행렬 곱셈 을 합 니 다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 160
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
struct B
{
    char n;
    int x,y;
} b[30];
int main()
{
    int tot;char x;
    char aa[maxn];
    B top1,top2;
    scanf("%d",&tot);
    for(int i=0; i qq;
        while(!qq.empty())
        qq.pop();
        int ans=0;
        bool jud=0;
        for(int i=0;i

Generalized Matrioshkas uva 11111
제목 은 '투 아' 의 활동 을 말 하 는데 모든 투 아 는 전체 크기 가 그 자체 보다 작은 몇 개의 투 아 를 묶 을 수 있다.제 시 된 패키지 조합 이 한 번 의 정확 한 매 칭 을 완성 할 수 있 는 지 물 었 다.문제 와 괄호 가 일치 하 는 것 은 유사 하지만 판단 조건 이 바 뀌 어 크기 의 판단 이 되 고 자신의 판단 두 부분 이 된다.창고 의 응용.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 160
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int main()
{
    int num[50005],hold[50005],t[50005];
    char a;
    int ii=0,jud=0,top=0;
    memset(num,0,sizeof(num));
    memset(hold,0,sizeof(hold));
    memset(t,0,sizeof(t));
    while(scanf("%d%c",&num[ii],&a)!=EOF)
    {
        top=0;
        if(a==' ')
        {
            ii++;
            continue;
        }
        t[0]=MAX;
        for(int i=0; i<=ii; i++)
        {
            if(num[i]<0)
            {
                top++;
                t[top]=num[i]*(-1);
                hold[top]=0;
            }
            if(num[i]>0)
            {
                if(top<=0)
                {
                    jud=1;
                    break;
                }
                if(num[i]-t[top]!=0)
                {
                    jud=1;
                    break;
                }
                top--;
                hold[top]+=t[top+1];
                if(hold[top]>=t[top])
                {
                    jud=1;
                    break;
                }
            }
        }
        if(top!=0)
        jud=1;
        if(jud)
            printf(":-( Try again.
"); else printf(":-) Matrioshka!
"); ii=0; jud=0; top=0; memset(num,0,sizeof(num)); memset(hold,0,sizeof(hold)); memset(t,0,sizeof(t)); } }

Expressions uva 11234
책 에서 비슷 한 지식 을 본 적 이 있 습 니 다. 스 택 의 입력 방식 으로 소문 자 num 을 잎 으로 하고 대문자 operation 을 가지 로 하 며 뿌리 가 있 는 이 진 트 리 를 모 의 했 습 니 다.다만 출력 대기 열 이 어떤 규칙 인지 이해 하기 어 려 운 것 을 보고 펜 으로 잠시 썼 더 니 층 차 가 옮 겨 다 니 는 것 을 발견 했다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 10005
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int main()
{
    char aa [maxn];
    int head [maxn];
    int top[maxn];
    int tot;
    scanf("%d",&tot);
    for(int ii=0; iiq;
        int len=strlen(aa);
        for(int i=0;im)
            m=ans;
        }
        for(int i=m;i>=0;i--)
        {
            for(int j=len-1;j>=0;j--)
            if(top[j]==i)
            printf("%c",aa[j]);
        }
        printf("
"); } }

Team Queue uva 540
단체 대열, 이 이름 은 이전에 들 어 본 적 이 없어 서 문 제 를 보 니 매우 재미있다.대기 열 에 서로 다른 그룹 에 존재 하 는 숫자 는 반드시 연속 적 으로 나타 날 것 이다.이렇게 하면 처리 하기 쉽다. 각 조 에 독립 된 대열 을 세운 다음 에 하나의 대열 을 만들어 모든 조 가 대열 에 들 어 가 는 선후 순 서 를 기록한다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define maxn 1005
#define INF 1<<25
#define MAX 0x7fffffff
typedef long long ll;
using namespace std;
int bb[maxn*maxn],y;
int tot,tt[maxn];
int main()
{
    char ss[20];
    //int aa[maxn][maxn];
    queue  qq[maxn];
    queue pp;
    int ii=0;
    while(scanf("%d",&tot))
    {
        if(tot==0)
            return 0;
        printf("Scenario #%d
",++ii); queue qq[maxn]; queue pp; for(int i=0; i

Hartals uva 10050
알 겠 습 니 다. 이 문 제 는 왜 여기에 나 왔 는 지 모 르 겠 습 니 다. 그림 은 무 섭 고 제목 은 간단 합 니 다. 바로 1 ~ N 에서 며칠 동안 파티 에 표 시 된 것 을 보 는 것 입 니 다. 즉, pp [] 의 배수 입 니 다. 주말 에 꼭 기억 하 세 요.물이 넘다.
코드:
4. 567913. 이 문제 들 을 영어 로 읽 은 저 는 피 를 토 했 습 니 다. 보기 만 해도 짜증 이 납 니 다.책 을 따라 계속 하 는 동시에 자신의 사 고 를 단련 해 야 한다.

좋은 웹페이지 즐겨찾기