首页 > 其他分享 >Codeforces Round 948 (Div. 2) B - C

Codeforces Round 948 (Div. 2) B - C

时间:2024-05-27 22:34:40浏览次数:18  
标签:948 int Codeforces back 因子 maxn 数组 ans Div

总结:

做了A,B,然后开局A看错题wa了一发,B出的又很慢,所以掉大分。总的来说还是c没开出来。


B. Binary Colouring

1.题目大意:
给你一个int范围内的数x,要求构造一个二进制串,能有-1、1、0,二进制串的值不能出现两个连续的地方不为0,二进制串的值要等于x。

2.思路分析:
我们可以发现,对于x的原本的二进制串来说,只有碰到连续的1才会要进行变化,我们希望的是其中一个地方的1变成0。记这两位1中高位为b1,低位为b2。那么只要b1进位,那么b1就会变成0,所以可以让b1 + 1,然后相当于多了一个b2,于是就让b2变成-1,然后就可以了。最后最高位要处理一下进位。

3.代码如下:

void solve() {
    ll x; cin >> x;
    vi ans;
    while(x) {
        ans.push_back(x % 2);
        x /= 2;
    }
    for(int i = 0; i < ans.size() - 1; i++) {
        if(ans[i] == 2) {
            ans[i] = 0;
            ans[i + 1] += 1;
        }
        if(ans[i] == 1 && ans[i + 1] == 1) {
            ans[i] = -1;
            ans[i + 1] += 1;
        }
    }
    if(ans.back() == 2) {
        ans.pop_back();
        ans.push_back(0), ans.push_back(1);
    }
    cout << ans.size() << "\n";
    for(auto i : ans) cout << i << " ";
    cout << "\n";
}

C. Nikita and LCM

1.题目大意:
定义一个数组A的子数组是特殊的,那么这个子数组的lcm不在A中。给你一个数组A,问你数组A的最长的特殊子数组的长度是多少。

2.思路分析:
记整个数组的最大值为maxn

  • 如果A中存在不是maxn的因子的数,那么整个数组都是一个特殊数组,因为算出来的lcm一定会比maxn大
  • 否则,剩下的除了maxn以外的数一定都是maxn的因子,所以剩下的数字组成的子数组的lcm也是maxn的因子,所以我们可以去枚举maxn的这些因子并且判断这个因子是不是不在数组A中,只有不在的时候才去验证。记每次枚举的因子为x,然后我们遍历一遍数组,碰到的 \(a_{i}\) 只要是x的因子就可以选,最后判断选的所有数的lcm是不是x就可以了。然后在所有情况中选一个最大值。

3.代码如下:

void solve() {
    int n;cin >> n;
    int ans = 0;
    vi a(n + 1);
    set<int> st;
    for(int i = 1; i <= n; i++) cin >> a[i], st.insert(a[i]);
    sort(a.begin() + 1, a.begin() + 1 + n);
    int maxn = a[n];
    int flag = 0;
    for(int i = 1; i <= n; i++) {
        flag |= (maxn % a[i]);
    }
    if(flag) {
        cout << n << "\n";
        return;
    }
    auto check = [&](int x) {
        if(st.count(x)) return 0LL;
        int g = 1, cnt = 0;
        for(int i = 1; i <= n; i++) {
            int ng = std::lcm(g, a[i]);
            if(x % ng) continue;
            cnt += 1;
            g = ng;
        }
        if(g == x) return cnt;
        return 0LL;
    };
    for(int i = 1; i * i <= maxn; i++) {
        if(maxn % i) continue;
        ans = max(ans, check(i));
        ans = max(ans, check(maxn / i));
    }
    cout << ans << "\n";
}

标签:948,int,Codeforces,back,因子,maxn,数组,ans,Div
From: https://www.cnblogs.com/orzkeyhacker/p/18216707

