csu 1008 - Horcrux

不得不表示,能用栈来做的题目前对我来说都很费解,这题又是抄的,来自校友JMDWQ,只不过把C改成了C++。开始时我用的是暴搜,数组的每一位就是一个“魂器”,而他的栈结构里每一位是连续相同的“魂器”的长度,明显要好的多。对他的核心代码,我的理解是这样的,大牛勿喷:

判断当前与前一位 相同:栈顶++;(当前连续区长度+1)

         不同:不能变化 || top==0:   s[++top] = 1;(开辟新区,长度为1)

             能变化  &&  top(存在区):只有一个区:栈顶++(长度+1);t = !t(最左边的区变了);

                          存在多个区:s[top-1] += s[top]+1;top--;(合并区);

现在举一个最后一种情况的例子:00110001,当前到最后一个,“1”,不同,可以变化,之前有三个区,s[1]==2,s[2]==2,s[3]==3,区3里的3个0都变为1,加上的当前的1(可以理解为区4),全都合并的区2里了,s[2] += s[3]+1;top--就是少一个区嘛。

最后不得不说代码中t的安排,真是巧妙。所有的区是0、1、0、1间隔的,t变化表示最左边的区变了,后来的top%2==t是用来判断当前也就是最后一个区是0还是1;本来我还是搞不清,后来看到t=f(第一个数),我觉悟了,原来t 一开始就是最左边的,它是0 t也是0,它是1 t也是1;然后它变t也变,完全一样嘛!t与top各2种情况,一共4种,枚举一下就发现这样会保证top指向0,真是妙,以后我也这样判断。

 1 #include<iostream>
 2 using namespace std;
 3 const int MAXN = 100010;
 4 unsigned short s[MAXN];
 5 int main()
 6 {
 7     int t,f,top,ans,i,n,x;
 8     while(cin>>n)
 9     {
10         top = ans = 0;
11         memset(s,0,sizeof(s));
12         cin>>f;
13         t = f;
14         s[++top] = 1;
15         for(i = 1; i < n; i++)
16         {
17             cin>>x;
18             if(f!=x)
19             {
20                 f = x;
21                 if(i%2 && top)
22                     if(top > 1)
23                         s[top-1] += s[top]+1,top--;
24                     else
25                         s[top]++,t = !t;
26                 else s[++top] = 1;
27             }
28             else s[top]++;
29         }
30         if(top%2 == t) top--;
31         while(top > 0)
32         {
33             ans += s[top];
34             top -= 2;
35         }
36         cout<<ans<<endl;
37     }
38     return 0;
39 }

 

转载于:https://www.cnblogs.com/lzxskjo/archive/2012/04/14/2446840.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0301——SearchController

创建显示的页面 SearchViewController * searchVC [[SearchViewController alloc]init]; 告诉搜索控制器将结果显示在创建的页面上 self.searchController [[UISearchController alloc]initWithSearchResultsController:searchVC]; 由谁来监听搜索内容发生的事件 self.search…

[Redux/Mobx] 推荐在reducer中触发Action吗?为什么?

[Redux/Mobx] 推荐在reducer中触发Action吗&#xff1f;为什么&#xff1f; 不推荐。首先reducer应该是一个纯函数&#xff0c;reducer中的代码应该把代码逻辑限定在当前的reducer内&#xff0c;如果触发了action&#xff0c;会触发其它的reducer、甚至再次触发自身&#xff0…

windows等宽字体

From: http://plplum.blog.163.com/blog/static/310324002009814105634/ windows下的等宽字体&#xff1a; BatangChe Courier Courier New DotumChe Fixedsys GulimChe GungsuhChe Lucida Console Lucida Sans Typewriter MingLiU MS Gothic MS Mincho Terminal 仿宋_GB2312 楷…

JS中的Replace方法

最近查一个bug&#xff0c;原因是JS中的Replace方法造成的&#xff0c;当将一个字符串中有处需要替换时&#xff0c;一般会用到JS中的Replace方法&#xff0c;Replace方法的第一个参数如果是传的字符串&#xff0c;只会替换第一处。代码如下&#xff1a; var str "0CEA65…

sed替换变量

今天在写脚本时用到了sed&#xff0c;我用sed替换xml文件中的变量。一般在sed 中替换都用单引号&#xff0c;如下边 sed -i ‘s/10/1000/g’ test.xml但是如果需要把1000改成变量&#xff0c;如sed -i ’s/10/$num/g‘ test.xml这样就不成功。 此时需要把单引号改成双引号,如下…

[Redux/Mobx] 你有了解Rxjs是什么吗?它是做什么的?

[Redux/Mobx] 你有了解Rxjs是什么吗&#xff1f;它是做什么的&#xff1f; RxJS 是一个库&#xff0c;它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable&#xff0c;附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extras]…

使用Windows命令行启动服务

From: http://www.cnblogs.com/wlei/archive/2011/12/24/2300389.html 在自己电脑上搭建了一个svn服务器&#xff0c;以服务的形式注册到了windows中&#xff0c;每次启动都要去服务选项中开启&#xff0c;感觉很麻烦&#xff0c;GOOGLE了一下&#xff0c;发现早就有了好方法&a…

