目前做过的唯一一个有点思维含量的黄题

· · 闲话

做题时间:2023.09.22-12:07

整理时间:2024.05.23-11:50

tag:构造

黄题的话历史都比较久远了,大概从去年 10 月开始就有做题洁癖了,不过这也不是坏事,毕竟做过的 80 多个黄题就这一个一眼秒不掉。

我们定义 \log n=32-\_\_\operatorname{builtin}\_\operatorname{clz}(n),定义 f(n)=1<<\log n+1,即,第一个大于 n2 的幂,则必然有 \operatorname{xor}_1^{n-2}< f(n-2)\le f(n),观察到题目中对和的限制,我们先选上前 n-2 个数后的和等于 \dfrac{n^2-3n+2}{2},而 f(n)\le 2n,也就是说 当 n 不是特别小的时候,我们一定能选出两个 2n 数量级的数使得异或结果与上面那个东西的异或结果为 n

特别的,特判一下 n 很小的情况就能保证这个结论成立。

void solve()
{
    int n;cin>>n;
    if(n==1)cout<<"1"<<"\n";
    if(n==2)cout<<"1 3"<<"\n";
    if(n==3)cout<<"-1"<<"\n";
    if(n==4)cout<<"1 2 3 4"<<"\n";
    if(n==5)cout<<"1 3 4 5 6"<<"\n";
    if(n<=5)return;
    int s=0,a=0;
    for(int i=1;i<=n-2;i++)
    {
        a^=i;//前 n-2 个数的异或和
        s+=i;//前 n-2 个数的和
        cout<<i<<" ";//先把这些数用出来占空
    }
    for(int i=n-1;i<=n*n-s;i++)//其实很快就能枚举到,这个上界无所谓,可以直接删了
        if((a^i^n)+s<=n*n&&(a^i^n)>n-2)
        {//等价于找一个与 i 异或后等于 a^n 的数,这个数不能用过,也不能太大
            cout<<i<<" "<<(a^i^n)<<"\n";
            return;
        }
}

鲜花:

前几天我的状态是晚上睡个 3-4h 白天再在教室连早自习睡一上午,然后班主任的课再半睡半醒一节课,最后下午来机房里待两三节课,再待两节晚自习然后回家,主要是新位置睡觉不容易被值班老师发现,但我发现这样虽然保证了我这几节在机房里的课精神相对还行,同时时间又不少太多。

但是我发现了一个不好的现象是,我早早的就躺床上了,但就是睡不着,无论我是两点上床还是昨天晚上甚至 11 点就上床了,都得两点半左右睡着,然后早上醒的严重早于计划,本来计划睡到 5:20 以后但一般 4:40 就睡不着了,明天要打梦熊,后天有正式比赛,我总不能形成一个上午固定睡觉的恶性循环吧,还有医生说我要是继续睡眠不规律的话会导致恶化的更快,那可不行,我还哞拿到金勾,于是今天上午顶着困意来到了机房,虽然困了好几次,但好在哞睡着,希望今天晚上能睡够 5h

最近忘说一件事了,首先,我从大概两个月前(也就是那个文章的大上次更新)就形成了固定的饮食,吃饭时间集中到了早上,且每天都吃,前段时间,家里买了一箱芒果(哞熟),我妈妈打算催熟,但我不喜欢吃熟的,为什哞有人觉得把水果弄得和烂了一样更好吃,于是我这几天已经吃了大半个星期的芒果了(((

不过一件很离谱的事情是,我感觉我好像打破能量守恒定律了,以前不是天天吃饭,平均每天 1k 左右的热量(单位都是千焦,我不懂那些这个卡那个卡的那一套)体重不变,现在每天吃饭,一天能吃 2k+ 甚至有时候 3k+ 体重还是不变,所以这说明一件事情,那些减肥的天天在那里算热量是纯粹浪费时间,不过我妈妈可无语了,体重秤上的数字有什哞意义,讲个笑话,按学校体测对 BMI 的最低标准,如果我真的像我妈妈想的那样达到 120 斤的话,那我得 1.9m+,所以这个就别想了……