Polycarp Restores Permutation

【题意分析】题意大概是给定一个串,包含从1到n所有的数字。但是给定的是相邻数字的差,需要复原这个串。
大概分析以后发现给定的是一个差分数组,所以只需要枚举第一个元素就可以确定所有元素的值。
问题是如何判断可行,一个一个判断显然是不行的——会超时。
剪枝技巧1:在得到差分数组的时候记录最小值和最大值,a[1]+最小值肯定是1,a[1]+最大值肯定是n,否则肯定不是答案
剪枝技巧2:可能会出现重复的情况,重复的原因是差分数组含有相同的元素,因此先将差分数组排个序,然后检查是否含有相同的元素,若含有肯定是不存在的,若不含有,肯定是存在的——a[1]+q[i]在1到n之间,而且互不相同,而且含有n个,肯定就是答案了。
代码如下:(这么简单的程序我wa了7次,自己真的是太菜了,也有一方面原因是后来做题太少)

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<climits>
using namespace std;int n;
const int MAXN=200005;
int q[MAXN],p[MAXN],t[MAXN];
bool check[MAXN];
int minn=INT_MAX,maxn=INT_MIN;
int tmp,flag;void work(int x)
{memset(check,0,sizeof(check));p[1]=x;for(int i=2;i<=n;i++){p[i]=x+q[i];}
}int main()
{scanf("%d",&n);//memset(q,0,sizeof(q));q[1]=0; t[1]=0;for(int i=2;i<=n;i++){scanf("%d",&tmp);q[i]=q[i-1]+tmp;t[i]=q[i];if(q[i]<minn) minn=q[i];if(q[i]>maxn) maxn=q[i];}sort(t+1,t+n+1);flag=1;for(int i=2;i<=n;i++){if(t[i]==t[i-1]){flag=0;break;}}if(flag==0){printf("-1");return 0;}//memset(p,0,sizeof(p));flag=0;for(int i=1;i<=n;i++){if(i+minn<1) continue;if(i+maxn>n) continue;work(i);flag=1;for(int i=1;i<n;i++){printf("%d ",p[i]);}printf("%d",p[n]);break;}if(flag==0){printf("-1");}return 0;
}

CodeForces - 1141CPolycarp Restores Permutation搜索+剪枝相关推荐

  1. poj 1948(搜索+剪枝)

    解题思路:这道题看到数据量,想到应该搜索+剪枝应该可以过..可是别人的A了,我的却超时了... 我用了一个mark[a][b],表示前两条边长度分别为a和b时,是否已经处理过,如果是的话就直接跳出.. ...

  2. LeetCode 47. 全排列 II(回溯+搜索剪枝)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...

  3. 极大极小搜索 α-β剪枝的实现

    极大极小搜索 α-β剪枝的实现 //---------搜索当前搜索状态极大值--------------------------------// //alpha 祖先节点得到的当前最小最大值,用于al ...

  4. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  5. USACO 6.5.3 Betsy's Tour 搜索剪枝

    http://train.usaco.org/usacoprob2?a=BI4LEPNXcEa&S=betsy 题目大意:一个N*N的方阵(N<=7),求从左上角出发到左下角结束经过每个 ...

  6. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 【bfs + 记忆化搜索 + 剪枝】 AC 代码

    ACM 北京区域赛 bfs+剪枝+ms 第一个一遍过的题目,基本没有看题解 记忆搜索当中,注意初始化成一个特殊值:而在访问之后,每个点就会有一个不同于INF(或者 -1等特殊标记)的值 先到先得,适者 ...

  7. Croc Champ 2013 - Round 2 (Div. 2 Edition) 贪心+ 搜索+剪枝 + 数学

    A: 直接找出最小值,看是否能被所有数整除即可 B: 判断是否出现连续的"#">=m若果存在肯定不能调. C: 题意: 两个人玩游戏(A,B),每个人分配一个字符串长度为2* ...

  8. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题

    这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广 ...

  9. CodeForces - 1607D Blue-Red Permutation(贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,每个数字有一个颜色,如果是蓝色,每次操作则可以减一:如果是红色,每次操作则可以加一. 问有限次操作后,能否将数组变为一个长度为 nnn 的 ...

最新文章

  1. 我司Spring Boot 项目打包 + Shell 脚本部署详细总结,太有用了!
  2. vue如何sleep_Java常见面试题 非常实用【个人经验】
  3. 避免每个类中都初始化日志类
  4. 如何初始化结构体中的指针结构体_跟我一起学习go语言(五)golang中结构体的初始化方法...
  5. Anaconda装OpenCV
  6. SAP透明工厂和弹性制造的原型mockup - SAP 工业 4.0 的一个尝试
  7. linux初始化进程ppid号,linux基础(十一)--系统初始化的简谈
  8. 网络教育计算机 判断,北京师范大学网络教育计算机作业1、4、8
  9. 浅谈:飞秋 程序设计之网络通信
  10. call_user_func和call_user_func_array的用法
  11. 【Spring Cloud】微服务和Spring Cloud
  12. maven的pom文件出现Multiple annotations found at this line...,已解决
  13. C# 解析User-Agent工具
  14. 密码保护(2017.12.22)
  15. html粒子特效图片切换,javascript转换静态图片,增加粒子动画效果_javascript技巧...
  16. git 解决push报错:[rejected] master -> master (fetch first) error: failed to push some refs to ‘ ‘
  17. 豆瓣9分+纪录片,每一部都美到窒息......
  18. [2021江西省赛高校组]wp
  19. 洞见(1): zig 编程语言
  20. 较早版本OAI ENB启动问题解决

热门文章

  1. [开源JVM] yvm - 自制Java虚拟机
  2. C 语言实例 - 使用结构体(struct)
  3. 【Hexo】deploy出错的解决方法
  4. 【CV论文阅读】Rank Pooling for Action Recognition
  5. Jade之Extends
  6. ECshop安装及报错解决方案总结
  7. 2014-07-28 使用Axure RP进行手机端BBS的原型设计
  8. MyGeneration的NHibernate代码生成模版
  9. JavaScript 参考教程——写在前面
  10. 链表排序c++代码_[链表面试算法](一) 链表的删除-相关题型总结(6题)