博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
noip模拟赛 PA
阅读量:4597 次
发布时间:2019-06-09

本文共 1749 字,大约阅读时间需要 5 分钟。

分析:很显然这是一道搜索题,可能是由于我的搜索打的太不美观了,这道题又WA又T......如果对每一个询问都做一次bfs是肯定会T的,注意到前70%的数据范围,N的值都相等,我们可以把给定N的所有情况给算出来,然后O(1)查询.从终点状态往起点状态BFS就可以了.

当最终状态很少,起始状态很多的时候,可以考虑倒着做.

#include 
#include
#include
#include
#include
using namespace std;int T, jian[10], stu, shu[10], cnt, top[10], d[10000000], cur[10], vis[10000000];int n, a[10], b[10];queue
q;bool cmp(int x, int y){ return a[x] < a[y];}void bfs(){ while (!q.empty()) { int zhuangtai = q.front(); q.pop(); memset(top, 0, sizeof(top)); memset(shu, 0, sizeof(shu)); cnt = 0; int tt = zhuangtai; while (tt) { shu[++cnt] = tt % 10; tt /= 10; } reverse(shu + 1, shu + 1 + cnt); for (int i = cnt; i >= 1; i--) top[shu[i]] = i; for (int i = 1; i <= cnt; i++) if (i == top[shu[i]]) { int temp = shu[i]; if (temp != 1 && (i < top[temp - 1] || !top[temp - 1])) { int newstu = zhuangtai - jian[cnt - i]; if (!vis[newstu]) { q.push(newstu); vis[newstu] = 1; d[newstu] = d[zhuangtai] + 1; } } if (temp != cnt && (i < top[temp + 1] || !top[temp + 1])) { int newstu = zhuangtai + jian[cnt - i]; if (!vis[newstu]) { q.push(newstu); vis[newstu] = 1; d[newstu] = d[zhuangtai] + 1; } } } }}int main(){ scanf("%d", &T); jian[0] = 1; stu = 0; for (int i = 1; i <= 7; i++) { jian[i] = jian[i - 1] * 10; stu = stu * 10 + i; q.push(stu); vis[stu] = 1; } bfs(); //printf("flag\n"); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); b[i] = i; } sort(b + 1, b + 1 + n, cmp); int stu = 0; for (int i = 1; i <= n; i++) stu = stu * 10 + b[i]; if (!vis[stu]) printf("-1\n"); else printf("%d\n", d[stu]); } return 0;}

 

转载于:https://www.cnblogs.com/zbtrs/p/7716385.html

你可能感兴趣的文章
百度地图api接口
查看>>
kendo ui - DropDownList 下拉列表系列
查看>>
Mask R-CNN详解和安装
查看>>
poj2017
查看>>
【程序员人生】优秀程序员的法则
查看>>
cocos2d下,优秀骨骼spine的换装思路
查看>>
Windows 10 MBR转GPT
查看>>
iuplua test failure
查看>>
6 tr
查看>>
同开三本DJANGO,需要提升一下本职工作的能力啦
查看>>
这样就算会了PHP么?-2
查看>>
线段树 (区间查询最大 区间求和 区间加)带lazy
查看>>
三十而立,从零开始学ios开发(十二):Table Views(上)
查看>>
MySQL中的decimal
查看>>
gitlab+jenkins持续集成(一)
查看>>
4.signed/unsigned char
查看>>
iOS,UIImage有个contentmodel属性
查看>>
Debian 7 amd64 + fbterm + ucimf
查看>>
数据结构之【排序】复习题
查看>>
spring boot 首次请求Controller慢
查看>>