• Codeforces Round #499 (Div. 2) ABC


    比赛链接:http://codeforces.com/contest/1011

    A. Stages

    输入n,k,之后输入长度为n的字符串,要求找到一个字典序最短的长度为k的子串,且若字母为c,则之后不可以添入abcd,a=1,b=2,求最小的ans

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n,k,a[300]={0};
    char x;
    
    int main()
    {
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            cin>>x;
            a[x-'a'+1]=1;
        }
        int p=0,ans=0;
        for(int i=1;i<=26;i++){
            if(p==k) break;
            if(a[i])
            {
                p++;ans+=i;i++;
            }
        }
        if(p!=k)cout<<-1;
        else cout<<ans;
        return 0;
    }

    B. Planning The Expedition

    有n个人,m袋食物,每个人只能吃相同的食物(不同的人可以吃不同的),问坚持最长的时间是多少

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int m,n,x,cnt[105]={0};
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>m>>n;
        for(int i=1;i<=n;i++){
            cin>>x;
            cnt[x]++;
        }
        int ans;
        for(int i=n;i>0;i--){
                int s=0;
            for(int j=1;j<=100;j++)
                s+=cnt[j]/i;
            if(s>=m){
                ans=i;
                break;
            }
        }
        cout<<ans<<endl;
        return 0;
    }

     C. Fly

    题意:总共有n个星球,飞船从地球起飞经过n-2个星球(在每个星球上做降落、起飞的动作)到达火星,在火星上同样降落起飞,然后直接返回地球做降落。每个星球起飞所需的燃料质量为ai,降落所需要的燃料质量为bi。飞船本身载重为m,附加燃料质量为所求值。问至少需要多少质量的燃料使得地球能做完整的往返运动,精度为1e-6

    拿第一组样例来说

    11 8
    7 5

    欲最小,回到起点时候肯定就耗光了汽油,而最后一个待过的机场是 7 机场,因为2*7=12+2,2吨汽油能让他飞14,恰好是飞机重量+耗油重量,依次回推2*8=14+2,16+4=5*4,20+2=11*2

    得 x*(a[i]或者b[i])=s+x  ,s为下一站油和机身的和,x和具体某个机场的耗油量。

    说是数学,其实就是证明下就能发现,无论a[i] b[i]用哪个顺序,最后耗油最小量都一样

    注意a[i],b[i]<=1时方程无解的细节!!!

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n;
    double m;
    int a[1050],b[1050];
    
    
    int main()
    {
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>n>>m;
        int flag=1;
        for(int i=1;i<=n;i++) {
                cin>>a[i];
                if(a[i]<=1) flag=0;
        }
        for(int i=1;i<=n;i++) {
                cin>>b[i];
                if(b[i]<=1) flag=0;
        }
        if(flag==0) { puts("-1");return 0;}
        double sum=0,x;
        for(int i=1;i<=n;i++){
            x=m/(a[i]-1),m+=x,sum+=x;
            x=m/(b[i]-1),m+=x,sum+=x;
        }
        printf("%.10f
    ",sum);
        return 0;
    }
  • 相关阅读:
    iTOP-4412开发板-串口基础知识和测试方法
    迅为i.MX6ULL终结者开发板-能想到的功能它都有
    Android4.4.2 源码编译-iMX6Q/D核心板-非设备树源码
    如何让Dev支持c++11特性
    2019年第十届蓝桥杯【C++省赛B组】
    upper_bound()和low_bound函数的基本使用和理解(转载,已获博主授权)
    C++的bitset(位操作使用),转载
    2018年第九届蓝桥杯【C++省赛B组】(未完)
    2013蓝桥杯预赛C/C++本科B组
    信用卡号验证
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9377490.html
Copyright © 2020-2023  润新知