Codeforces Round #627 (Div. 3)

题目链接

A. Yet Another Tetris Problem

若两个相邻方块之差不是偶数,则NO

#include 
using namespace std;
typedef long long ll;
int a[111],b[111];
int main()
{
     ios::sync_with_stdio(false);
     int t,n;
     cin>>t;
     while(t--)
     {
         cin>>n;
         for(int i=1;i<=n;i++)
         {
             cin>>a[i];
         }
         int cnt=0;
         for(int i=2;i<=n;i++)
            b[++cnt]=a[i]-a[i-1];
        int flag=0;
         for(int i=1;i<=cnt;i++)
         {
             if(b[i]%2!=0)
             {
                 flag=1;
                 break;
             }
         }
         if(flag)
            puts("NO");
         else
            puts("YES");
     }
     return 0;
}

B. Yet Another Palindrome Problem

是否有一个长度大于3的回文子序列,,暴力模拟就行。

#include 
using namespace std;
typedef long long ll;
int a[11111];
int main()
{
     ios::sync_with_stdio(false);
     int t,n;
     cin>>t;
     while(t--)
     {
         cin>>n;
         for(int i=1;i<=n;i++)
         {
             cin>>a[i];
         }
         int flag=0;
         for(int i=1;i1)
                    sum++;
            }
            if(sum!=0)
            {
                flag=1;
                break;
            }
         }
         if(flag)
            puts("YES");
         else
            puts("NO");
     }
     return 0;
}

C. Frog Jumps

青蛙要从0位置跳到n+1 去,n每个位置会有两种字符:L,R。在L 字符只能往左跳,R 字符处只能往右跳。你有一个最大距离d ,你每次跳的距离为[1,d] ,让你输出你可以恰好到达n+1 处的最小的d 。

最小的d,要跳到R上,求R之间的最大间距,n+1处也设为R。

#include 
using namespace std;
typedef long long ll;
char s[1111111];
int main()
{
     ios::sync_with_stdio(false);
     int t;
     cin>>t;
     while(t--)
     {
         cin>>s+1;
         int len=strlen(s+1);
         s[len+1]='R';
         int l=0,ans=0;
         for(int i=1;i<=len+1;i++)
         {
             if(s[i]=='R')
             {
                 ans=max(ans,i-l);
                 l=i;
             }
         }
         cout<


D. Pair of Topics

化简完就是求Ci+Cj>0有多少对??

暴力查肯定会爆,,二分查找。。

#include 
using namespace std;
typedef long long ll;
int a[200005],b[200005],c[200005];
int main()
{
     ios::sync_with_stdio(false);
     int n;
     cin>>n;
     for(int i=1;i<=n;i++)
        cin>>a[i];
     for(int i=1;i<=n;i++)
        cin>>b[i];
     for(int i=1;i<=n;i++)
        c[i]=a[i]-b[i];
     sort(c+1,c+n+1);
     ll sum=0;
     for(int i=1;i<=n-1;i++)
     {
         ll l=i+1,r=n+1;
         while(l>1;
             if(c[mid]+c[i]>0)
                r=mid;
             else
                l=mid+1;
         }
         if(r!=n+1)
            sum+=n-r+1;
     }
     cout<

 

你可能感兴趣的:(思维题)