zoukankan      html  css  js  c++  java
  • 2013年江西理工大学C语言程序设计竞赛(高级组)

    A

    解法:dfs搜索,注意一个剪枝,否则会超时(听说原本是个dp)?

    #include<stdio.h>
    //#include<bits/stdc++.h>
    #include<string.h>
    #include<iostream>
    #include<math.h>
    #include<sstream>
    #include<set>
    #include<queue>
    //#include<map>
    #include<vector>
    #include<algorithm>
    #include<limits.h>
    #define inf 0x3fffffff
    #define INF 0x3f3f3f3f
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define ULL unsigned long long
    using namespace std;
    int n,m,k,MIN;
    int v,u,w;
    int i,j;
    int map[1100][1100];
    void dfs(int s,int num,int sum)
    {
        if(s==n)
        {
            MIN=min(sum,MIN);
            return ;
        }
        if(num==k)
            return ;
        for(int i=1;i<=n;i++)
        {
            if(map[s][i]!=-1&&sum+map[s][i]<=MIN)
                dfs(i,num+1,sum+map[s][i]);
        }
    }
    int main()
    {
        while(~scanf("%d%d%d",&n,&m,&k))
        {
            if(n+m+k==0) break;
            memset(map,-1,sizeof(map));
            for(i=0;i<m;i++)
            {
                cin>>u>>v>>w;
                map[u][v]=map[v][u]=w;
            }
            MIN=inf;
            dfs(1,0,0);
            if(MIN==inf)
            {
                puts("CONTINUE LOL!");
            }
            else
            {
                printf("%d
    ",MIN);
            }
        }
        return 0;
    }
    

    B

    解法:模拟,移动数组

    #include <stdio.h>
    int main()
    {
        int n,q;
        int a[100];
        while(~scanf("%d%d",&n,&q)&&(n+q))
        {
            int xi;
            int c=1;
            for(int i=1;i<=n;i++)
            {
                a[i-1]=c;
                c++;
            }
            while(q--)
            {
                scanf("%d",&xi);
                int b=a[xi-1];
                for(int i=xi-1;i>=0;i--)
                {
                    a[i]=a[i-1];
                }
                a[0]=b;
            }
            for(int i=0;i<n;i++)
            {
                printf("%d ",a[i]);
            }
            printf("
    ");
        }
        return 0;
    }
    

    C

    解法:字符串匹配

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char a[100000];
        char b[100000];
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            while(n--)
            {
                scanf("%s%s",a,b);
                if(strstr(b,a)!=NULL)
                    printf("YES
    ");
                else
                    printf("NO
    ");
            }
        }
    }
    

    D

    解法:链接:http://blog.csdn.net/ramay7/article/details/50328357

    #include <stdio.h>
    int main()
    {
        //freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
        long long u, d, ans, cases = 0,t;
        while (~scanf("%lld%lld", &u, &d))
        {
            if(u==0&&d==0) break;
            ans = 0;
            while (d)
            {
                ans += u / d;
                t = u%d;
                u = d;
                d = t;
            }
            printf("%lld
    ", ans);
        }
        return 0;
    }
    

    E

    解法:链接http://acm.hdu.edu.cn/showproblem.php?pid=1205

    #include <stdio.h>
    int a[1000100];
    int main()
    {
        int i,n,t,max;
        int sum;
        scanf("%d",&t);
        while(t--)
        {
             sum=0;
            scanf("%d",&n);
            max=-1;
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                sum+=a[i];      
               if(a[i]>max) max=a[i];
            }
          //  printf("%d %d
    ",Max,sum);
            sum=sum-max+1; 
            if(sum>=max) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    

    F

    解法:模拟

    #include <iostream>
    #include<stdio.h>
    using namespace std;
    typedef struct stdust
    {
        char name[100];
        int score;
    } hehe;
     
     
     
    int main ()
    {
        int n,x,i,sum,zhang,d;
        cin>>x;
        {
            while(x--)
            {
                cin >> n;
                sum=0;
                zhang=0;
                hehe stdust[n];
                for (int i=0; i<n; i++)
                    cin >>  stdust[i].name >>  stdust[i].score;
                for(int i=0; i<n; i++)
                {
                    if(stdust[i].score<=40)
                        sum+=1;
                    if(stdust[i].score>40)
                    {
                        if(stdust[i].score%40==0)
                            d=stdust[i].score/40;
                        else
                            d=stdust[i].score/40+1;
                        sum+=d;
                        zhang+=3;
                    }
     
                }
                cout<<sum<<" "<<zhang<<endl;
            }
        }
    }
    

    G

    解法:没有什么好说的

    #include<stdio.h>
    int main()
    {
        int n,a,sum;
        while(scanf("%d",&n),n)
        {
            sum=0;
            while(n--)
            {
                scanf("%d",&a);
                sum+=a;
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    

    H

    解法:暂无(记忆化搜索??)

  • 相关阅读:
    ROS探索总结(三十一)——ros_control
    ROS探索总结(四十二)——twist_mux多路切换器
    综合面试十大维度解析
    面试官实战-2-业务面试官必须掌握的面试方法及实战演练
    面试官实战-1-素质测评起源和分析
    好的招聘官
    好的候选人
    专题工作模板
    月周报模板
    学习记录模板
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/6091080.html
Copyright © 2011-2022 走看看