A :Yet Another Tetris Problem
大意就是给你n个数组,代表n列,每列中的数字就是这列有几个方块,方块自底向上罗列。现在给你2*1个方块(两个方块上下罗),让你消俄罗斯方块,如果最底下一行满n个了,消去这一行。如果能都消完,输出YES,否则,输出NO。
思路
把最高的数组,也就是a数组中最大的数字放入maxn中,让maxn依次减去a数组中所有数,如果maxn-a[i]%2==1,则说明这一列怎么都填不了消不掉,所以输出NO。最后如果没有出现上面的情况,输出YES。
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int a[120];
int main()
{
int t;
cin>>t;
while(t--){
int judge=0;
bool flag=0;
int n;
int maxn=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
maxn=maxn>a[i]?maxn:a[i];
}
for(int i=1;i<=n;i++){
judge=maxn-a[i];
if((judge%2)!=0)
flag=1;
}
if(flag==0){
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
return 0;
}
B:Yet Another Palindrome Problem
该题让你找回文,就是当前数字在前面出现过1次,则说明有回文。判断第i个数字有没有回文,只需要找她后面的数字,看是否有相同数字,并且后面数字的位置j>i+1.
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int a[6000];
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n;
int flag=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
if(a[i]==a[j]&&j-i>1)flag=1;
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
C:Frog Jumps
青蛙在第0位置,要跳到n+1位置,n为字符串的长度。如果青蛙跳到字符串的L处,只能往左跳;如果小青蛙跳到字符串的R处,只能往右跳。
解题思路
这个题的关键是看能有几个连续的L,找出字符串中最大的那个连续的L的个数,这就是小跳蛙要跳的最小步数-1(因为要跳到n+1);
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int t;
scanf("%d",&t);
while(t--){
string s;
cin>>s;
int m=0;int num=0;
for(int i=0;i<=s.size();i++){
if(s[i]=='L')m++;//����jiayi
if(m>num) num=m;
if(s[i]=='R')m=0;
}
cout<<num+1<<endl;
}
return 0;
}