zoukankan      html  css  js  c++  java
  • Codeforces Round #691 (Div. 2)

     A. Red-Blue Shuffle

    这题求问概率没啥好说的,首位决定一切,比较首位个数。

    B. Move and Turn

    竖着走以后只能横着走,横着走以后只能竖着走。

    开始像暴力搜索,然后炸了。炸了以后开始找规律。

    按他的说法打表,打出来以后按奇偶位找规律。

    打表代码如下

    ll id=0;
    struct node{
        int x,y;
        int dir;
        int step;      
        ll num;               
        bool operator<(const node& a) const{
            return num<a.num;
        }
    };
    queue<node>q;
    map<pair<int, int> ,int> mp;
    map<node,int>mp2;
    int main(){
        int n;cin>>n; 
            ll ans=0,num=0;
            q.push((node){1,1,0,0,++id});
            q.push((node){1,1,1,0,++id});
            while(!q.empty()){
                node now=q.front();
                q.pop();
                if(mp2[now]==0){
                    mp2[now]++;
                }
                else{
                    continue;
                }
                if(now.step==n){
                    pair<int ,int > pp= make_pair(now.x,now.y);
                    if(mp[pp]==0){
                        mp[pp]=1;
                        ans++;
                    }
                }
                else{
                    if(now.dir==1){
                        q.push((node){now.x+1,now.y,0,now.step+1,++id});
                        q.push((node){now.x-1,now.y,0,now.step+1,++id});
                    }
                    else if(now.dir==0){
                        q.push((node){now.x,now.y+1,1,now.step+1,++id});
                        q.push((node){now.x,now.y-1,1,now.step+1,++id});
                    }
                }
            }
            cout<<ans<<endl;
        return 0;
    }

    ac代码如下:

    const int N=1e4+7;
    int a[N],pos=1,num=0;
    int main(){
        int n;
        for(int i=1;i<=1000;++i){
            num+=i;
            a[pos]=4*num;
            pos+=2;
        }
        for(int i=1;i<=1000;++i){
            if(i%2==0){
                a[i]=(i/2+1)*(i/2+1);
            }    
        }
        cin>>n;
        cout<<a[n]<<endl;
        return 0;
    }

    C. Row GCD

    我们目标是求出GCD(a1+k,a2+k,a3+k,a4+k,.......,an+k)

    我们学过辗转相减法,GCD(a,b)=GCD(a,b-a)

    而上面的一大串东西,实际上两两求GCD,那么两个之间就能合法的消去k

    继而我们得到原式=GCD(a1+k,a2-a1,a3-a2,an-an-1

    发现后面是不变的值,那么我们只需要根据b的变化改变 a1+k 就好了

    注意实现的时候qq初始设为0,这样n==1时,我们就不用特判了。

    如果qq初始设为a[2]-a[1]的话,n==1时,不存在该值,会出错。

    const int N=2e6+7;
    int n,m;
    ll a[N],b[N];
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i){
            scanf("%lld",&a[i]);
        }
        for(int i=1;i<=m;++i){
            scanf("%lld",&b[i]);
        }
        sort(a+1,a+1+n);
        ll qq=0;
        for(int i=2;i<=n;++i)
            qq=__gcd(qq,a[i]-a[i-1]);
        for(int i=1;i<=m;++i){
            ll ans=__gcd(a[1]+b[i],qq);
            printf("%lld ",ans);
        }
        return 0;
    }

    ------------

    周五的CF打完以后晚上没睡着,把英语课旷了,唉。

  • 相关阅读:
    Mac os下安装pycurl
    Mac os 10.9下面配置JAVA_HOME
    同步,异步,阻塞,非阻塞
    Python处理XML
    Apriori算法在购物篮分析中的运用
    Python抓取双色球数据
    为什么这么多Python框架
    Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明
    ubuntu 开机自动挂载分区
    VIM 配置随手记
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14164079.html
Copyright © 2011-2022 走看看