• Educational Codeforces Round 15(简单题)


    A. Maximum Increase
    题意:
    给出一个数列(n<100000),问最长连续上升子序列?

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+9;
    int a[N];
    int main()
    {
        int n;scanf("%d",&n);
        int maxn=1;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        a[0]=0;
        int t=0;
        for(int i=1;i<=n;i++){
            if(a[i]>a[i-1])t++;
            else maxn=max(maxn,t),t=1;
        }
        maxn=max(maxn,t);
        printf("%d
    ",maxn);
        return 0;
    }

    B. Powers of Two
    题目:
    给一个数列(n<100000),问符合ai+aj是2的幂次(i< j)的有几对?

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+9;
    int a[N];
    int main()
    {
        int n;scanf("%d",&n);
        map<int,int>mp;
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            mp[a[i]]++;
        }
        ll ans=0;
        for(int i=0;i<n;i++){
            mp[a[i]]--;
            for(int j=0;j<32;j++){
                int x=(1<<j)-a[i];
                ans+=mp[x];
            }
        }
        printf("%I64d
    ",ans);
        return 0;
    }

    C. Cellular Network
    题意:
    有n个城市,城市位置是ai,有m个信号塔,在bi,距离信号塔r范围之内的城市可以被覆盖,问覆盖所有城市的最小r是多少?a和b序列都是不下降序列。
    分析:
    二分答案,然后判断r是否可以覆盖所有城市。
    在判断某个城市是否可以被覆盖的时候,二分找出离他最近的信号塔,然后判断即可。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+9;
    int a[N];
    int n,m,b[N];
    bool ismax(int x)
    {
        for(int i=0;i<n;i++){
            int k=lower_bound(b,b+m,a[i])-b;
            //cout<<k<<endl;
            if(k>0&&b[k-1]+x>=a[i]&&b[k-1]-x<=a[i])continue;
            if(k<m-1&&b[k+1]+x>=a[i]&&b[k+1]-x<=a[i])continue;
            if(k>=0&&k<m&&b[k]+x>=a[i]&&b[k]-x<=a[i])continue;
            return false;
        }
        return true;
    }
    
    int main()
    {
        //freopen("f.txt","r",stdin);
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)scanf("%d",&a[i]);
        for(int i=0;i<m;i++)scanf("%d",&b[i]);
    
        int l=0,r=2e9;
        while(l<r){
            int m=l+(r-l)/2;
            if(ismax(m))r=m;
            else l=m+1;
        }
        printf("%d
    ",l);
        return 0;
    }

    D. Road to Post Office
    题意:
    一个人开车去公司,距离是d公里,每次开车可以行使k公里后就坏了,修车需要t秒,开车行驶一公里需要a秒,走路需要b秒,a< b。问到公司需要的最少时间?
    分析:
    因为a< b,所以刚开始一定是开车的,加入k公里后没到公司,那么就需要决策是否修车或者直接走路了。
    这题要注意用long long。中间自己在这里坑了一次。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int>pii;
    const int INF=0x3f3f3f3f;
    const int N=1e5+9;
    ll d,k,a,b,t;
    int main()
    {
        cin>>d>>k>>a>>b>>t;
        double x=1.0*t/k+a;
        ll ans=0,ans0=0;
         //走路
            ll kk=k,dd=d;
            while(dd>0&&kk>0)ans0+=a,dd--,kk--;
            ans0+=dd*b;
         //继续开车
        kk=k;
        while(d>0&&kk>0)ans+=a,d--,kk--;
        ll n=d/k;
        ans+=n*t+a*n*k;
        n=d%k; //剩下最后一段距离,选择开车还是走路?
        ll a1=b*n; 
        ll a2=t+n*a;
        printf("%I64d
    ",min(ans0,min(a1,a2)+ans));
        return 0;
    }

    E. Analysis of Pathes in Functional Graph
    比赛的时候毫无思路,另写一篇吧QAQ

  • 相关阅读:
    自定义注解!绝对是程序员装逼的利器!!
    我女儿说要看雪,但是我家在南方,于是我默默的拿起了键盘,下雪咯。
    零基础转行前端,如何拿下了字节跳动、美团等大厂offer
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    web面试必问的题
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    520了,用32做个简单的小程序
    虚拟机找不到本机vmnet0,vmnet8,无法连接xshell,解决方案
    Linux用户登出之后保持后台进程(nohup)
    Debian取消从光盘安装软件的方式(please insert the disc labeled)
  • 原文地址:https://www.cnblogs.com/01world/p/5762828.html
Copyright © 2020-2023  润新知