zoukankan      html  css  js  c++  java
  • HDU 5071 Chat

    题意:

    CLJ找了很多妹子…  (题目好没节操…)  对于CLJ和妹子的聊天对话框  有一下几种操作:

    add  加一个妹子在聊天窗队列末尾  假设这个妹子已经在队列中则add失败

    close  关掉某个妹子的聊天窗体  假设没有这个妹子的对话框则close失败  假设成功要输出和这个妹子说过几个词

    chat  和最前面妹子说一些话  假设没有窗体打开则chat失败

    rotate  将某个妹子移到最前面  假设寻找妹子时发现超出队列范围则rotate失败

    prior  将优先级最高妹子移到最前面  假设没有对话框则prior失败

    choose  选择某个妹子移到最前面  假设该妹子不在队列则choose失败

    top  选择某个妹子将她的状态变为总在最前  假设妹子不在队列则top失败  假设以前有总在最前的妹子  则代替之

    untop  撤销总在最前状态  假设没人总在最前则untop失败

    最后依照队列顺序  与每个以前说过话的妹子道别

    思路:

    模拟题…  写写写…

    总在最前是一种状态  要理解  它并不直接改变队伍形状

    即  第三个妹子被top  再被untop  这时这个妹子依旧站在第三个位置上

    注意几个坑点:

    close时候可能关掉的是总在最前的妹子的对话框  这时总在最前也同一时候消失

    chat要用__int64存储每一个妹子对话过几个词

    最后道别时候应该先于总在最前的妹子道别

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<set>
    #include<vector>
    #include<queue>
    #include<cstdlib>
    #include<ctime>
    #include<cmath>
    #include<bitset>
    using namespace std;
    typedef __int64 LL;
    #define M 5010
    
    struct girl {
        int prior;
        LL word;
    } g[M];
    int T, n, tot, alwaysontop;
    
    int main() {
        int i, u, j, success, w, x;
        char op[30];
        scanf("%d", &T);
        while (T--) {
            scanf("%d", &n);
            tot = 0;
            alwaysontop = -1;
            for (i = 1; i <= n; i++) {
                printf("Operation #%d: ", i);
                scanf("%s", op);
                if (strcmp(op, "Add") == 0) {
                    scanf("%d", &u);
                    success = 1;
                    for (j = 0; j < tot; j++) {
                        if (g[j].prior == u) {
                            success = 0;
                            break;
                        }
                    }
                    if (success) {
                        printf("success.
    ");
                        g[tot].prior = u;
                        g[tot].word = 0;
                        tot++;
                    } else
                        printf("same priority.
    ");
                } else if (strcmp(op, "Close") == 0) {
                    scanf("%d", &u);
                    success = 0;
                    for (j = 0; j < tot; j++) {
                        if (g[j].prior == u) {
                            success = 1;
                            u = j;
                            break;
                        }
                    }
                    if (success) {
                        if (g[u].prior == alwaysontop)
                            alwaysontop = -1;
                        printf("close %d with %I64d.
    ", g[u].prior, g[u].word);
                        for (j = u; j < tot; j++)
                            g[j] = g[j + 1];
                        tot--;
                    } else
                        printf("invalid priority.
    ");
                } else if (strcmp(op, "Chat") == 0) {
                    scanf("%d", &w);
                    if (alwaysontop != -1) {
                        for (u = 0; u < tot; u++) {
                            if (g[u].prior == alwaysontop) {
                                g[u].word += w;
                                break;
                            }
                        }
                        printf("success.
    ");
                    } else if (tot > 0) {
                        g[0].word += w;
                        printf("success.
    ");
                    } else
                        printf("empty.
    ");
                } else if (strcmp(op, "Rotate") == 0) {
                    scanf("%d", &x);
                    if (x >= 1 && x <= tot) {
                        x--;
                        while (x) {
                            swap(g[x], g[x - 1]);
                            x--;
                        }
                        printf("success.
    ");
                    } else
                        printf("out of range.
    ");
                } else if (strcmp(op, "Prior") == 0) {
                    if (tot) {
                        u = 0;
                        for (j = 1; j < tot; j++) {
                            if (g[j].prior > g[u].prior)
                                u = j;
                        }
                        while (u) {
                            swap(g[u], g[u - 1]);
                            u--;
                        }
                        printf("success.
    ");
                    } else
                        printf("empty.
    ");
                } else if (strcmp(op, "Choose") == 0) {
                    scanf("%d", &u);
                    success = 0;
                    for (j = 0; j < tot; j++) {
                        if (g[j].prior == u) {
                            success = 1;
                            u = j;
                            break;
                        }
                    }
                    if (success) {
                        while (u) {
                            swap(g[u], g[u - 1]);
                            u--;
                        }
                        printf("success.
    ");
                    } else
                        printf("invalid priority.
    ");
                } else if (strcmp(op, "Top") == 0) {
                    scanf("%d", &u);
                    success = 0;
                    for (j = 0; j < tot; j++) {
                        if (g[j].prior == u) {
                            success = 1;
                            break;
                        }
                    }
                    if (success) {
                        alwaysontop = u;
                        printf("success.
    ");
                    } else
                        printf("invalid priority.
    ");
                } else if (strcmp(op, "Untop") == 0) {
                    if (alwaysontop != -1) {
                        alwaysontop = -1;
                        printf("success.
    ");
                    } else
                        printf("no such person.
    ");
                }
            }
            if (alwaysontop != -1) {
                for (j = 0; j < tot; j++) {
                    if (g[j].prior == alwaysontop) {
                        u = j;
                        break;
                    }
                }
                if (g[u].word)
                    printf("Bye %d: %I64d
    ", g[u].prior, g[u].word);
            }
            for (j = 0; j < tot; j++) {
                if (g[j].word && g[j].prior != alwaysontop) {
                    printf("Bye %d: %I64d
    ", g[j].prior, g[j].word);
                }
            }
        }
        return 0;
    }


  • 相关阅读:
    arcgis api for flex 开发入门
    Error #2148
    为Flex Builder设置测试服务器
    地图服务报 error #2035
    springMVC整理03--处理数据模型 & 试图解析器 & @ResponseBody & HttpEntity
    FastDFS安装与使用
    springMVC整理02--常用注解的使用
    springMVC整理01--搭建普通的工程
    Spring模块介绍
    spring05-Spring事务管理
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5092720.html
Copyright © 2011-2022 走看看