Map与对象关系的思考之P1563玩具谜题
P1563 玩具谜题
结论:
map在一些情况有种“对象”的意味,在JSON中,对象可以用K-V格式存储;mybatis中参数是map或者对象都可以实现解析。。。k-v格式的数据存储和对象可以相互转换。
使用map进行模拟
耗时1300ms。。。。不会优化了。。。,代码没精简,凑合看吧,其中if判断可以简写两两在一起,这里不改了。也不是主要要说的。
int rolenum,ordernum;
cin>>rolenum>>ordernum;
map<string,int>maping;
int direction;
string name;
int bushu;
vector<string> roles;
roles.resize(rolenum);
for (int i = 0; i < rolenum; ++i) {
cin>>direction>>name;
maping[name]=direction;//0表示朝向圈内,1表示朝向圈外
roles[i]=name;
}
int index = 0;//当前位置
for (int i = 0; i < ordernum; ++i) {
cin>>direction>>bushu;
if(direction==0){// 表示向左数s人
//判断当前人的朝向
if(maping[roles[index]]==0){//0表示朝向圈内
index-=bushu;
index<0? index=roles.size()-abs(index) : index ;
} else{//1表示朝向圈外
index+=bushu;
index<roles.size()? index: index = abs(index)-roles.size();
}
}else{//表示向右数s人
//判断当前人的朝向
if(maping[roles[index]]==0){//0表示朝向圈内
index+=bushu;
index<roles.size()? index: index = abs(index)-roles.size();
} else{//1表示朝向圈外
index-=bushu;
index<0? index=roles.size()-abs(index) : index ;
}
}
}
cout<<roles[index];
对象模拟
这里把由map存储的方向信息设置在对象中,取消了map。
耗时位200ms,emmmm???提升了5倍,这想不通啊。。。将vector替换位数组后,耗时也是200+,所以没有重新分配(因为先resize了)内存块的情况下,vector和int数组增查的时间复杂度都是O(1)的
C++ map的实现是treemap,TreeMap的增删改查和统计相关的操作的时间复杂度都为 O(logn),N*log(N)耗时1000ms么。。。差距这么直观的吗。。。。
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <ctime>
using namespace std;
static const auto y = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return 0;
}();
class Person{
public:
int direction;//0表示朝向圈内,1表示朝向圈外
string name;//姓名
Person(int direction, const string &name) : direction(direction), name(name) {}
Person() {}
};
vector<Person> roles;
void fun3(){
int rolenum,ordernum;
cin>>rolenum>>ordernum;
roles.resize(rolenum);
for (int i = 0; i < rolenum; ++i) {
cin>>roles[i].direction>>roles[i].name;
}
int direction,bushu;
int index = 0;
for (int i = 0; i < ordernum; ++i) {
cin>>direction>>bushu;
if(direction==0){// 表示向左数s人
//判断当前人的朝向
if(roles[index].direction==0){//0表示朝向圈内
index-=bushu;
index<0? index=roles.size()-abs(index) : index ;
} else{//1表示朝向圈外
index+=bushu;
index<roles.size()? index: index = abs(index)-roles.size();
}
}else{//表示向右数s人
//判断当前人的朝向
if(roles[index].direction==0){//0表示朝向圈内
index+=bushu;
index<roles.size()? index: index = abs(index)-roles.size();
} else{//1表示朝向圈外
index-=bushu;
index<0? index=roles.size()-abs(index) : index ;
}
}
}
cout<<roles[index].name;
}
int main(){
fun3();
return 0;
}
Map与对象关系的思考之P1563玩具谜题的更多相关文章
- P1563 玩具谜题
P1563 玩具谜题 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: ...
- 洛谷 P1563 玩具谜题(模拟)
嗯... 题目链接:https://www.luogu.org/problem/P1563 这道题主要问题就是弄明白顺逆时针的问题,其实可以简化成一个异或的问题:当head与x异或值为零时,即为顺时针 ...
- luogu P1563 玩具谜题
https://www.luogu.org/problemnew/show/1563 题目: 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩 ...
- P1563 玩具谜题(简单模拟)
就是一个简单模拟 #include<iostream> #include<string> using namespace std; ; int in[maxn], x[maxn ...
- 洛谷 P1563 玩具谜题
如果你想不耗费脑力做出这个题目,往下看: 本萌新看到这个题目,想到了乘法法则,题目中左右方向要判断两次,很耗脑力,和乘法中的正负号判断非常像. 抽象一点:这个人向内向外就是乘法中括号外的正负号,他的左 ...
- 洛谷 P1563 玩具谜题【模拟/环】
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...
- 洛谷P1563 玩具谜题 简单模拟
没意义,注意方向别判错. Code: #include<cstdio> #include<cstring> using namespace std; const int max ...
- 死去活来,而不变质:Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?
写在前面 阅读目录: 设计误区 数据库已死 枚举映射 关联映射 后记 在上一篇<一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?>博文中, ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- shell脚本只提供整数算术运算(三种方式)—((表达式))、let "表达式"、value=`expr 表达式右边` (转载)
转自:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201131055455754/ 数值运算: 在bash中只提供了整数运算,一 ...
- C++笔试题(七)
微软研究院是一个听起来就牛B的地方啊,反正我是进不去,不过不妨碍我看看他的笔试题到底是怎么样的.下面四道题就是微软研究院的笔试题目,题后附有我的解答.微软研究院(亚洲)的网址是:http://rese ...
- POJ3250【单调栈】
思路: 维护一个单调递增的栈,对于栈顶元素<=新值来说,那么后面的,我一定看不到了,pop掉以后,那么这时候的栈的大小就是我能看到的这个刚刚pop出去元素的个数. //#include < ...
- poj 1743 Musical Theme【二分+SA】
差分,然后二分长度mid,判断是把height按照min不小于mid分组,取最大最小的sa位置看是否>=mid即可,注意差分后最后答案要+1 #include<iostream> # ...
- 【算法】LRU算法
缓存一般存放的都是热点数据,而热点数据又是利用LRU(最近最久未用算法)对不断访问的数据筛选淘汰出来的. 出于对这个算法的好奇就查了下资料. LRU算法四种实现方式介绍 缓存淘汰算法 利用Linked ...
- BZOJ4653(区间离散化+线段树+决策单调尺取)
写得很好的题解 一眼过去很像是:排序,然后从前向后扫,有这个区间时插到树里,过去以后再删除.然后事实也是这样做的…… 具体起来: 1.如果考虑暴力的话,一种想法是枚举左端和右端要选取的区间(如果我们按 ...
- Codeforces Round #261 (Div. 2) C
Description Recently Pashmak has been employed in a transportation company. The company has kbuses a ...
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 对protected修饰符的范围用代码说明(同时说明用protected修饰的属性,在继承时,一定程度上破坏了封装)
目录结构: 本类: 本包: 子孙类: 其他包:
- iOS中数据类型转换--遇到则记录
1.NSString转NSNumber 使用情景:CoreData存储数据,其中一个为价格,CoreData里面定义为float 用文本输入框得到的数据类型是NSString,将NSString转换成 ...