去你的蓝桥杯练习系统,C++11的新特性一个都用不了!!!
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了去你的蓝桥杯练习系统,C++11的新特性一个都用不了!!!相关的知识,希望对你有一定的参考价值。
事情起因:
开开心心的拿起这道九宫重排开始做题。。。
然后开始编写代码:经过本地调试,测试用例通过都没问题,准备到蓝桥杯网站提交。。。
代码在这
#include<bits/stdc++.h>
using namespace std;
//建立一个结构体,以便存下pos用于操作
typedef struct{
string s;
int pos;
}grid;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int bfs(grid &start,string end){
//用集合防止走回头路
unordered_set<string>visit;
queue<grid>q;
q.push(start);
int step = 0;
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; ++i) {
grid cur = q.front();
q.pop();
if(cur.s==end)
return step;
if(visit.count(cur.s))
continue;
visit.emplace(cur.s);
//将一维描述的数字转为二维
int x = cur.pos/3;
int y = cur.pos - 3*x;
for (int j = 0; j < 4; ++j) {
int t_x=x;
int t_y=y;
t_x = t_x+dx[j];
t_y = t_y+dy[j];
if(t_x>=0&&t_x<3&&t_y>=0&&t_y<3){
int pos2 = 3*t_x+t_y;
string tmp = cur.s;
//得到新的情况,入队即可。
swap(tmp[cur.pos],tmp[pos2]);
if(!visit.count(tmp)){
grid sub={tmp,pos2};
q.push(sub);
}
}
}
}
step++;
}
return -1;
}
int main(){
string s;
string t;
cin>>s>>t;
int pos = 0;
for(int i=0;i<s.size();i++){
if(s[i]=='.')
pos = i;
}
grid st = {s,pos};
int res = bfs(st,t);
cout<<res<<endl;
return 0;
}
然后开始给我莫名奇妙的报错。。
第一次报错:
好家伙,不准我用unordered_map,对于map和unordered_map的查找性能差距有多大,不用我多介绍了吧。。
经过多番资料查阅
在蓝桥杯里需要加上这两个头文件以及文件命名空间才能使用。
有时用不了unordered_map或者unordered_set时,加上
#include<tr1/unordered_set>
#include<tr1/unordered_map>
using namespace std::tr1;
然后就第二次报错了
no member named ‘emplace’???
好家伙直接不支持emplace成员函数。。。
虽说emplace和insert的效率差别不大,但在某些时候差距还是有几十ms的,我目前还未找到该怎么在蓝桥这个练习系统里面使用emplace这个方法。。。
有大神知道吗,希望能指点指点。。。
目前暂时用回了insert方法
最后我用unodered_map和map进行了效率比较
这道题在时间复杂度O(n^2)情况下,问题规模n为30以内,它们之间的时间就差了100多ms,可想而知要是数据量多了,两倍的差距应该有。。。
以上是关于去你的蓝桥杯练习系统,C++11的新特性一个都用不了!!!的主要内容,如果未能解决你的问题,请参考以下文章