A-字符串ST

题目

东东有一个字符串X,该串包含偶数个字符,一半是 S 字符,一半是 T 字符
东东可以对该字符串执行 1010000 次操作:如果存在 ST 是该串的子串,则删除掉最左边的 ST。
即 TSTTSS⇒TTSS、SSSTTT⇒SSTT⇒ST⇒空

Input

(2 ≦ |X| ≦ 200,000)

Output

输出最终串的长度

Sample Input

TSTTSS

Sample Output

4

思路

类似于括号匹配,利用栈。
当前字符s[i]为’S’时,当前字符入栈;栈不为空且当前字符s[i]为’T’且栈顶字符st.top()为’S’时,弹出栈顶元素。最后输出栈中元素个数。

总结

一开始没有想到栈,自己使用两个变量记录下标模拟了上述思路的过程,但是会wa。后来忽然想起栈,又重写了代码,但是re,发现是弹出栈顶元素时没有判断栈为空。

代码

#include<iostream>
#include<string>
#include <stack>
#include<algorithm>
using namespace std;int main(){string s;cin>>s;stack<char> st;for(int i=0;i<s.length();i++){if(i==0)st.push(s[i]);else{if(!st.empty()&&st.top()=='S'&&s[i]=='T'){st.pop();}else{st.push(s[i]);}}}cout<<st.size();return 0;
}

B-东东转魔方

题目

东东有一个二阶魔方,即2×2×2的一个立方体组。立方体由八个角组成。
魔方的每一块都用三维坐标(h, k, l)标记,其中h, k, l∈{0,1}。六个面的每一个都有四个小面,每个小面都有一个正整数。
对于每一步,东东可以选择一个特定的面,并把此面顺时针或逆时针转90度。
请你判断,是否东东可以在一个步骤还原这个魔方(每个面没有异色)。

Input

输入的第一行包含一个整数N(N≤30),这是测试用例的数量。
对于每个测试用例, 第 1~4 个数描述魔方的顶面,这是常见的2×2面,由(0,0,1),(0,1,1),(1,0,1),(1,1,1)标记。四个整数对应于上述部分。

第 5~8 个数描述前面,即(1,0,1),(1,1,1),(1,0,0),(1,1,0)的公共面。四个整数 与上述各部分相对应。

第 9~12 个数描述底面,即(1,0,0),(1,1,0),(0,0,0),(0,1,0)的公共面。四个整数与上述各部分相对应。

第 13~16 个数描述背面,即(0,0,0),(0,1,0),(0,0,1),(0,1),(0,1,1)的公共面。四个整数与上述各部分相对应。

第 17~20 个数描述左面,即(0,0,0),(0,0,1),(1,0,0),(1,0,1)的公共面。给出四个整数与上述各部分相对应。

第 21~24 个数描述了右面,即(0,1,1),(0,1,0),(1,1,1),(1,1,0)的公共面。给出四个整数与上述各部分相对应。

换句话说,每个测试用例包含24个整数a、b、c到x。你可以展开表面以获得平面图,如下所示。

 + - + - + - + - + - + - +
| q | r | a | b | u | v |+ - + - + - + - + - + - +
| s | t | c | d | w | x |+ - + - + - + - + - + - +| e | f |+ - + - +| g | h |+ - + - +| i | j |+ - + - +| k | l |+ - + - +| m | n |+ - + - +| o | p |+ - + - +

Ouput

对于每个测试用例,魔方如果可以至多 “只转一步” 恢复,输出YES,则输出NO。

Sample Input

4
1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6
6 6 6 6 1 1 1 1 2 2 2 2 3 3 3 3 5 5 5 5 4 4 4 4
1 4 1 4 2 1 2 1 3 2 3 2 4 3 4 3 5 5 5 5 6 6 6 6
1 3 1 3 2 4 2 4 3 1 3 1 4 2 4 2 5 5 5 5 6 6 6 6

Sample Output

YES
YES
YES
NO

思路

使用cube[]数组记录每个方格的颜色,题目中的a~x面分别对应cube[1]~cube[24]。
按照题目描述摆放魔方确定上下左右前后面,可以分为四种情况:

  • 上下面颜色相同,需要转前后左右面;
  • 前后面颜色相同,需要转上下前后面;
  • 左右面颜色相同,需要转上下前后面;
  • 其他。

对于前三种情况,每种情况中又可以分出两种情况:

  • 顺时针转90度;
  • 逆时针转90度(即顺时针转270度)。

