zoukankan      html  css  js  c++  java
  • 2017.10.5 QBXT 模拟赛

    题目链接

    T1

      从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和。最后如果仍没找到最小的解,输出所有数的和+1

    #include <algorithm>
    #include <cstdio>
    #define N 100005
    typedef long long LL;
    using namespace std;
    int n,a[N];
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i) scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        LL sum=0;
        for(int i=1;i<=n;++i)
        {
            if(a[i]>sum+1)
            {
                printf("%lld
    ",sum+1);
                return 0;
            }
            else sum+=a[i];
        }
        printf("%lld
    ",sum+1);
        return 0;
    }
    View Code

    T2

      规律题

    #include <cstdio>
    #include <cmath>
    
    long long n;
    int main()
    {
        freopen("div.in","r",stdin);
        freopen("div.out","w",stdout);
        scanf("%lld",&n);
        long long k=sqrt(n);
        if(k==n/k) printf("%lld
    ",k*2-1);
        else printf("%lld
    ",k*2);
        fclose(stdin); fclose(stdout);
        return 0;
    }
    View Code

    T3

      meet in the middle

    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    
    using namespace std;
    int tt;
    int n,m;
    int v[35];
    double p[35];
    double ans[35];
    vector<pair<int,double> > sta[35];
    int main()
    {
         freopen("diamond.in","r",stdin);
         freopen("diamond.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1,x;i<=n;i++)
        {
            scanf("%d%d",&v[i],&x);
            p[i]=x/100.;
        }
        int an=(n/2.5)+1;
        int bn=n-an;
        for(int st=0;st<1<<bn;st++)
        {
            double nowp=1;
            int cnt=0,money=0;
            for(int i=0;i<bn;i++)
            {
                if((st>>i)&1)
                {
                    money+=v[n-i];
                    nowp*=p[n-i];
                }
                else
                {
                    cnt++;
                    nowp*=(1-p[n-i]);
                }
            }
            sta[cnt].push_back(make_pair(money,nowp));
        }
        for(int i=0;i<=n;i++)
        {
            sort(sta[i].begin(),sta[i].end());
            for(int j=1;j<sta[i].size();j++)
                sta[i][j].second+=sta[i][j-1].second;
        }
        for(int st=0;st<1<<an;st++)
        {
            double nowp=1;
            int cnt=0,money=0;
            for(int i=0;i<an;i++)
            {
                if((st>>i)&1)
                {
                    money+=v[i+1];
                    nowp*=p[i+1];
                }
                else
                {
                    cnt++;
                    nowp*=(1-p[i+1]);
                }
            }
            for(int i=0;i<=bn;i++)
            {
                // now d =cnt+i
                int L = m-money;
                vector<pair<int,double> >::iterator it = lower_bound(sta[i].begin(),sta[i].end(),make_pair(L,-1.));
                double tmp = sta[i].back().second;
                if(it!= sta[i].begin())
                {
                    it--;
                    tmp-=it->second;
                }
                ans[cnt+i] += tmp*nowp;
            }
        }
        for(int i=0;i<=n;i++)
            printf("%.3f
    ",ans[i]);
         fclose(stdout);
        return 0;
    }
    View Code
    
    
  • 相关阅读:
    201720181 JaWorld 第三周作业
    201720181 Java小组1623 第一周作业
    201720181 JaWorld 第四、五周作业
    201720181 Java小组1623 第二周作业
    无法打开用户默认数据库的解决方法
    技术网站/博客网址收藏
    .net中防止用户多次登录的方法
    asp.net导出excel方法总结
    面向对象设计模式之Bridge桥接模式(结构型)
    面向对象设计模式之Composite组合模式(结构型)
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7646912.html
Copyright © 2011-2022 走看看