计蒜客NOIP模拟赛4 D2T1 鬼脚图
鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合。
下图就是一张鬼脚图,其包含若干条竖线和若干条横线。请注意,横线只能水平连接相邻的两条竖线,且 在同一高度只会有一条横线。
在图的上方,我们将这 n 条竖线依次标号为 1 到 n。以数字 3 为例,它会沿着所在的竖线下降,期间如果 遇到横线就会移动到横线的另一端,最终降落至下面的第一条竖线。上图中还标出了另外几种数字的最终位置。奇特的是,开始时每条竖线上都有一个数字,而 最终每条竖线下还是有一个数字。
现在,相信你一定已经理解了鬼脚图的规则,那么我们想请你完成下面的两个任务——
读入一张有 n 条竖线和 m 条横线的鬼脚图,请你输出最下面一行的最终序列。
如果让你设计一个鬼脚图最终序列达到上面的效果,你 最少需要多少条横线。
输入格式
第一行 2 个数字 n,m,表示竖线和横线的数量。
第二行 m 个数字,依次表示从高到低的横线。数字 a 的意义为,在第 a(1≤a<n)条竖线和第 a+1 条竖线间存在一条横线。
输出格式
第一行 n 个数字,表示该鬼脚图的最终序列。
第二行 1 个数字,表示最少需要多少条横线。
数据范围
对于 10% 的数据:n≤3,m≤5。
对于 20% 的数据:n≤4,m≤100。
对于 40% 的数据:n≤8,m≤1000。
对于 60%的数据:n≤1000,m≤5000。
对于 100%的数据:n≤100000,m≤1000000。
样例输入
3 3 1 2 1
样例输出
3 2 1 3对于高度从大到小的横线,等价于在最终序列中交换最终序列开始与初始序列相同然后模拟,交换横线端点的值 第二问,要用最少步数得到显然就是最终序列的逆序对数
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n,m,a[100001],t[1000001]; 7 long long ans; 8 void partition(int l,int r) 9 { 10 if (l>=r) 11 return; 12 int mid=(l+r)/2; 13 partition(l,mid); 14 partition(mid+1,r); 15 int i=l,j=mid+1,k=l; 16 while(i<=mid&&j<=r) 17 { 18 if(a[i]>a[j]) 19 { 20 ans=(ans+mid-i+1); 21 t[k]=a[j]; 22 k++; 23 j++; 24 } 25 else 26 { 27 t[k]=a[i]; 28 k++; 29 i++; 30 } 31 } 32 while(i<=mid) 33 { 34 t[k]=a[i]; 35 k++; 36 i++; 37 } 38 while(j<=r) 39 { 40 t[k]=a[j]; 41 k++; 42 j++; 43 } 44 for(i=l; i<=r; i++) 45 a[i]=t[i]; 46 } 47 int main() 48 {int i,x; 49 cin>>n>>m; 50 for (i=1;i<=n;i++) 51 a[i]=i; 52 for (i=1;i<=m;i++) 53 { 54 scanf("%d",&x); 55 swap(a[x],a[x+1]); 56 } 57 for (i=1;i<=n;i++) 58 if (i<n) 59 printf("%d ",a[i]); 60 else cout<<a[i]; 61 partition(1,n); 62 cout<<endl<<ans; 63 }
转载于:https://www.cnblogs.com/Y-E-T-I/p/7592087.html
计蒜客NOIP模拟赛4 D2T1 鬼脚图相关推荐
- 计蒜客NOIP模拟赛(2) D1T1邻家男孩
凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...
- 计蒜客NOIP模拟赛(2) D2T2紫色百合
[问题描述] "牵着你的手的是她,路边开满了紫色的百合花--" 你从梦中醒来,却依然忘不了梦中的她百合花,每朵百合花都有一个权值,在二进制下写成一行'1',第i朵紫色百合的权值在二 ...
- 计蒜客NOIP模拟赛4 D2T2 跑步爱天天
YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...
- 计蒜客NOIP模拟赛 数三角形
数三角形 题目描述 刚刚上高中的洁洁在学习组合数学的过程中遇到一道麻烦的题目,她希望你能帮助她解决.给定一张无向完全图 G,其中大部分边被染成蓝色,但也有一些边被染成红色或者绿色.现在,洁洁需要给这张 ...
- 计蒜客NOIP模拟D1T2
原题: 蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少.另外,由于各种原因,蒜头君的树的边的边权会发生若干次改变,蒜头君想让你告诉他,每一次改变后,任意两点间最短距离 ...
- 【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)
题干: 蒜头去嘉年华玩儿套圈圈,是这么玩儿的.有一些瓶口口径不同的啤酒瓶,瓶子里面有一些奖品.如果蒜头用手上的圈圈套中了啤酒瓶,那么奖品就归他了. 假设蒜头君无限精准,指哪儿打哪儿,并且蒜头了解到,只 ...
- 【计蒜客信息学模拟赛1月月赛 - D】Wish(dp计数,数位)
题干: 如果一个数大于等于 10且任意连续两位都是质数,那么就称之为 Wish 数.当然,第一个 Wish 数是 11. 比如 97,111,131,119 都是 Wish 数,而 12,136 则不 ...
- 【计蒜客2017NOIP模拟赛1】
D1T1 题面 题解:一开始以为傻题,旋转个坐标系就行了,结果光荣爆零~ 结果发现旋转坐标系后,由于多了一些虚点,锤子砸到虚点上了~gg [没有代码] D1T2 题面 题解:计算出每个边对答案的贡献即 ...
- 计蒜客一月入门赛:《三个火枪手》题解
题目链接(https://nanti.jisuanke.com/t/52314) 有 n 个人,其中有 m 对相互认识的关系. 一个人的知名度定义为 有多少人 和他相互认识. 现在蒜头君需要从这 n ...
最新文章
- 创业计划书模板(周鸿祎口述)
- 通配符?子字符串匹配主字符串次数_突破LeetCode,拿BAT大厂offer之《正则表达式匹配》(动态规划)...
- Py中enumerate方法【转载】
- Linux基础之shell变量
- 每天一香蕉,长成螺纹钢
- Derby的jar说明
- 谷歌 MapReduce 初探
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
- 如何使用多个端口访问tomcat
- 【直通顶会 ICCV2021比赛大揭秘】ICCV2021比赛信息汇总
- 微软建了个内部AI大学:“我们很缺人!是时候增强自我造血能力了”
- DHCP服务在企业网络中的应用
- Latex绘制三线表
- 需求分析的文档模板的书写方式
- python走迷宫_Python使用Tkinter实现机器人走迷宫
- 5个国内优秀网站设计案例分享
- 全球首个大规模虐童图像数据库!标记15万图像、20类信息,自动判断图片是否违法​...
- 大数据学习笔记(六)HDFS-API
- go二维map_go map详细使用方法
- JAVA多线程作业-多人买票
热门文章
- Android 实现简单的登陆注册功能(SharedPreferences和SQLite)
- 初中计算机学业水平考试知识点,初中信息技术学业水平考试复习提纲.doc
- c语言拓扑多边形自动生成,拓扑多边形生成算法(C++源码)一
- php 开启常驻进程,swoole如何常驻进程
- 现在那个拦截捆绑软件比较好_捆绑您的收件箱以更好地开发
- mysql数据库关于中文符号的解决
- 2K19老是显示与服务器,你与游戏服务器的连接出现问题2k19
- android maxlength 汉字,Android TextView maxWidth、maxLines、maxLength、maxEms
- LVDS接口分类与数据格式
- iOS 开发中添加自定义汉语字体