zoukankan      html  css  js  c++  java
  • 济南-1103试题解题报告

    济南-1103试题解题报告

    By shenben

    上午

    T1代码:

     

    #include<cstdio>
    #include<cstring>
    using namespace std;
    unsigned int p,z,n,v[66000];
    char c;
    #define name "ab"
    int main(){
        for(int l=1;;l++){
            memset(v,0,sizeof v);
            freopen(name".in","r",stdin);
            for(p=0,z=(1u<<l)-1,c=getchar();c>32;c=getchar(),n++){
                p=((p<<1)|(c=='B'))&z;
                if(n>l) v[p/32]|=1u<<(p%32);
            }
            for(p=0;p<(1<<l);p++){
                if(!(v[p/32]>>(p%32)&1)){
                    freopen(name".out","w",stdout);
                    for(int i=l;i;i--) putchar('A'+(p>>(i-1)&1));
                    return 0;
                }
            }
        }
        return 0;
    }
    /*
    //copy from ylf's AC code
    //答案很短 很短
    //直接搜 不过 检验的时候很慢...
    //预处理所有的子串 存好了就可以O(1)的检验了
    //因为只有AB 可以用位运算优化 
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #define maxn (1<<22)+10
    using namespace std;
    int n,m,f[maxn],sum,falg,ans;
    char s[maxn];
    void dfs(int now,int x){
        if(falg) return;
        if(now==sum+1){
            if(f[x]==0){
                ans=x;falg=1;
            }
            return;
        }
        dfs(now+1,x);
        dfs(now+1,x+(1<<now-1)); 
    }
    int main(){
        freopen("ab.in","r",stdin);
        freopen("ab.out","w",stdout);
        scanf("%s",s);
        n=strlen(s);m=log(n)/log(2)+1;
        for(int i=0;i<n;i++){
            int x=0;
            for(int j=1;j<=m;j++){
                if(i+j-1>n) break;
                if(s[i+j-1]=='B') x+=(1<<j-1);
                f[x+(1<<j)]=1;
            }
        }
        for(sum=1;sum<=m;sum++){
            dfs(1,1<<sum);
            if(falg) break;
        }
        for(int i=0;i<sum;i++) printf(ans&(1<<i)?"B":"A");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    */

     

     

    T2代码:

    //评测时需要额外开栈 
    #pragma comment(linker,"/STACK:102400000,102400000")
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=5e6;
    bool pd[N+1];
    int p[N+1],c[N+1];
    int maxc(int x){
        if(x<=N)return c[x];
        int ans=x;
        for(int i=1;p[i]*p[i]<=x;i++)
        if(x%p[i]==0){while(x%p[i]==0)x/=p[i];ans=p[i];}
        return max(ans,x);
    }
    int get(int x,int y,int b){
        if(x>y) return 0;
        if(b==0) return x==1;
        if(y<=p[b]) return y-x+1;
        if(x==y) return maxc(x)<=p[b];
        return get(x,y,b-1)+get((x-1)/p[b]+1,y/p[b],b);
    }
    int main(){
        freopen("prime.in","r",stdin);
        freopen("prime.out","w",stdout);
        int n,m,b;
        scanf("%d%d%d",&b,&n,&m);
        c[1]=1;
        for(int i=2;i<=N;i++){
            if(!pd[i])p[++p[0]]=i,c[i]=i;
            for(int j=1,t;j<=p[0]&&(t=p[j]*i)<=N;j++){
                pd[t]=1;
                c[t]=max(c[i],p[j]);
                if(i%p[j]==0)break;
            }
        }
        printf("%d
    ",m-n+1-get(n,m,upper_bound(p+1,p+1+p[0],b)-p-1));
        fclose(stdin);
        fclose(stdout);
        return 0;
    }

     

    T3代码:

     

    补上题目:

     

  • 相关阅读:
    BZOJ 1562 [NOI2009] 变换序列
    BZOJ 2535:NOI 2010 航空管制
    C++ 莫队算法(转)
    SDOI2013直径(树的直径)
    c++分块算法(暴力数据结构)
    洛谷题解 P2865 【[USACO06NOV]路障Roadblocks】
    c++最短路经典问题
    LOJ#10065. 「一本通 3.1 例 2」北极通讯网络
    最小生成树(kruscal算法)
    飞屋环游记
  • 原文地址:https://www.cnblogs.com/shenben/p/6036333.html
Copyright © 2011-2022 走看看