不得不表示,能用栈来做的题目前对我来说都很费解,这题又是抄的,来自校友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

csu 1008 - Horcrux相关推荐

  1. CSU 1803:2016解题报告

    本来是没有写博客的习惯,结果今天回头看自己A过的题,发现根本看不懂代码了,看着题目也完全没有思路,这就比较尬了,因此打算走上这条不归路. 言归正传,题目链接:http://acm.csu.edu.cn ...

  2. 1008: [HNOI2008]越狱(计数问题)

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 11361  Solved: 4914 [Submit][Stat ...

  3. 一口气发布1008种机器翻译模型,GitHub最火NLP项目大更新

    2020-05-18 16:20:21 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现在,你可以用 GitHub 上最火的 NLP 项目做机器翻译了. 没错,就是 Hugging Fa ...

  4. 1008. 数组元素循环右移问题 (20)

    原题: https://www.patest.cn/contests/pat-b-practise/1008 题意理解: 假设n=6, 需要移位的序列是: 1 2 3 4 5 6, 如果m=2, 从6 ...

  5. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

  6. 一口气发布1008种机器翻译模型,GitHub最火NLP项目大更新:涵盖140种语言组合

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现在,你可以用 GitHub 上最火的 NLP 项目做机器翻译了. 没错,就是 Hugging Face (抱抱脸)标星 26.9k 的 T ...

  7. csu 1554: SG Value 思维题

    http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 这题在比赛的时候居然没想出来,然后发现居然是做过的题目的变种!!!! 先不考虑插入操作, ...

  8. 模拟 CSU 1562 Fun House

    题目传送门 1 /* 2 题意:光线从 '*' 发射,遇到 '/' 或 '\' 进行反射,最后射到墙上,将 'x' 变成 '&' 3 模拟:仔细读题,搞清楚要做什么,就是i,j的移动,直到撞到 ...

  9. HDU 1008 Elevator

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1008 纯水题,就是要注意即使下一站是同一楼层也要停5秒 贴上代码: 1 #include <io ...

最新文章

  1. MySQL界面说明_mysql 界面
  2. java迭代器的原理_小学生之Java中迭代器实现的原理
  3. VTK:颜色顶点查找表用法实战
  4. oracle10g优化器默认,Oracle10g数据库优化实用心得小结
  5. linux shell 编程
  6. FreeWheel容力:如何打造更高质效的技术团队
  7. 有用户访问我的计算机,事件查看器有个奇怪用户账号登录HOME-W81$,我的电脑没有这个用户账号,本机是win8.1ʌ - Microsoft Community...
  8. 看面试题感觉生疏的知识点
  9. 留住用户的APP弹窗设计素材模板
  10. ajax中的application/x-www-form-urlencoded中的使用
  11. 自动化运维工具(光纤交换机接口功率监控)
  12. 求职软件测试工程师英文简历,软件测试工程师英文简历范文
  13. namecheap mx记录配置邮箱
  14. FLV方式实现网页FFmpeg推流无插件播放
  15. IBM Cloud VPC网络与本地办公网络的互通
  16. 小型微型计算机系统加急,小型微型计算机系统杂志
  17. hx-2.4g-rx-2_Rx-如果话务员可以讲话!
  18. python使用execJS运行js函数例子
  19. 微信 商店服务器,对比saas小程序,云开发,微信小商店
  20. HDU 1983:Kaitou Kid - The Phantom Thief (2)

热门文章

  1. golang time包梳理
  2. mysql命令行如何建库_MySQL心得2--命令行方式建库和表
  3. 每日一题:leetcode82. 删除排序链表中的重复元素 II
  4. 【算法】学习笔记(4):分治思想 归并排序
  5. 1026 程序运行时间 (15 分
  6. mysql数据库引擎怎么看,值得收藏!
  7. 疯狂涨知识!「高并发秒杀」微信抢红包实战案例帮你突破瓶颈
  8. 网易资深Java架构师:java方法的定义和使用
  9. 腾讯,字节等大厂面试真题汇总,深夜思考
  10. G - 娜娜梦游仙境系列——梦醒