`
暴风雪
  • 浏览: 389181 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[模拟]hdoj 5071

 
阅读更多

大致题意:

       自己读

 

大致思路:

       直接模拟,注意坑点:word值要用longlong,删除掉的点可能是always on top点,最后say goodbye的时候要先和top的人说

       不明白的一点是,明明参数值会达到10^9为什么不能用hashmap?

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
const int nMax=10010;
int n,num[nMax],id[nMax],u,mtt;
long long word[nMax],x;
char str[101];
map<int ,int>mpp,rempp;
int hashmap(int a){
    rempp[a]=a;
    return a;
//    if(mpp[a]!=0)return mpp[a];
//    else{
//        mpp[a]=++mtt;
//        rempp[mpp[a]]=a;
//    }
//    return mpp[a];
}
int main(){
    int i,j,k,tcs,tot,aot,a,tmp;
    cin>>tcs;
    while(tcs--){
        cin>>tot;
        tmp=1;
        n=0;
        aot=-1;
        mtt=0;
        mpp.clear();
        rempp.clear();
        memset(word,0,sizeof(word));
        memset(id,-1,sizeof(id));
        while(tot--){
            scanf("%s",str);
            if(strcmp(str,"Add")==0){
                cin>>u;
                u=hashmap(u);
                printf("Operation #%d: ",tmp++);
                if(id[u] != -1){
                    cout<<"same priority.\n";
                }else{
                    num[++n] = u;
                    id[u] = n;
                    cout<<"success.\n";
                }
            }else if(strcmp(str,"Close")==0){
                cin>>u;
                u=hashmap(u);
                printf("Operation #%d: ",tmp++);
                if(id[u]==-1){
                    cout<<"invalid priority.\n";
                }else{
                    if(aot==u)aot=-1;
                    for(i=id[u];i<n;i++){
                        num[i]=num[i+1];
                        id[num[i]]--;
                    }n--;
                    printf("close %d with %I64d.\n",rempp[u],word[u]);
                    word[u]=0;
                    id[u]=-1;
                }
            }else if(strcmp("Chat",str)==0){
                cin>>x;
                printf("Operation #%d: ",tmp++);
                if(n==0){
                    printf("empty.\n");
                }else{
                    if(aot==-1){
                        word[num[1]]+=x;
//                        cout<<num[1]<<" add "<<x<<endl;
                    }else{
                        word[aot]+=x;
//                        cout<<aot<<" add "<<x<<endl;
                    }
                    cout<<"success.\n";
                }
            }else if(strcmp("Rotate",str)==0){
                cin>>x;
                printf("Operation #%d: ",tmp++);
                if(x>n||x<1){
                    printf("out of range.\n");
                }else{
                    a=num[x];
                    for(i=x;i>1;i--){
                        num[i]=num[i-1];
                        id[num[i]]++;
                    }
                    id[a]=1;
                    num[1]=a;
                    cout<<"success.\n";
                }
            }else if(strcmp("Prior",str)==0){
                printf("Operation #%d: ",tmp++);
                if(n == 0){
                    cout<<"empty."<<endl;
                }else{
                    int bbg=0;
                    for(i=1;i<=n;i++){
                        if(rempp[num[i]]>=bbg){
                            bbg=rempp[num[i]];
                            x=i;
                        }
                    }
//                     x = max_element(num+1,num+n+1) - num ;
                     ///////////////////////////////////////
                     ///bug
                     /////////////////////////////////////
                    a=num[x];
                    for(i=x;i>1;i--){
                        num[i]=num[i-1];
                        id[num[i]]++;
                    }
                    id[a]=1;
                    num[1]=a;
                    cout<<"success.\n";
                }

            }else if(strcmp("Choose",str)==0){
                cin>>u;
                u=hashmap(u);
                printf("Operation #%d: ",tmp++);
                x = id[u];
                if(x==-1){
                    cout<<"invalid priority.\n";
                }else{
                    a=num[x];
                    for(i=x;i>1;i--){
                        num[i]=num[i-1];
                        id[num[i]]++;
                    }
                    id[a]=1;
                    num[1]=a;
                    cout<<"success.\n";
                }
            }else if(strcmp("Top",str)==0){
                cin>>u;
                u=hashmap(u);
                printf("Operation #%d: ",tmp++);
                if(id[u]==-1){
                    cout<<"invalid priority.\n";
                }else{
                    aot=u;
                    cout<<"success.\n";
                }
            }else if(strcmp("Untop",str)==0){
                printf("Operation #%d: ",tmp++);
                if(aot==-1){
                    cout<<"no such person.\n";
                }else{
                    aot=-1;
                    cout<<"success.\n";
                }
            }
        }
        if(aot!=-1&&word[aot]){
            a=rempp[aot];
            printf("Bye %d: %d\n",a,word[aot]);
        }
        for(i=1;i<=n;i++){
            if(word[num[i]]!=0){
                a=rempp[num[i]];
                if(a!=aot)printf("Bye %d: %d\n",a,word[num[i]]);
            }
        }
    }
    return 0;
}

 

1
0
分享到:
评论

相关推荐

    HDOJ题目分类 HDOJ题目分类

    5. **应用领域**:字符串处理、网络流、模拟、游戏理论等。 【压缩包子文件的文件名称列表】:HDOJ题目分类.pdf 这个PDF文档很可能包含了HDOJ平台上所有题目的详细分类列表,每种分类下可能有对应的题目编号、题目...

    HDOJ离线版

    3. **实战训练**:题目覆盖ACM/ICPC竞赛题型,模拟比赛环境,有助于准备各类编程竞赛,如NOIP(全国青少年信息学奥林匹克联赛)、ACM区域赛等。 4. **自我评估**:离线版的题目通常配有测试数据,你可以提交自己的...

    hdoj1002——大整数相加

    具体来说,是通过对每一位进行处理并记录进位的方式来模拟加法操作。 3. **数组与循环:** - 程序中定义了一个足够大的数组 `c[NM+1]` 来存储相加的结果。这里 `NM` 定义为 `10000`,足以容纳题目中可能出现的...

    hdoj.rar_HDOJ _OJ_oj_如何卡oj

    4. **模拟测试**:在提交到OJ之前,用户可以在本地环境中使用类似的数据进行模拟测试,以减少不必要的网络延迟和无效提交。 5. **代码复用**:在解决不同题目时,合理复用已有的代码片段,提高解题效率。 6. **...

    hdoj解题代码

    这些文件是针对“hdoj”(HDU Online Judge)在线编程竞赛平台的解题代码,涵盖了题目编号从1000到1050的若干题目。HDU Online Judge是一个用于训练和测试编程技能的系统,用户可以提交代码解决各种算法问题,并获取...

    hdoj杭电入门训练题

    ### hdoj杭电入门训练题 #### 概述 杭电在线评测系统(HDOJ)是中国杭州电子科技大学提供的一套在线编程题库平台,主要用于计算机程序设计竞赛(ACM-ICPC)的训练与选拔。对于初学者而言,通过解决HDOJ中的题目可以...

    HDOJ杭州电子科技大学ACM离线版下载

    通常,这样的应用程序会包含一个模拟在线环境的界面,允许用户提交代码,运行测试用例,并查看结果,所有操作都在本地完成。 总结起来,HDOJ杭州电子科技大学ACM离线版是一个专为编程爱好者和ACM竞赛参与者设计的...

    杭电ACM HDOJ2000~2099 JAVA解题源码

    在这些源码中,我们可以看到JAVA的类和对象被巧妙地用于模拟问题的实体和关系,而JAVA的异常处理机制则确保了程序在遇到错误时能够优雅地处理。 在ACM题目中,常见的算法类型包括但不限于:排序与搜索(如快速排序...

    HDOJ暑期多校联赛第三场

    【HDOJ暑期多校联赛第三场】是2013年举办的一场面向广大编程爱好者的在线竞赛,由IOI(国际奥林匹克信息学竞赛)的冠军CLJ设计题目,旨在提升参赛者的信息学和算法解决能力。这次比赛涵盖了丰富的编程和算法知识点,...

    HDOJ.zip_hduoj100题

    【HDOJ.zip_hduoj100题】是一个压缩包文件,包含了HDUOJ(杭州电子科技大学在线评测系统)的约100道编程练习题目及其源代码。这个资源对于想要提升编程技能,尤其是对算法和数据结构有深入学习需求的程序员来说,是...

    HDOJ2051-2099 acm的AC解题报告

    这些文件是关于ACM(国际大学生程序设计竞赛,简称ICPC)比赛的解题报告,主要涵盖杭电(杭州电子科技大学)在线评测系统HDOJ(HDU Online Judge)中的题目2051到2099。在ACM竞赛中,参赛队伍需要解决一系列算法问题...

    2013HDOJ暑期多校联赛第三场解题报告

    生命游戏是英国数学家约翰·康威在1970年代提出的一种细胞自动机模型,其规则简单而演化复杂,能够模拟生命体的出生、死亡与繁殖过程。此题可能要求玩家在给定的初始状态下,按照生命游戏的规则进行一定代数的演化,...

    图上博弈题解1

    5. **HDOJ 3590**: 同HDOJ 3197,但是加入了先手和后手的角色,询问哪位玩家能获胜。解题方法类似,需要考虑多棵树的NIM游戏情况。 6. **POJ 3710**: 包含多个局部联通的图,玩家交替删除边,形成与根节点不相连的...

    ACM杭电入门训练题

    3. **HDOJ2001**: “A+B Problem”类型题目,要求计算两个数字的和,是算法竞赛中的经典问题,用于测试基本的数学运算和输入输出能力。 4. **HDOJ2005**: 可能涉及稍微复杂的数学问题或简单算法,如求最小公倍数等...

    杭电2010ACM培训ppt

    同时,由于是杭州电子科技大学的内部培训资料,其中可能还包含了历年杭电(HDOJ,杭州电子工业学院在线评测系统)的题目解析和解题思路,这对于熟悉HDOJ题库和提升解题能力非常有帮助。 总的来说,《杭电2010ACM...

    python 爬虫基本使用——统计杭电oj题目正确率并排序

    1. **request**:这是最基础的HTTP请求模块,可以模拟用户在浏览器中发送请求。通过调用`urlopen()`方法,传入URL和一些参数,可以获取网页内容。例如在代码中,我们使用`ur.urlopen(url).read()`来读取指定URL的...

    杭电 ACM 资源(一次性到位)

    4. **ACM技巧**:除了理论知识,资源包还会教授一些实战技巧,如快速读入、模拟、状态压缩、位运算等,这些都是在紧张的比赛中节省时间、提高解题效率的重要手段。 5. **问题分析与解题策略**:如何快速理解题目,...

    ACM课件.rarACM课件.rar

    12. OJ平台:利用Online Judge系统(如Codeforces、LeetCode、HDOJ)进行在线编程训练,熟悉比赛环境。 13. 题库研究:对历年的ACM竞赛题目进行深入研究,分析解题思路,积累经验。 14. 模拟赛与训练营:参加模拟...

    leetcode中国-MyAlgorithmSolutions::balloon:记录我所有的算法/数据结构

    HDOJ LeetCode 程序员面试金典 剑指OFFER PAT 甲级 乙级 ACWing 算法基础班 快排 归并 二分 高精度 前缀和差分 双指针 位运算 离散化 区间合并 单链表 双链表 栈 队列 单调栈 单调队列 KMP Tire 并查集 堆 哈希表 ...

Global site tag (gtag.js) - Google Analytics