相关文章

  • codeforces round 948(div.2)
    https://m1.codeforces.com/contest/1977A:题意:小男孩尼基塔得到了一些立方体作为礼物。他决定用它们建一座塔。一开始,塔上没有任何立方体。在一次移动中,尼基塔要么正好把1 个立方体放到塔顶,要么正好从塔顶移走1个立方体。有没有可能在走了n 步之后,塔顶正好有m 个立......
  • Codeforces Round 927 (Div. 3) D. Card Game 题解 贪心
    CardGame题目描述Twoplayersareplayinganonlinecardgame.Thegameisplayedusinga32-carddeck.Eachcardhasasuitandarank.Therearefoursuits:clubs,diamonds,hearts,andspades.Wewillencodethemwithcharacters‘C’,‘D’,‘H’,......
  • Codeforces Round #947 题解 (A~G)
    目录A.BazokaandMocha'sArrayB.378QAQandMocha'sArrayC.ChamoandMocha'sArrayD.PainttheTreeE.ChainQueriesF.SetG.ZimphaFanClubA.BazokaandMocha'sArray枚举每个循环移位判断.B.378QAQandMocha'sArray首先最小的数肯定得选,删掉最小的数的倍数......
  • Codeforces Round 947 (Div. 1 + Div. 2) E. Chain Queries
    本来决定开摆养生不打的,但11点半的时候点进去看到这个题是个疑似DS,写题的欲望瞬间高涨,然后就40min写了这个题然而赛中并不能提交,只好等到第二天早上再交一发,没想到还WA了一发才过首先这题如果我们能确定当前黑色点集的链的两个端点\(x,y\)的话,这个题就非常显然了只需要求出\((x......
  • 24.2.13 ~ 4.13 Codeforces Round 925 & 926 & 934 & 939 (Div.3 / Div.2 * 3)
    925Div.3Solve:A~G(7/7)Rank:95Rating:\(0+706=706\)(\(1400+206=1606\))发挥评价:Normal+本场没什么有价值题目。926Div.2Solve:A~DF(5/6)Rank:72Rating:\(706+575=1281\)(\(1606+225=1831\))发挥评价:Good本场没有什么失误。CF1929E*2300(me*2300)选......
  • Codeforces Round 947 (Div. 1 + Div. 2)
    Solve:A~ERank:425Rating:\(1744+195=1939\)(\(1894+95=1989\))发挥评价:Normal本场问题:E先WAon4,较快找出问题后修改WAon27,就又急了(重现上午),开始怀疑做法正确性未果,结果1h后才发现是代码出现问题。注意先检查代码漏洞而不是先怀疑正确性(尤其是错在后面时候,要是正......
  • CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!)
    切5道。A\([a_1=1]\)B\(\max(\max(xy),\max(x^2),\max(y^2))\)第一部分可以选整个数组,第二部分和第三部分是最大连续0段和1段。C操作等价于\(a_{l\simr}\oplus1\),\(b_{l\simr}\oplus1\),\(b_{1\simn}\oplus1\)。考虑先把\(a\)全部变成\(0\),使用ii......
  • Codeforces Global Round 12 C2. Errich-Tac-Toe (Hard Version) 题解 构造
    Errich-Tac-Toe(HardVersion)题目描述TheonlydifferencebetweentheeasyandhardversionsisthattokensoftypeOdonotappearintheinputoftheeasyversion.ErrichtogaveMonogonthefollowingchallengeinordertointimidatehimfromtakingh......
  • CF Round946 (Div. 3)C:map的map<pair<int,int>int>映射 + 性质
    BeautifulTriplePairs题目描述Polycarpwasgivenanarray$a$of$n$integers.Hereallylikestriplesofnumbers,soforeach$j$($1\lej\len-2$)hewrotedownatripleofelements$[a_j,a_{j+1},a_{j+2}]$.Polycarpconsidersapa......
  • Codeforces Round 946 (Div. 3) G Money Buys Less Happiness Now(反悔贪心)
    MoneyBuysLessHappinessNow1.题目大意:有n天,每天可以赚x块钱,然后每天可以通过花\(C_{i}\)块钱购买1点快乐值,然后每天赚的钱至少要在下一天才能用,问最多能获得多少快乐值。2.解题思路:我们发现天数变得很多,不能像e题那样dp了,所以要用贪心。具体来讲,我们碰到当前能买的就直接......