大致题意:
自己读
大致思路:
直接模拟,注意坑点: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; }
相关推荐
5. **应用领域**:字符串处理、网络流、模拟、游戏理论等。 【压缩包子文件的文件名称列表】:HDOJ题目分类.pdf 这个PDF文档很可能包含了HDOJ平台上所有题目的详细分类列表,每种分类下可能有对应的题目编号、题目...
3. **实战训练**:题目覆盖ACM/ICPC竞赛题型,模拟比赛环境,有助于准备各类编程竞赛,如NOIP(全国青少年信息学奥林匹克联赛)、ACM区域赛等。 4. **自我评估**:离线版的题目通常配有测试数据,你可以提交自己的...
具体来说,是通过对每一位进行处理并记录进位的方式来模拟加法操作。 3. **数组与循环:** - 程序中定义了一个足够大的数组 `c[NM+1]` 来存储相加的结果。这里 `NM` 定义为 `10000`,足以容纳题目中可能出现的...
4. **模拟测试**:在提交到OJ之前,用户可以在本地环境中使用类似的数据进行模拟测试,以减少不必要的网络延迟和无效提交。 5. **代码复用**:在解决不同题目时,合理复用已有的代码片段,提高解题效率。 6. **...
这些文件是针对“hdoj”(HDU Online Judge)在线编程竞赛平台的解题代码,涵盖了题目编号从1000到1050的若干题目。HDU Online Judge是一个用于训练和测试编程技能的系统,用户可以提交代码解决各种算法问题,并获取...
### hdoj杭电入门训练题 #### 概述 杭电在线评测系统(HDOJ)是中国杭州电子科技大学提供的一套在线编程题库平台,主要用于计算机程序设计竞赛(ACM-ICPC)的训练与选拔。对于初学者而言,通过解决HDOJ中的题目可以...
通常,这样的应用程序会包含一个模拟在线环境的界面,允许用户提交代码,运行测试用例,并查看结果,所有操作都在本地完成。 总结起来,HDOJ杭州电子科技大学ACM离线版是一个专为编程爱好者和ACM竞赛参与者设计的...
在这些源码中,我们可以看到JAVA的类和对象被巧妙地用于模拟问题的实体和关系,而JAVA的异常处理机制则确保了程序在遇到错误时能够优雅地处理。 在ACM题目中,常见的算法类型包括但不限于:排序与搜索(如快速排序...
【HDOJ暑期多校联赛第三场】是2013年举办的一场面向广大编程爱好者的在线竞赛,由IOI(国际奥林匹克信息学竞赛)的冠军CLJ设计题目,旨在提升参赛者的信息学和算法解决能力。这次比赛涵盖了丰富的编程和算法知识点,...
【HDOJ.zip_hduoj100题】是一个压缩包文件,包含了HDUOJ(杭州电子科技大学在线评测系统)的约100道编程练习题目及其源代码。这个资源对于想要提升编程技能,尤其是对算法和数据结构有深入学习需求的程序员来说,是...
这些文件是关于ACM(国际大学生程序设计竞赛,简称ICPC)比赛的解题报告,主要涵盖杭电(杭州电子科技大学)在线评测系统HDOJ(HDU Online Judge)中的题目2051到2099。在ACM竞赛中,参赛队伍需要解决一系列算法问题...
生命游戏是英国数学家约翰·康威在1970年代提出的一种细胞自动机模型,其规则简单而演化复杂,能够模拟生命体的出生、死亡与繁殖过程。此题可能要求玩家在给定的初始状态下,按照生命游戏的规则进行一定代数的演化,...
5. **HDOJ 3590**: 同HDOJ 3197,但是加入了先手和后手的角色,询问哪位玩家能获胜。解题方法类似,需要考虑多棵树的NIM游戏情况。 6. **POJ 3710**: 包含多个局部联通的图,玩家交替删除边,形成与根节点不相连的...
3. **HDOJ2001**: “A+B Problem”类型题目,要求计算两个数字的和,是算法竞赛中的经典问题,用于测试基本的数学运算和输入输出能力。 4. **HDOJ2005**: 可能涉及稍微复杂的数学问题或简单算法,如求最小公倍数等...
同时,由于是杭州电子科技大学的内部培训资料,其中可能还包含了历年杭电(HDOJ,杭州电子工业学院在线评测系统)的题目解析和解题思路,这对于熟悉HDOJ题库和提升解题能力非常有帮助。 总的来说,《杭电2010ACM...
1. **request**:这是最基础的HTTP请求模块,可以模拟用户在浏览器中发送请求。通过调用`urlopen()`方法,传入URL和一些参数,可以获取网页内容。例如在代码中,我们使用`ur.urlopen(url).read()`来读取指定URL的...
4. **ACM技巧**:除了理论知识,资源包还会教授一些实战技巧,如快速读入、模拟、状态压缩、位运算等,这些都是在紧张的比赛中节省时间、提高解题效率的重要手段。 5. **问题分析与解题策略**:如何快速理解题目,...
12. OJ平台:利用Online Judge系统(如Codeforces、LeetCode、HDOJ)进行在线编程训练,熟悉比赛环境。 13. 题库研究:对历年的ACM竞赛题目进行深入研究,分析解题思路,积累经验。 14. 模拟赛与训练营:参加模拟...
HDOJ LeetCode 程序员面试金典 剑指OFFER PAT 甲级 乙级 ACWing 算法基础班 快排 归并 二分 高精度 前缀和差分 双指针 位运算 离散化 区间合并 单链表 双链表 栈 队列 单调栈 单调队列 KMP Tire 并查集 堆 哈希表 ...