在代码中,用必要条件判断进入四种情况的哪一个,判断分别是:

  • 前面中靠上的2个方格颜色相同,靠下的2个方格颜色相同,且两者颜色不同;
  • 上面中靠前的2个方格颜色相同,靠后的2个方格颜色相同,且两者颜色不同;
  • 上面中靠左的2个方格颜色相同,靠右的2个方格颜色相同,且两者颜色不同。
  • 其他。

对于四种情况,再转到其对应的顺/逆时针转90度的函数或不转的函数,看操作后是否还原成功。
判断是否还原成功对着折好的魔方看就好了。

总结

我太懒了,懒得折魔方。一开始想用三维坐标记录颜色,写着写着发现一个小魔方块有三面,也就是三个颜色,而我只用了一个坐标来表示一个小魔方块,就很尴尬。
折个魔方又不费力,为什么不折一个呢。

代码

#include <algorithm>
#include <cstdio>
using namespace std;
int cube[26];bool solve1(){//上下前后转for(int i=17;i<20;i++){//左面是否同色,右面是否同色if(cube[i]!=cube[i+1]||cube[i+4]!=cube[i+5])return false;}if(cube[5]==cube[7]&&cube[6]==cube[8]&&cube[9]==cube[11]&&cube[10]==cube[12]&&cube[13]==cube[15]&&cube[14]==cube[16]){if(cube[3]==cube[6]&&cube[7]==cube[10]&&cube[11]==cube[14]&&cube[15]==cube[2])return true;if(cube[1]==cube[16]&&cube[13]==cube[12]&&cube[9]==cube[8]&&cube[5]==cube[4])return true;}return false;
}
bool solve2(){//上下左右转for(int i=5;i<8;i++){//前面是否同色,后面是否同色if(cube[i]!=cube[i+1]||cube[i+8]!=cube[i+9])return false;}if(cube[21]==cube[22]&&cube[23]==cube[24]&&cube[9]==cube[10]&&cube[11]==cube[12]&&cube[17]==cube[18]&&cube[19]==cube[20]){if(cube[2]==cube[23]&&cube[22]==cube[10]&&cube[11]==cube[19]&&cube[18]==cube[3])return true;if(cube[1]==cube[20]&&cube[17]==cube[9]&&cube[12]==cube[24]&&cube[21]==cube[4])return true;}return false;
}
bool solve3(){//前后左右转for(int i=1;i<4;i++){if(cube[i]!=cube[i+1]||cube[i+8]!=cube[i+9])return false;}if(cube[21]==cube[23]&&cube[22]==cube[24]&&cube[15]==cube[16]&&cube[13]==cube[14]&&cube[18]==cube[20]&&cube[17]==cube[19]){if(cube[6]==cube[24]&&cube[21]==cube[14]&&cube[15]==cube[17]&&cube[20]==cube[7])return true;if(cube[5]==cube[19]&&cube[18]==cube[13]&&cube[16]==cube[22]&&cube[23]==cube[8])return true;}return false;
}
bool solve4(){//不转for(int i=1;i<4;i++){for(int j=0;j<6;j++){if(cube[i+j*4]!=cube[i+j*4+1])return false;}}return true;
}bool solve(){if(cube[1]==cube[3]&&cube[2]==cube[4]&&cube[1]!=cube[2])return solve1();if(cube[1]==cube[2]&&cube[3]==cube[4]&&cube[1]!=cube[3])return solve2();if(cube[5]==cube[6]&&cube[7]==cube[8]&&cube[5]!=cube[7])return solve3();return solve4();
}int main(){int n;scanf("%d",&n);while(n--){for(int i=1;i<=24;i++)scanf("%d",&cube[i]);if(solve())printf("YES\n");elseprintf("NO\n");}return 0;
}

题目链接

