码迷,mamicode.com
首页 > 其他好文 > 详细

CF734F Anton and School 构造+数论

时间:2019-01-24 01:12:02      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:技术分享   ||   register   tps   nbsp   efi   etc   bsp   构造   

正解:构造

解题报告:

先放下传送门QwQ

这题首先要知道一个结论:(x&y)+(x|y)=x+y

还是能理解的趴?

所以我们把bi+ci就能得到∑a+n*a[i]

然后我们就能成功求出∑a

然后每个a就能求出来了

然后求出来之后再check下符不符合输入就欧克了!

哦关于那个check,如果一个个枚显然会超时

可以预处理每一位这么加,就从O(n2)变成O(n)辣!

484想通了不难!

等下写了代码放下代码就over辣!

太难过了,,,卡在了第六个测试点(修改之后卡在第五个了yep!

但我觉得我实在做得,zqsg地对,,,就很难过

布星我生气,不做这题了

先放代码QAQ

 

技术分享图片
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define ll int
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)

const ll N=200000+10;
ll n,a[N],b[N],c[N],k[35],sum;

inline ll read()
{
    rg ll x=0;rg bool y=1;rg char ch=getchar();
    while(ch!=- && (ch>9 || ch<0))ch=getchar();
    if(ch==-)ch=getchar(),y=0;
    while(ch>=0 && ch<=9)x=(x<<1)+(x<<3)+(ch^0),ch=getchar();
    return y?x:-x;
}
inline bool chck()
{
    rp(i,1,n)
    {
        rg ll tmp1=0,tmp2=0;
        rp(j,0,29)
        {
            if((a[i]>>j)&1)tmp1+=(1<<j)*k[j],tmp2+=(1<<j)*n;
            else tmp2+=(1<<j)*k[j];
        }
        if(tmp1!=b[i] || tmp2!=c[i])return 1;
    }
    return 0;
}

int main()
{
    n=read();rp(i,1,n)b[i]=read(),sum+=b[i];rp(i,1,n)c[i]=read(),sum+=c[i];sum/=(n*2);
    rp(i,1,n)a[i]=(b[i]+c[i]-sum)/n;
    rp(i,1,n)rp(j,0,29)if((a[i]>>j)&1)++k[j];
    if(chck()){printf("-1");return 0;}
    rp(i,1,n)printf("%d ",a[i]);
    return 0;
}
QAQ!

 

 

 

CF734F Anton and School 构造+数论

标签:技术分享   ||   register   tps   nbsp   efi   etc   bsp   构造   

原文地址:https://www.cnblogs.com/lqsukida/p/10312136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!