zoukankan      html  css  js  c++  java
  • 2013 成都网络赛 1003 1004 1007 1008 1010

    思路:

    1003是大水题

    #include<set>
    #include<map>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pb push_back
    #define mp make_pair
    #define Maxn 100010
    #define Maxm 200010
    #define LL __int64
    #define Abs(x) ((x)>0?(x):(-x))
    #define lson(x) (x<<1)
    #define rson(x) (x<<1|1)
    #define inf 100000
    #define lowbit(x) (x&(-x))
    #define clr(x,y) memset(x,y,sizeof(x))
    #define Mod 1000000007
    using namespace std;
    char ss[20]="nanodesu";
    int main()
    {
        int t,i,j,l;
        int Case=0;
        char str[110];
        scanf("%d",&t);
        while(t--){
            scanf("%s",&str);
            l=strlen(str);
            printf("Case #%d: ",++Case);
            if(l>=4&&str[l-1]=='u'&&str[l-2]=='s'&&str[l-3]=='e'&&str[l-4]=='d'){
                str[l-4]='';
                printf("%s",str);
                printf("%s
    ",ss);
                continue;
            }
            printf("%s",str);
            printf("%s
    ",ss);
        }
        return 0;
    }
    View Code

    1004贪心

    #include<set>
    #include<map>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pb push_back
    #define mp make_pair
    #define Maxn 100010
    #define Maxm 200010
    #define LL __int64
    #define Abs(x) ((x)>0?(x):(-x))
    #define lson(x) (x<<1)
    #define rson(x) (x<<1|1)
    #define inf 100000
    #define lowbit(x) (x&(-x))
    #define clr(x,y) memset(x,y,sizeof(x))
    #define Mod 1000000007
    using namespace std;
    int main()
    {
        int i,n,m,t,Case=1;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&m,&n);
            printf("Case #%d: ",Case++);
            if(m==1)
            {
                for(i=0;i<n;i++)
                    printf("a");
                printf("
    ");
            }
            else if(m>=3)
            {
                int l=n/3;
                for(i=0;i<l;i++)
                    printf("abc");
                if(n%3==1)
                    printf("a");
                else if(n%3==2)
                    printf("ab");
                printf("
    ");
            }
            else if(n==1)
             printf("a
    ");
            else if(n==2)
             printf("ab
    ");
            else if(n==3)
             printf("aab
    ");
            else if(n==4)
             printf("aabb
    ");
            else if(n==5)
             printf("aaaba
    ");
            else if(n==6)
             printf("aaabab
    ");
            else if(n==7)
             printf("aaababb
    ");
            else if(n==8)
             printf("aaababbb
    ");
            else
            {
                int r=(n-2)%6;
                int w=(n-2)/6;
                printf("aa");
                for(i=0;i<w;i++)
                    printf("aababb");
                if(r<=4)
                {
                    for(i=0;i<r;i++)
                        printf("a");
                }
                if(r==5)
                    printf("aaaab");
                printf("
    ");
            }
        }
        return 0;
    }
    View Code

    1007 动态规划

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char x[11],y[11];
    int map[5000][11];
    int c1,c2;
    int w[]={1,2,4,8,16,32,64,128,256,512};
    int jisuan(int a,int b)
    {
        if(b<0) return 0;
        if(a==0) return 1;
        if(map[b][a]>=0) return map[b][a];
        if(a==1)
        {map[b][a]=(10<=b?10:b+1);return map[b][a];}
    
        int j,num=0;
        for(j=0;j<=9;j++)
            num+=jisuan(a-1,b-j*w[a-1]);
        map[b][a]=num;
        return num;
    }
    int main()
    {
        int i,j,n;
        scanf("%d",&n);
        memset(map,-1,sizeof(map));
        for(j=1;j<=n;j++)
        {
            scanf("%s%s",&x,&y);
            c1=strlen(x);c2=strlen(y);
            int zs=0;
            for(i=0;i<c1;i++)
                zs+=(x[i]-'0')*w[c1-i-1];
            int t=0,num=0;
            while(t<c2)
            {
                if(t==c2-1)
                {
                    if(zs>=0)
                    num+=(zs-(y[t]-'0')>=0 ? y[t]-'0'+1 : zs+1);
                    break;
                }
                for(i=0;i<=y[t]-'0';i++)
                {
                    if(i==(y[t]-'0'))
                    {
                        zs-=i*w[c2-t-1];
                        break;
                    }
                    num+=jisuan(c2-t-1,zs-i*w[c2-t-1]);
                }
                t++;
            }
            printf("Case #%d: %d
    ",j,num);
        }
        return 0;
    }
    View Code

    1008 DLX 加个剪枝就行

    #include<set>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pb push_back
    #define mp make_pair
    #define Maxn 60
    #define Maxm 80002
    #define LL __int64
    #define Abs(x) ((x)>0?(x):(-x))
    #define lson(x) (x<<1)
    #define rson(x) (x<<1|1)
    #define inf 1000000
    #define lowbit(x) (x&(-x))
    #define clr(x,y) memset(x,y,sizeof(x))
    #define Mod 1000000007
    using namespace std;
    int D[Maxn*Maxn],U[Maxn*Maxn],L[Maxn*Maxn],R[Maxn*Maxn],S[Maxn*Maxn],C[Maxn*Maxn],H[Maxn],X[Maxn*Maxn],Q[Maxn*Maxn],id,d,n,K,cnt,f,ans;
    int dis[60][60],ty[60];
    bool vi[Maxn];
    void init(int m)
    {
        int i;
        for(i=0;i<=m;i++){
            D[i]=U[i]=i;
            L[i+1]=i;
            R[i]=i+1;
            S[i]=0;
        }
        R[m]=0;
        id=m+1;
    }
    void ins(int r, int c)
    {
        U[id] = c;
        D[id] = D[c];
        U[D[c]] = id;
        D[c] = id;
        if (H[r] < 0)
            H[r] = L[id] = R[id] = id;
        else
        {
            L[id] = H[r];
            R[id] = R[H[r]];
            L[R[H[r]]] = id;
            R[H[r]] = id;
        }
        S[c]++;
        X[id]=r;
        C[id++] = c;
    }
    void Remove(int c)
    {
        int i;
        for(i=D[c];i!=c;i=D[i]){
            L[R[i]]=L[i];
            R[L[i]]=R[i];
        }
    }
    void Resume(int c)
    {
        int i;
        for(i=D[c];i!=c;i=D[i]){
            L[R[i]]=i;
            R[L[i]]=i;
        }
    }
    int A()
    {
        int i,j,k,ret=0;
        memset(vi,false,sizeof(vi));
        for(i=R[0];i;i=R[i]) if(!vi[i]){
            ret++;
            for(j=D[i];j!=i;j=D[j]){
                for(k=R[j];k!=j;k=R[k])
                    vi[C[k]]=true;
            }
        }
        return ret;
    }
    void dfs(int step)
    {
        if(step+A()>K) return ;
        int nn=0;
        int i,j,temp,c;
        for(i=0;i<step;i++){
            nn+=ty[X[Q[i]]];
        }
        if(step-nn>=ans){
            return ;
        }
        if(R[0]==0) {
            f=1;
            nn=0;
            for(i=0;i<step;i++){
                nn+=ty[X[Q[i]]];
            }
            ans=min(ans,step-nn);
            return ;
        }
        temp=inf;
        for(i=R[0];i;i=R[i]) if(S[i]<temp){
            temp=S[i];
            c=i;
        }
        for(i=D[c];i!=c;i=D[i]){
            Q[step]=i;
            Remove(i);
            for(j=R[i];j!=i;j=R[j]){
                Remove(j);
            }
            dfs(step+1);
            for(j=R[i];j!=i;j=R[j])
                Resume(j);
            Resume(i);
        }
        return ;
    }
    void floyd()
    {
        int i,j,k;
        for(k=1;k<=n;k++){
            for(i=1;i<=n;i++){
                for(j=1;j<=n;j++){
                    dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
                }
            }
        }
    }
    void build()
    {
        int i,j,k;
        init(n);
        for(i=1;i<=n;i++){
            H[i]=-1;
            for(j=1;j<=n;j++){
                if(dis[i][j]<=d){
                    ins(i,j);
                }
            }
        }
    }
    int main()
    {
        int t,i,j,u,v,val,Case=0;
        scanf("%d",&t);
        while(t--){
            clr(dis,63);
            K=0;
            scanf("%d%d",&n,&d);
            for(i=1;i<=n;i++){
                scanf("%d",ty+i);
                K+=ty[i];
                dis[i][i]=0;
            }
            for(i=1;i<n;i++){
                scanf("%d%d%d",&u,&v,&val);
                dis[u][v]=dis[v][u]=val;
            }
            floyd();
            build();
            f=0;
            ans=inf;
            dfs(0);
            printf("Case #%d: ",++Case);
            if(!f){
                printf("-1
    ");
                continue;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code

    1010 单调队列

    #include<set>
    #include<map>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pb push_back
    #define mp make_pair
    #define Maxn 200010
    #define Maxm 200010
    #define LL __int64
    #define Abs(x) ((x)>0?(x):(-x))
    #define lson(x) (x<<1)
    #define rson(x) (x<<1|1)
    #define inf 100000
    #define lowbit(x) (x&(-x))
    #define clr(x,y) memset(x,y,sizeof(x))
    #define Mod 1000000007
    using namespace std;
    int cnt[40],num[Maxn];
    int que[Maxn];
    int getnum(int val,int c)
    {
        int temp=val,cc=0;
        int sum=0;
        while(val){
            if(val%2) cnt[cc]+=c;
            val>>=1;
            cc++;
        }
        for(int i=0;i<=30;i++)
        if(cnt[i]){
            sum+=(1<<i);
        }
        return sum;
    }
    int main()
    {
        int t,n,m,i,j,Case=0;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            for(i=1;i<=n;i++){
                scanf("%d",num+i);
            }
            clr(cnt,0);
            int head=0,rear=0;
            int temp;
            LL ans=0;
            for(i=1;i<=n;i++){
                temp=getnum(num[i],1);
                que[rear++]=i;
                while(rear>=head&&temp>=m){
                    temp=getnum(num[que[head]],-1);
                    head++;
                }
                ans+=(LL)rear-head;
            }
            printf("Case #%d: %I64d
    ",++Case,ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Using Apache Maven
    Getting Started(Google Cloud Storage Client Library)
    【iOS】PLA 3.3.12
    【Android】System.exit(0) 退出程序
    【iOS】Ineligible Devices || “无法下载应用程序”
    【iOS】No suitable application records found
    【Android】Failed to convert @drawable/picture into a drawable
    【SVN】eclipse 安装 SVN 插件
    【SVN】SVN Working copy is too old
    【Android】Android sdk content loader 0%
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3321641.html
Copyright © 2011-2022 走看看