mysql cluster 7.1搭建

简单步骤&#xff0c;分享下&#xff1a; hostname IP 应用 db1 192.168.50.10 MGM db2 192.168.50.20 NDBD db3 192.168.50.30 NDBD2 db4 192.168.50.40 MYSQLD db5 192.168.50.50 MYSQLD ***************************** 1.安装配置管理节点(DB1)MGM ************…

redis实现cache系统实践(六)

1. 介绍 rails中就自带有cache功能&#xff0c;不过它默认是用文件来存储数据的。我们要改为使用redis来存储。而且我们也需要把sessions也存放到redis中。关于rails实现cache功能的源码可见于这几处: https://github.com/rails/rails/blob/master/activesupport/lib/active_su…

[Redux/Mobx] 在redux中,什么是action?

[Redux/Mobx] 在redux中&#xff0c;什么是action&#xff1f; action是Redux中定义一个响应的动作&#xff0c;action总是有一个type属性&#xff0c;作为这个动作的唯一标识; Reducer函数则会根据这个action.type来如何生成并返回一个新的state 个人简介 我是歌谣&#x…

VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程

From: http://unmi.cc/vmware9-install-mac-os-x-mountain-lion/#comment-8684 本教程是在 VMware 9 下安装当前最新版的 Mac OS X Mountain Lion 苹果系统。曾在 VirtualBox/VMware 下安装过 Mac OS Lion 系统&#xff0c;但安装后是无法升级到 Mountain Lion 的&#xff0c;所…

显示和快速隐藏Mac桌面所有图标

隐藏&#xff1a;defaults write com.apple.finder CreateDesktop -bool false;killall Finder;say icons hidden恢复显示&#xff1a;defaults write com.apple.finder CreateDesktop -bool true;killall Finder;say icons show上面的操作甚至可以制作成为一个Applescript&…

正则表达式基础恶补

1.基本用途 正则表达式两种基本用途&#xff1a;搜索和替换。 2.单个字符匹配(.).字符可以匹配任何单个字符&#xff0c;类似于sql中的_。注意特殊字符匹配时要使用反斜杠\\。 3.匹配一组字符([])[]之间的所有字符都是该集合的组成部分&#xff0c;字符集合的匹配结果是能够与集…

[Redux/Mobx] Mobx和Redux有什么区别?

[Redux/Mobx] Mobx和Redux有什么区别&#xff1f; Redux每一次的dispatch都会从根reducer到子reducer嵌套递归的执行&#xff0c;所以效率相对较低&#xff1b;而Mobx的内部使用的是依赖收集&#xff0c;所以不会有这个问题&#xff0c;执行的代码较少&#xff0c;性能相对更高…

ANSIC标准定义的6种预定义宏

From: http://biancheng.dnbcw.info/c/277439.html ANSIC标准定义了以下6种可供C语言使用的预定义宏&#xff1a; __LINE__ 在源代码中插入当前源代码行号 __FILE__ 在源代码中插入当前源代码文件名 …

初识Vulkan

Vulkan是Khronos组织制定的“下一代”开放的图形显示API&#xff0c;是与DirectX12可以匹敌的GPU API标准。Vulkan是基于AMD的Mantle API演化而来&#xff0c;目前Vulkan 1.0标准已经完成并正式发布。上一代的OpenGL|ES并不会被遗弃&#xff0c;还会继续发展&#xff0c;很有可…

[Redux/Mobx] 说说Redux的实现流程

[Redux/Mobx] 说说Redux的实现流程 通过分析redux的几个核心api&#xff0c;来看如何实现redux store.subscribe: 订阅数据的变化store.dispatch&#xff1a;dispatch后改变state,同时通知store.subscribe函数执行&#xff0c;上面这两个函数可以利用发布-订阅模式store.getS…

数据镜像备份工具rsync

rsync可以用来实现数据本地镜像和远程备份。 1&#xff0c;可以镜像保存整个目录和文件。 2&#xff0c;可以增量同步数据&#xff0c;文件传输率高。 3&#xff0c;可以保持原文件的权限&#xff0c;时间等属性。 4&#xff0c;可以加密传输数据。 5&#xff0c;可以使用rcp、…

Error format not a string literal and no format arguments解决方案

From: http://www.cnblogs.com/hhuang2012/p/3336911.html 场景: cocos2dx 跨平台开发, 移植Android版本时, 当进行到build_native.sh步骤后 ndk版本: android-ndk-r9 开发环境: mac os 64bit, AndroidEclipse BUG: CCCommon.cpp:54:77: error: format not a string literal an…

[Redux/Mobx] redux的数据存储和本地储存有什么区别?

[Redux/Mobx] redux的数据存储和本地储存有什么区别&#xff1f; Redux存储的数据本质上都是JS变量&#xff0c;都是在内存中的&#xff0c;页面刷新就会消失本质存储是像localStorage Cookie IndexDB WebSQL等缓存技术&#xff0c;它是存储在硬盘中的&#xff0c;不会随便页面…