codeforces Round #627 (Div. 3)

做题点这里

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;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值