去你的蓝桥杯练习系统,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的新特性一个都用不了!!!的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯练习系统出现运行错误是啥原因

蓝桥杯_基础练习《矩形面积交---26》

蓝桥杯练习系统历届试题 带分数 dfs

蓝桥杯练习 矩形面积交(计算几何)

蓝桥杯大赛第十届省赛C++B组 填空题题解

蓝桥杯练习系统—基础练习 完美的代价