首页 > 其他分享 >CodeForces-1719D Burenka and Traditions

CodeForces-1719D Burenka and Traditions

时间:2022-08-22 14:12:29浏览次数:89  
标签:Burenka include int 1719D CodeForces 后缀 异或 now 贪心

Burenka and Traditions

贪心

由于代价是向上取整的,因此可以直接考虑成两种方式:

  1. 选择两个相邻的数,让他们同时异或上一个值

  2. 选择一个数字,让他变成 \(0\)

由此可见,最多的次数就是,全部都选择操作 \(2\),因此我们考虑让操作 \(1\) 使得两个相邻的数字一样的情况尽量的多次出现,这样就可以用一次操作 \(1\),使得两个数字同时变成 \(0\)

通过操作 \(1\),我们可以做到如下的变换:

-> \(x_1, x_2, x_3\)

-> \(0, x_1 \oplus x_2, x_3\)

-> \(0, 0, x_1 \oplus x_2 \oplus x_3\)

由此可见,我们可以通过操作 \(1\),使得某个位置的值,成为前面一坨数字的后缀异或和,如果这样的后缀异或和中,存在与后面的数字相同的情况,就直接贪心地省掉 \(1\) 次操作

此时,所有的后缀异或和必须清空重新计算

显然晚贪心的后缀异或和,必然是早贪心的后缀异或和的真子集,因此只要碰到相同就直接贪心

#include <iostream>
#include <cstdio>
#include <map>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        map<int, int>mp;
        int now = 0, ans = 0;
        for(int i=0; i<n; i++)
        {
            int x;
            cin >> x;
            if(now == x || mp[now ^ x])
            {
                mp.clear();
                now = 0;
            }
            else {mp[now ^= x] = 1; ans++;}
            
        }
        cout << ans << "\n";
    }
    return 0;
}

标签:Burenka,include,int,1719D,CodeForces,后缀,异或,now,贪心
From: https://www.cnblogs.com/dgsvygd/p/16612615.html

相关文章

  • Codeforces Round #743 (Div. 2) B. Swaps(思维)
    https://codeforces.com/contest/1573/problem/B给定两个长度为n的数组,数组a和数组b数组a包含从1到2*n的任意顺序的奇数,数组b包含从1到2*n的任意偶数可执行的操作如下:......
  • CF1718C Tonya and Burenka-179
    显然只需要考虑\(k\vertn\)。如果直接维护是\(O(nd(n)\logn)\)的,很寄。可以证明如果\(\frac{n}{k}\)不是素数则不优。这个很好理解,比如对于\(n=12,k=2,6\),所有\(......
  • Codeforces 1715E - Long Way Home
    又是废掉的一个div2啊第一次在学校熬夜打cf,开心还看到了自己最喜欢的斜率优化ohhh链接:E-LongWayHome看到那个平方就可以靠感觉认为是斜率优化了....感觉似不似......
  • Codeforces Round #816 (Div. 2)
    题面A.Crossmarket不妨设\(n\gem\),则答案为\(n+2(m-1)\)。特别地,\(n=1,m=1\)时答案为\(0\),注意特判。ViewCode#include<stdio.h>#include<algorithm>int......
  • [Codeforces Round #816 (Div. 2)] D. 2+ doors
    这次Div.2比之前我打的有些要难啊,前三道题就耗了好多时间,D题干脆摆烂了。。。还是太逊了对于一个\(x\),有\(x|y_i=z_i\),那么我们设\(num[x]=z_1\)&\(z_2\)&\(z_3\)..........
  • 【长期】板刷Codeforces 1500-1700 的构造题
    【长期】板刷Codeforces1500-1700的构造题https://codeforces.com/problemset/page/1?tags=constructive+algorithms%2C1500-1700&order=BY_RATING_ASC每天三道,记录一......
  • Codeforces 1720 D, E
    D1设\(dp(i)\)表示考虑前i个数的最长子序列。枚举\(j\),从\(dp(j)+1\)转移到\(dp(i)\),转移条件就是题中给的那个不等式。发现\(i-j\)不能超过\(300\),暴力枚举即可。时间......
  • [题解] Codeforces 1720 E Misha and Paintings 结论
    算是诈骗题?令一开始就存在的颜色数为cnt。k>=cnt的情况,显然每次找一个出现不止一次的颜色,然后把这个颜色的恰好一个方块替换成一种没有出现过的颜色就可以了,\(k-cnt\)次解......
  • codeforces963D. Frequency of String【哈希】
    我的腿让我停下,可是我的心却不许我这么做今天又是为了明知多半不可能的事情奔波一早,一天里,出了很多丑,犯了很多错,见了很多人,有了很多意想不到的收获,我选择了我的生存方式......
  • Codeforces Round #815 (Div. 2) 题解
    CF1720A.BurenkaPlayswithFractions给出两个分数$\dfrac{a}{b}$和\(\dfrac{c}{d}\),你每次操作能够选择其中一个分数的分子或分母,将其乘上任意一个整数(当然不能......