首页 > 其他分享 > Codeforces Round #769 (Div. 2) B,C

Codeforces Round #769 (Div. 2) B,C

时间:2022-12-25 20:01:17浏览次数:63  
标签:769 int Codeforces mid 异或 solve Div

Codeforces Round #769 (Div. 2) B,C

B

B

这道题我在vp的时候一直没有想出来,一直不知道到底怎么写,只是想到和幂有关,wa了一发,后来看了大佬的题解,真是觉得自己太菜了,自愧不如

这里我还有一个误区,就是在vp的时候我一直想着把最大的n-1和1放在一起,其实是不对的,因为那时我觉得答案的max一定是n-2(我觉得n-1和1异或一定会减一,我也不知道我当时怎么想出来的,赛后自己仔细想了想,好像n-1和1异或不一定=n-2,只有当n-1是奇数的时候异或1才会减一,当时我应该是傻了吧)

#include <iostream>
using namespace std;
int n,t;
void solve()
{
    cin>>n;
    int mid=1;//mid是二进制中只有一个1且此时1的位置是最高位,把mid和0放在一起,那么这个一定是就是这个数,而其他的都和相邻的进行异或,那么这样
    //他们的值一定不会很大,不会超过mid,对于x,和x+1,只有其中x+1是1000式二进制的时候,异或值才是x+x+1(两个值相加),
    //而x+x+1一定不会等于mid,最大只能等于mid-1,其他的异或值不一定等于x+x+1哦
    for (int i=1;i<=n;i<<=1)
    {
        if ((i<<1)>n-1)
        {
            mid=i;
            break;
        }
    }
    for (int i=1;i<mid;i++)
    {
        cout<<i<<" ";
    }
    cout<<0<<" ";
    for (int i=mid;i<n;i++)
    {
        cout<<i<<" ";
    }
    cout<<'\n';
    return ;
}
int main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

C

C

vp的时候看这道题就只有十多分钟了,脑子还是不清醒,以为总共只有两种操作方法

1,a+x(x次加法),然后在或运算,最后等于b

2,a先异或,然后再对b进行加法(因为或运算最后的值一定会大于等于max(a,b))

其实还有

3.b+x(先对b进行x次加法),然后再或

4,直接取差值

然后求取最小操作数

#include <iostream>
using namespace std;
int a,b,n;
void solve()
{
    cin>>a>>b;
    if (a>=b)
    {
        cout<<a-b<<'\n';
        return ;
    }
    //cout<<(a|b)<<'\n';
    int ans1=(a|b)-b;
    ans1++;
    //cout<<ans1<<" ";
    int ta=a,tb=b;
    int ans=0;
    while ((ta|tb)!=tb)
    {
        ta++;
        ans++;
    }
    ans1=min(ans1,ans+1);
    int tmpb=b*2+100;
    ta=a,tb=b;
    ans=0;
    while ((ta|tb)!=tb&&tb<tmpb)
    {
        tb++;
        ans++;
    }
    ans1=min(ans1,ans+1);
    ans1=min(ans1,b-a);
    cout<<ans1<<'\n';
    return ;
}
int main ()
{
    int t;
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

标签:769,int,Codeforces,mid,异或,solve,Div
From: https://www.cnblogs.com/righting/p/17004488.html

相关文章

  • Codeforces Round #814 (Div. 2)
    A核心思路:这题没什么好说的直接面向样例编程。#include<iostream>#include<cstring>#include<string>#include<vector>#include<math.h>#include<cmath>#inc......
  • Codeforces Round #586 (Div. 1 + Div. 2) D
    D.AlexandJulian题链很容易发现我们要是两个数互相不构成奇环的话=(a+b)/gcd(a,b)为偶数我们发现如果ab为奇数的时候一定可以并且奇偶一定不同组但是发现24这种又......
  • Educational Codeforces Round 122 (Rated for Div. 2),C,D
    EducationalCodeforcesRound122(RatedforDiv.2),C,DCC这道题就是普通的暴力,但是我在做的过程中第10组数据出现了数据溢出的错误我的错误代码,我在vp的时候没觉得......
  • Codeforces Round #589 (Div. 2) D
    D.CompleteTripartite题链与其他题解不同我首先发现的是没有相连的一定是同一组那么我们直接对于整个数组遍历一遍将与1同组的搞出来要是下一个位置已经有组了我......
  • POJ 1014 Dividing
    POJ1014Dividing题意:多重背包问题,给出若干物品,求是否能分成价值相同的两堆思考:求出总和\(sum\)之后,如果\(sum\)是奇数则一定不可能,然后如果我们能凑出\(sum/......
  • Codeforces Round #770 (Div. 2)B,C
    CodeforcesRound#770(Div.2)B,C还是惨绝人寰的只做了一个题,ε=(´ο`*)))唉BB这一道题大意是是首先有一个d,然后有n个操作,从1到n,每一次我们都需要选择让d=d+a[i]还是d......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......
  • Codeforces 1097 G Vladislav and a Great Legend 题解 (DP)
    题目链接思路首先看到这种求\(x^k\)形式的,直接无脑转下降幂:\(x^k=\sum_{i=1}^kS2(k,i)\cdotx^{\underline{i}}\),其中\(S2\)表示第二类斯特林数,\(x^{\underlinei}\)表......