UVA10205 - Stack 'em Up(模拟)

UVA10205 - Stack ‘em Up(模拟)

题目链接

题目大意:给你52张牌,这些牌一开始就有个顺序。现在给你每次的洗牌动作,52个数Ai,表示第i个位置上的牌放到Ai位置。意思就是能够通过这次洗牌,可以将i位置上的牌放到Ai位置上。至于后面的牌要不要移动什么的,根本不考虑。反正就是通过这次的洗牌,我给你52个数,把每个位置上的牌更新了一下。

解题思路:之前的题意看错,还以为是每次洗牌然后插入,后面才发现题意是这样的。那么只需要记录下上次洗牌的每个位置的牌,然后在将这次洗牌动作后的每个位置的牌更新,模拟洗牌,最后输出每个位置的牌。

代码:

#include <cstdio>
#include <vector>

using namespace std;

const char Suit[4][10] = {"Clubs", "Diamonds", "Hearts", "Spades"};
const char Value[13][10] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};
const int maxn = 105;

int op[maxn][52];
int d[52];

struct card {
    int suit;
    int value;
    card(int suit = 0, int value = 0) {
        this->suit = suit;
        this->value = value;
    }
};

vector<card> v;

void init () {

    for (int i = 0; i < 52; i++)
        d[i] = i;
}

void Operator (int K) {

    int c[52];
    for (int i = 0; i < 52; i++)
        c[i] = d[op[K][i] - 1];

    for (int i = 0; i < 52; i++)
        d[i] = c[i];
}

void output() {

    for (int i = 0; i < 52; i++)
        printf ("%s of %s\n", Value[v[d[i]].value], Suit[v[d[i]].suit]);
}

int main () {

    int T, N, K;
    char str[maxn];
    scanf ("%d", &T);

    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 13; j++)
            v.push_back(card(i, j));

    while (T--) {
        scanf ("%d", &N);
        init();

        for (int i = 0; i < N; i++)
            for (int j = 0; j < 52; j++)
                scanf ("%d", &op[i][j]);

        getchar();
        while (gets(str) != NULL && str[0] != ‘\0‘) {
                sscanf (str, "%d", &K);
                Operator(K - 1);
        }

        output();
        if (T)
            printf ("\n");
    }
    return 0;
}

UVA10205 - Stack 'em Up(模拟)

时间: 2024-10-13 01:02:55

UVA10205 - Stack 'em Up(模拟)的相关文章

UVA 10205 Stack &#39;em Up

直接模拟就好. #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string&

POJ 2993 Emag eht htiw Em Pleh 模拟

http://poj.org/problem?id=2993 模拟大法好. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 char q[10],w[100]; 6 char e[10],r[100]; 7 char white[12]= {'K','Q','R','B','N','P'}; 8 char black[12]= {'k','q','r

快速切题 poj 2993 Emag eht htiw Em Pleh 模拟

Emag eht htiw Em Pleh Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2806   Accepted: 1865 Description This problem is a reverse case of the problem 2996. You are given the output of the problem H and your task is to find the correspond

用LinkedList模拟一个堆栈或者队列数据结构 总结: LinkedList知识点

/** 用LinkedList模拟一个堆栈或者队列数据结构. 创建一个堆栈和队列数据结构对象,该对象中使用LinkedList来完成的. 知识点总结: 1.LinkedList特点:链表式数据结构. 重复有序,查询速度慢,增删速度快.不同步的. 2.LinkedList除了实现List接口增删改查的功能外,有一些特有的方法,能够实现在List(列表)的开头和结尾 插入,删除,获取等特有功能.这就是为什么LinkedList能够模拟一个堆栈,或者队列,双端队列的数据结构了. 涉及知识点: 1.什么

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************

Java 集合补充

集合大致可以分List,Set,Queue,Map四种体系. 集合和数组不一样,数组元素可以是基本类型的值,也可以是对象(的引用变量),集合里只能保存对象(的引用变量). 访问:如果访问List集合中的元素可以根据元素的索引,访问Map集合中的元素可以根据元素的key,访问Set集合中的元素只能根据元素本身来访问. Collection操作: public class CollectionTest { public static void main(String[] args) { Collec

数据结构与算法的学习-栈

栈的学习 栈存储数据是先进后出的形式 用java语言来实现的话如下 package com.example;   import java.util.Stack;   /**  * @author ChenLang 模拟栈的先进后出等  */ public class StackDemo {          int[] stack;          int top;//表示栈顶            public StackDemo() {                    stack =

第八章.Java集合

Java集合类是一种特别有用的工具类,可用于存储数量不等的对象.Java集合大致可分为Set.List.Queue和Map四种体系 Set代表无序.不可重复的集合 List代表有序.重复的集合 Map代表具有映射关系的集合 Java5又增加了Queue代表一种队列集合 java集合概述: 为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),java提供了集合类. 集合类主要负责保存.盛装其他数据,因此,集合类也被称为容器类.所有的集合类都在java.util包下,后来为了处