G - WiFi Password Gym - 101608G 【 尺取 】

2023-03-09 19:40:06 浏览数 (2)

G - WiFi Password

Gym - 101608G 

&:以前学过的,又忘记了。 从左往右枚举,如果发现当前的 sum 值大于了 m ,就 break 。然后从当前位置开始向前求 “或”,初始化一下 sum , 然后让左端点开始的位置是 sum > m 的位置,进行下一次比较。这样左端点就是往后移了。

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
typedef long long ll;
const int maxn = 2e5   10;
int a[maxn];
int main()
{
    int t,n,m,i,j;
    freopen("wifi.in", "r", stdin);
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d", &n, &m);
        for(i = 0; i < n; i   )
        {
            scanf("%d", &a[i]);
        }
        int Max = -1;
        int len = 0;
        int res = 0;
        int sum = 0;
        for(i = 0; i < n;)
        {
            sum = 0;
            len = 0;
            for(j = i; j < n; j   )
            {
                sum |= a[j];
                len   ;
                if(sum > m) break;
                res = max(res,len);
            }
            if(j >= n) break;
            sum = 0;
            for(; j >= 0; j --)
            {
                sum |= a[j];
                if(sum > m) break;
            }
            i = j   1;
        }
        printf("%dn",res);
    }
    return 0;
}

0 人点赞