程序设计思维 week10 限时大模拟-魔方相关推荐

  1. Week10 限时大模拟 B - 东东转魔方 HDU - 5983

    题目描述 东东有一个二阶魔方,即2×2×2的一个立方体组.立方体由八个角组成. 魔方的每一块都用三维坐标(h, k, l)标记,其中h, k, l∈{0,1}.六个面的每一个都有四个小面,每个小面都有 ...

  2. 山大程序设计思维与实践 六月模拟:猪国杀

    六月模拟:猪国杀 山东大学计算机科学与技术学院程序设计思维与实践作业 山大程序设计思维与实践 sdu程序设计思维与实践 山东大学程序设计思维实践作业H 山大程序设计思维实践作业H 山东大学程序设计思维 ...

  3. 作业Week9、10+月模拟题3、4+CSP3、4+限时大模拟10、14

    CSP3 A-瑞神的序列 1.题意:瑞神的数学一向是最好的,连强大的咕咕东都要拜倒在瑞神的数学水平之下,虽然咕咕东很苦 恼,但是咕咕东拿瑞神一点办法都没有. 5.1期间大家都出去玩了,只有瑞神还在孜孜 ...

  4. 山东大学程序设计思维与实践 四月模拟:TT与可怜的猫

    4月模拟-TT与可怜的猫 程序设计思维实践-复杂模拟题训练2 山东大学计算机科学与技术学院程序设计思维与实践 sdu程序设计思维与实践 山东大学程序设计思维实践作业 山大程序设计思维实践 山东大学程序 ...

  5. 程序设计思维与实践 Week14 限时大模拟A - 猫睡觉问题

    题意 众所周知,TT家里有一只魔法喵.这只喵十分嗜睡.一睡就没有白天黑夜.喵喵一天可以睡多次!!每次想睡多久就睡多久╭(╯^╰)╮ 喵睡觉的时段是连续的,即一旦喵喵开始睡觉了,就不能被打扰,不然喵会咬 ...

  6. 程序设计思维与实践 Week14 限时大模拟

    文章目录 A - 猫睡觉问题 题目 思路 代码 A - 猫睡觉问题 题目 众所周知,TT家里有一只魔法喵.这只喵十分嗜睡.一睡就没有白天黑夜.喵喵一天可以睡多次!!每次想睡多久就睡多久╭(╯^╰)╮ ...

  7. Week6 限时大模拟 A 掌握魔法の东东II

    文章目录 题目描述 Input Output Sample Input 1 Sample Output 1 Sample Input 2 Sample Output 2 算法/思路分析 代码 题目描述 ...

  8. 程序设计思维与实践 Month3 模拟

    文章目录 CSP 201609-3 炉石传说 1. 问题描述 2. 思路历程 3. 具体实现 4. 代码 CSP 201609-3 炉石传说 1. 问题描述 游戏在一个战斗棋盘上进行,由两名玩家轮流进 ...

  9. 程序设计思维与实践月模拟题X3

    这里写目录标题 201604-3 路径解析 题目 思路 代码 201609-3 炉石传说 题目 思路 代码 201809-3 元素选择器 题目 思路 代码 201604-3 路径解析 题目 在操作系统 ...

最新文章

  1. Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
  2. 《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”
  3. 服务降级和服务熔断的区别_Spring Cloud 熔断 隔离 服务降级
  4. 一文搞懂JAVA与GO垃圾回收
  5. 深度学习框架Keras介绍及实战
  6. 真香定律!Android动态换肤实现原理解析,原理+实战+视频+源码
  7. 中国石油大计算机在线考试中心,中国石油大在线考试.doc
  8. 输入字符串统计字符串中每个字符出现的次数
  9. android 判断空,Android空判断的坑
  10. vue 子组件 调用、触发父组件中的方法
  11. 如何进入embl的ebi网站fasta3服务器,The EMBL-EBI bioinformatics web and programmatic tools framework...
  12. JZOJ 1238. 自行车比赛
  13. [hadoop新实战4]hadoop完全分布式安装序列(支持ubuntu和redhat)
  14. Exchange 2010 PowerShell
  15. 数据库问题6-將系統資料表對應至系統檢視
  16. WCF Data Services查询
  17. 大数据锁定消费者没用,核心是锁住用户的“脑袋”!
  18. 地图比例尺与空间分辨率之间的关系_卫星遥感制图最佳影像空间分辨率与地图比例尺关系探讨...
  19. java实现pdf的拆分和合并
  20. 这个牛逼的在线项目任务管理工具,终于开源了!

热门文章

  1. 计算机系统仪表特点,一个大型计算机系统的特点
  2. 【小白必胜-服务器】全网最简单Linux建站环境新手安装步骤
  3. 深度:揭秘阿里巴巴的客群画像
  4. 《基于网络软件开发综合实习》实习报告
  5. cc1310官方示例如何在不同内存芯片跑起来
  6. Mac npm 设置淘宝镜像
  7. 申请163电子邮箱,163邮箱格式是什么?短位邮箱集锦
  8. 实现抖音哈哈镜效果---OpenCV-Python开发指南(47)
  9. 压铸模拟-梁形铝合金压铸件变形研究
  10. 大数据的核心技术(一)