zoukankan      html  css  js  c++  java
  • CodeChef November Challenge 2013 部分题解

    http://www.codechef.com/NOV13 还在比...我先放一部分题解吧...

    Uncle Johny 排序一遍

    struct node{
        int val;
        int pos;
    }a[MAXN];
    int cmp(node a,node b){
        return a.val < b.val;
    }
    int main(){
        int T,n,m;
        while(cin>>T){
            while(T--){
                cin>>n;
                for(int i = 0 ; i < n ; i++){
                    cin>>a[i].val;
                    a[i].pos = i+1;
                }
                cin>>m;
                sort(a,a+n,cmp);
                for(int i = 0 ; i < n ; i++){
                    if(a[i].pos == m){
                        cout<<i+1<<endl;
                        break;
                    }
                }
            }
        }
        return 0;
    }

    Missing some chairs 简单快速幂

    LL pow_mod(LL a, LL b){
        if(b == 1) return a;
        LL x = pow_mod(a,b/2),ret;
        if(b&1){
            ret = ((x * x)%MOD * a) % MOD;
        }else ret  = (x * x) % MOD;
        return ret;
    }
    int main(){
        int T;
        cin>>T;
        while(T--){
            LL n;
            cin>>n;
            LL c = pow_mod(2,n);
            cout<<c-1<<endl;
        }
        return 0;
    }

    Yet Another Cute Girl

    因子个数为素数的可能只有可能是pi^(pj-1)次幂..其中p是素数

    对于pj=2,区间素数筛,筛到sqrt(N)就行了...有O(n)的做法但我懒得写...其他的情况直接处理[L,R]内pi^(pj-1)的个数,加起来即可...

    考虑到pow可能爆LL,这个很坑..我应该是卡过的...

    LL cnt;
    bool prime[MAXN];
    LL pri[MAXN];
    bool p[MAXN];
    LL L,R;
    void pre_prime(){
        cnt = 0;
        prime[0] = prime[1] = 1;
        for(int i = 2 ; i < MAXN ; i++){
            if(!prime[i]) pri[cnt++] = i;
            for(int j = 0 ; j < cnt && i * pri[j] <= MAXN ; j++){
                prime[i * pri[j]] = 1;
                if(i % pri[j] == 0) break;
            }
        }
    }
    LL mpow(LL a, LL b){
        LL ret = 1;
        for(LL i = 0 ; i < b ; i++){
            LL tmp = ret * a;
            if(tmp > LINF || tmp < ret) return -1;
            ret = tmp;
        }
        return ret;
    }
    LL solve(){
        LL ct = 0;
        mem(p,0);
        for(LL i = 1 ; i < cnt ; i++){
            for(LL j = 0 ; j < cnt ; j++){
                LL q = mpow(pri[j],pri[i]-1);
                if(q == -1) break;
                if(q >= L && q <= R){
                    ct++;
                }
            }
        }
        for(LL j = 0 ; j < cnt ; j++){
            LL i;
            L % pri[j] == 0 ?  i = L : i = (L/pri[j]+1)*pri[j];
            if(i < MAXN && prime[i] == 0) i = i*2;
            for(i ; i <= R ; i+=pri[j]) p[i-L] = true;
        }
        for(LL i = L ; i <= R ; i++){
            if(p[i-L] == false && i != 1){
                ct++;
            }
        }
        return ct;
    }
    int main(){
        pre_prime();
        int T;
        cin>>T;
        while(T--){
            cin>>L>>R;
            LL res = solve();
            cout<<res<<endl;
        }
        return 0;
    }

    Square Digit Squares 预处理一遍完全平方数,就没多少个

    LL a[MAXN];
    int cnt = 0;
    bool judge(LL x){
        while(x){
            LL y = x%10;
            if(y != 1 && y != 0 && y != 4 && y != 9) return false;
            x/=10;
        }
        return true;
    }
    void pre(){
        for(LL i = 1 ; i*i <= (LL)pow((LL)10,(LL)10)+50 ; i++){
            if(judge(i*i)){
                a[cnt++] = i*i;
            }
        }
    }
    int main(){
        pre();
        int T;
        cin>>T;
        while(T--){
            LL ax,bx;
            cin>>ax>>bx;
            int ct = 0;
            for(int i = 0 ; i < cnt ; i++)
                if(a[i] >= ax && a[i] <= bx) ct++;
            cout<<ct<<endl;
        }
        return 0;
    }

    Superpowers of 2 还是幂取模,一套题出两次我就不吐槽了,也许LL会WA

    ULL change(ULL a){
        ULL ret = 0;
        int p[100],cnt = 0;
        while(a){
            p[cnt++] = a%2;
            a/=2;
        }
        for(int i = cnt-1 ; i >= 0 ; i--){
            ret = ret * 10 + p[i];
        }
        return ret;
    }
    ULL pow_mod(ULL a, ULL b){
        if(b == 1) return a;
        ULL x = pow_mod(a,b/2),ret;
        if(b&1) ret = ((x * x)%MOD * a) % MOD;
        else ret  = (x * x) % MOD;
        return ret;
    }
    int main(){
        int T;
        cin>>T;
        while(T--){
            int n;
            cin>>n;
            ULL x = pow_mod(2,change(n));
            cout<<(x*x)%MOD<<endl;
        }
        return 0;
    }
  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/Felix-F/p/3414705.html
Copyright © 2011-2022 走看看