当前位置:Gxlcms > html代码 > CodeforcesRound#262(Div.2)-A,B,C,D_html/css_WEB-ITnose

CodeforcesRound#262(Div.2)-A,B,C,D_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:7人阅读

A. Vasya and Socks

水题就不用多说了,直接暴力枚举就完事了。

#include #include#include#include#include#include#includeusing namespace std;#define LL __int64int main(){    int n,k;    while(~scanf("%d%d",&n,&k))    {        int m=n;        int ans=n;        int yu=0;        while(m)        {            m=m+yu;            yu=m%k;            m=m/k;            ans+=m;        }        cout<  
B. Little Dima and Equation

也不用说,水题一个,直接枚举s(x),然后得到x,然后根据x推出s(x)是不是合适。

当时把81写成了72,不由的十分悲伤,sad.

#include #include#include#include#include#include#includeusing namespace std;#define LL __int64#define INF 1000000000vectorvec;LL pows(LL x,LL y){    LL ans=1;    while(y--)ans=ans*x;    return ans;}int dus(LL x){    int ans=0;    while(x)    {        ans=ans+x%10;        x=x/10;    }    return ans;}int main(){    int n,k;    int a,b,c;    while(~scanf("%d%d%d",&a,&b,&c))    {        LL ans=0;        vec.clear();        for(int i=1;i<=81;i++)        {            ans=(LL)b;            ans=ans*pows(i,a);            ans=ans+(LL)c;            if(ans>=INF)break;            if(ans<=0)continue;            if(dus(ans)==i)vec.push_back(ans);        }        cout<

C. Present

二分+贪心。也是一种水题的表现形式。。。。

二分一下结果,贪心看当前结果能不能达到。

#include #include#include#include#include#include#includeusing namespace std;#define LL __int64#define INF 1000000000#define maxn 220000LL a[maxn];LL b[maxn];LL flag[maxn];LL n,w;LL qiu(LL x){    memset(flag,0,sizeof(flag));    for(LL i=1;i<=n;i++)    {        b[i]=x-a[i];    }    LL ch=0;    LL ans=0;    for(LL i=1;i<=n;i++)    {        ch-=flag[i];        b[i]-=ch;        if(b[i]<0)b[i]=0;        flag[i+w]+=b[i];        ch+=b[i];        ans+=b[i];    }    return ans;}int main(){    LL m;    while(~scanf("%I64d%I64d%I64d",&n,&m,&w))    {        for(LL i=1;i<=n;i++)scanf("%I64d",&a[i]);        LL l=0;        LL r=1e9;        r=r*2;        LL mid=(l+r)/2;        while(lm)r=mid;            else l=mid+1;            mid=(l+r)/2;        }        mid--;        cout<

D. Little Victor and Set

写这个题的时候要多悲剧有多悲剧,竟然在我认为最不可能错的地方写错了。

我很悲伤.

n=r-l+1;

若n<=20,很明显状态压缩就OK。

若k<=3.

当k=1时,很明显取l。

当k=2时,很明显取两个相邻的,并且只有末位不同的数,他们的异或

结果为1.

当k=3时,第一个数取l,然后假如结果为0,算出剩下两个数的最小值。如果两个数最大的

不大于r,那我们就取这三个数,否则取两个数使得结果为1.

当k>=4时:

对于下面两个数交替处:

..........0111110 k-2

..........0111111 k-1

..........1000000 k

..........1000001 k+1

很明显我们可以看出来k-2,k-1,k,k+1的异或值为0。

因为n>20,我们一定能找出这种k。

#include #include#include#include#include#include#includeusing namespace std;#define LL __int64#define INF 1000000000#define maxn 220000void dos1(LL l,LL r,LL k){    LL n=r-l+1;    LL st=((LL)1)<k)continue;        if(res>ans)        {            res=ans;            rst=i;        }    }    len=0;    for(LL i=0; i=0; i--)    {        if((l&(((LL)1)<>i);            n=(n<=l&&k+1<=r)            {                return k;            }            else if(k-2r)return dos2(l,k-1,ks);        }    }    return 0;}void dos3(LL l,LL r,LL k){    if(k==1)    {        cout<=0; i--)    {        if(l&(((LL)1)<

                  

	 	
                    
                    
                    
                    
                    
                

人气教程排行