周末总结3

周末总结

字符串&&dp

罪不可赦,上周两个div都不满意,两个半洛谷字符串
上周做的不好,感觉超级忙
两个考试和竞赛过去了,今天开始补

Div.2

Codeforces Round #752 (Div. 2)B题

周末忙着竞赛抱佛脚,div.2结束了才开始做它时间超级匆忙

B题

题解题过程和题解 别家博客讲得很清楚了

大家可以直接忽略下面我寄己做题的心路历程:

那就话的意思是:(那句话就不放这儿了,少儿英语)
这些相对应子串的最长上升子序列的长度分别是…

读题着急啦,下次长个心眼儿

读懂了可能对我来说也没思路,上一次Div.2还总结了直接找规律的题型,any one(任何一种方式,任何一种输出都可以)这种情况就可以去考虑极端找解(简单易实现)

但这个题没有,它是对最后子串中最长上升子序列的长度进行异或。写到这儿我回去又读了一遍~发现了秘密!

YouKn0wWho wonders if it is possible to split the sequence a in such a way that the bitwise XOR of h1,h2,…,hk is equal to 0. You have to tell whether it is possible.

秘密:in such a way

潜台词:任何方式分离子串都可以,就要能让最后异或结果为0,就是YES

所以我彻悟了 (菜鸟的彻悟就在一瞬间)

Maybe,解题才刚刚开始…

分析:
只要我们要找出0来就输出YES,
再结合异或这个运算,会联系到奇数和偶数的要讨论(一开始不确定没关系,先试试)

那么偶数一定可以分为偶数个1,偶数个1异或一定是0,那么偶数情况一定是YES
奇数一定可以分为奇数个1,异或结果是1,但
一种特殊情况:存在两个相邻的数不递增,将他们放在一组,如(7,6)长度是1不是2。

这样就解决了,就可以用偶数个1异或为0了

#include <iostream>
#define ll long long
using namespace std;
 
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        ll a[n];
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        if(n%2==0)
            cout<<"YES"<<endl;
        else
        {
            int f=0;
            for(int i=1;i<n;i++)
            {
                if(a[i-1]>=a[i]) {f=1;break;}
            }
            if(f==1) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }
    return 0;
}

其实是从十一点写到了一点钟,这个题我以为会了其实不是超级理解,现在我明白啦!很简单!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值