A-签到题
题意
东东有一个字符串X,该串包含偶数个字符,一半是 S 字符,一半是 T 字符
东东可以对该字符串执行 1010000 次操作:如果存在 ST 是该串的子串,则删除掉最左边的 ST。
即 TSTTSS⇒TTSS、SSSTTT⇒SSTT⇒ST⇒空
思路
根据TSTTSS⇒TTSS、SSSTTT⇒SSTT⇒ST⇒空 的过程,很显然可以模拟栈进行读入,当读到T的时候判断栈顶是否是S,如是S则弹出,若不是则T入栈;读到S正常入栈
代码
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<stack>
using namespace std;
int main()
{
stack<char>st;
string str;
cin>>str;
for(int i=0;i<str.size();i++)
{
if(!st.size())
st.push(str[i]);
else
{
if(str[i]=='T'&&st.top()=='S')
st.pop();
else st.push(str[i]);
}
} cout<<st.size()<<endl;return 0;
}
B-转魔方
题意
东东有一个二阶魔方,即2×2×2的一个立方体组。立方体由八个角组成。
魔方的每一块都用三维坐标(h, k, l)标记,其中h, k, l∈{0,1}。六个面的每一个都有四个小面,每个小面都有一个正整数。
对于每一步,东东可以选择一个特定的面,并把此面顺时针或逆时针转90度。
请你判断,是否东东可以在一个步骤还原这个魔方(每个面没有异色)。
输入
输出
对于每个测试用例,魔方如果可以至多 “只转一步” 恢复,输出YES,则输出NO。
思路
该题的突破点就是至多只能转一次,这说明在初始状态,至少有两个对面是是不存在异色的,(因为转一次总有两个面是不会改变的),所以读入的时候可以用一个二维数组读入将每一面记录下来,然后分别判断哪一对面没有不同颜色,确定后转动一次(顺时针逆时针转动两次即可),然后判断结果是否不存在异色
总结
这是一道模拟题,关键是找到突破点,然后进行题目框架的设计,解决
代码
#include<iostream>
#include<cstring>
using namespace std;
int a[8][6];bool flag[8];
bool judge(int x,int y,int w,int z)
{
if(x==y&&y==w&&w==z)
return 1;return 0;
}
int main()
{
int n;cin>>n;
for(int i=0;i<n;i++)
{ memset(flag,0,sizeof(flag));
for(int i=1;i<=6;i++)
{ flag[i]=1;
for(int j=1;j<=4;j++)
{
cin>>a[i][j];
if(j!=1&&a[i][j]!=a[i][j-1]) flag[i]=0;
}
}
bool tag=0;
for(int i=1;i<=6;i++)
{
if(!flag[i])tag=1;
}if(!tag)
{ cout<<"YES"<<endl;
continue;
}
tag=0;
if(flag[1]&&flag[3]&&judge(a[2][1], a[2][2], a[5][3], a[5][1]) && judge(a[5][4], a[5][2], a[4][1], a[4][2])&& judge(a[4][3], a[4][4], a[6][4], a[6][2])&& judge(a[6][3], a[6][1], a[2][3], a[2][4]))
tag=1;
if(flag[1]&&flag[3]&& judge(a[2][1], a[2][2], a[6][4], a[6][2]) && judge(a[6][3], a[6][1], a[4][1], a[4][2])&& judge(a[4][3], a[4][4], a[5][3], a[5][1])&& judge(a[5][4], a[5][2], a[2][3], a[2][4]))
tag=1;
if(tag)
{
cout<<"YES"<<endl;continue;
}tag=0;
if(flag[2]&&flag[4]&&judge(a[1][3], a[1][4], a[5][2], a[5][1]) && judge(a[5][4], a[5][3], a[3][3], a[3][4])&& judge(a[3][1], a[3][2], a[6][1], a[6][2])&& judge(a[6][3], a[6][4], a[1][1], a[1][2]))
tag=1;
if(flag[2]&&flag[4]&&judge(a[1][3], a[1][4], a[6][1], a[6][2]) && judge(a[6][3], a[6][4], a[3][3], a[3][4])&& judge(a[3][1], a[3][2], a[5][2], a[5][1])&& judge(a[5][3], a[5][4], a[1][1], a[1][2]))
tag=1;
if(tag)
{
cout<<"YES"<<endl;continue;
}tag=0;
if(flag[5]&&flag[6]&&judge(a[2][2], a[2][4], a[1][3], a[1][1]) && judge(a[1][2], a[1][4], a[4][3], a[4][1])&& judge(a[4][4], a[4][2], a[3][1], a[3][3])&& judge(a[3][2], a[3][4], a[2][1], a[2][3]))
tag=1;
if(flag[5]&&flag[6]&&judge(a[2][2], a[2][4], a[3][1], a[3][3]) && judge(a[3][2], a[3][4], a[4][1], a[4][3])&& judge(a[4][2], a[4][4], a[1][1], a[1][3])&& judge(a[1][2], a[1][4], a[2][1], a[2][3]))
tag=1;
if(tag)
{
cout<<"YES"<<endl;continue;
}
cout<<"NO"<<endl;
}
}